gpt4 book ai didi

java - Red5 视频流录制正在中断

转载 作者:行者123 更新时间:2023-12-04 05:29:08 25 4
gpt4 key购买 nike

最后,我创建了一个流视频录像机 Flash 应用程序及其简单的 Red5 后端,但当然 Red5 再次笑话我。大多数情况下,录制的视频已损坏,无法在不随机停止恢复的情况下播放它们,挂出播放器......还有我。为什么要这样做?

我研究了互联网,发现了这个问题,但没有解决方案!我试图不录制视频,而是将其切换为直播并附加一个 ffmpeg 来完成这项肮脏的工作,但自然而然,ffmpeg 无法与 red5 输出上的以下错误消息连接:

Error executing call: Service: null Method: play Num Params: 1 0: my_little_stream ... blabla bla



在我尝试集成 Xuggler 之前东西我真的不想问你,该怎么办,我可以以某种方式附加 ffmpeg 或者 red5 服务器中是否有我应该更改的配置.. 或任何东西!谢谢!

编辑 : 我使用的是 Red5 1.0 RC2

编辑#2 :我使用 red5 1.0.0rc2 服务器文件从主干源编译了 oflaDemo 应用程序,然后使用简单的 flex 应用程序创建了一个实时流,只是为了尝试 ffmpeg 记录器是否工作。现在它可以连接到 red5 但结果是一样的!视频好像坏了。。。

最佳答案

*但是我应该在 packetReceived() 函数中放入什么? *

我将其添加到单独的答案中以正确突出显示:

要将数据包写入磁盘,您需要:
1)数据包,
2) 将数据包转换为 ITag
3) 获取一个 ITagWriter 的实例

1) 分组数据
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/flvrecord/listener/StreamVideoListener.java?view=markup
50号线附近

public void packetReceived(IBroadcastStream broadcastStream,
IStreamPacket streampacket) {

}

streampacket => 要写入磁盘的数据包。

2) 通过将数据包转换为 ITag 来写入数据包

http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/flvrecord/listener/async/StreamVideoWriter.java?view=markup
90ff线附近
        IoBuffer data = streampacket.getData().asReadOnlyBuffer();

if (data.limit() == 0) {
return;
}

if (startTimeStamp == -1) {
// That will be not bigger then long value
startTimeStamp = streampacket.getTimestamp();
}

timeStamp -= startTimeStamp;

ITag tag = new Tag();
tag.setDataType(streampacket.getDataType());

// log.debug("data.limit() :: "+data.limit());
tag.setBodySize(data.limit());
tag.setTimestamp(timeStamp);
tag.setBody(data);

writer.writeTag(tag);

3) 获取 Writer 的实例

http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/flvrecord/listener/async/BaseStreamWriter.java?view=markup
90ff线附近
protected ITagWriter writer = null;

private void init() throws IOException {
file = new File(OmFileHelper.getStreamsSubDir(this.scope.getName()), this.streamName + ".flv");

IStreamableFileFactory factory = (IStreamableFileFactory) ScopeUtils
.getScopeService(this.scope, IStreamableFileFactory.class,
StreamableFileFactory.class);

if (!this.file.isFile()) {
// Maybe the (previously existing) file has been deleted
this.file.createNewFile();

} else if (!file.canWrite()) {
throw new IOException("The file is read-only");
}

IStreamableFileService service = factory.getService(this.file);
IStreamableFile flv = service.getStreamableFile(this.file);
this.writer = flv.getWriter();

}

所以这是一个粗略的过程。从这个意义上说,你可以继续前进。


http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/flvrecord/listener/async/BaseStreamWriter.java?view=markup

类还包含一个队列来收集数据包。

IStreamPacket.getType == 9 是视频,我认为 8 是音频(但您需要验证)。

塞巴斯蒂安

关于java - Red5 视频流录制正在中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12845920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com