Red5视频流录制正在中断



最后我创建了一个流式录像机闪存应用程序及其简单的Red5后端,但当然Red5又开了我的玩笑。大多数时候,录制的视频都已损坏,无法在不随机停止恢复、挂断播放器的情况下播放。。还有我。它为什么要这么做?

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

执行调用时出错:服务:null方法:播放Num参数:1 0:my_little_stream。。。blabla bla

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

编辑:我使用的是Red5 1.0 RC2

编辑#2:我用red5 1.0.0rc2服务器文件从主干源编译了ofLDemo应用程序,然后用一个简单的flex应用程序创建了一个直播流,只是为了测试ffmpeg记录器是否有效。现在它可以连接到red5,但结果是一样的!视频似乎已损坏。。。

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

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

要将数据包写入磁盘,您需要:1) 分组,2) 将数据包转换为ITag3) 获取ITagWriter 的实例

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

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=markup90线附近

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=markup90线附近

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是音频(但您需要验证)。

Sebastian

您现在使用什么录制方法?Red5中实际上有两种方法可以记录:1) NetStream.record=>这很简单2) 你做NetStream"直播",但你有一个服务器端的StreamListener,你连接到流,然后将流写入光盘。

我已在以下位置成功实施了这两种解决方案:http://incubator.apache.org/openmeetings/没有断断续续的视频或随机停止/暂停。

没有必要集成FFMPEG或Xuggler来用Red5进行简单的录制!如果要修改生成的视频并添加水印,则FFMPEG可能很有用。对于音频编辑,您可以使用SoX等工具。然而只是简单的记录和播放,根本不需要这些工具!

Sebastian

相关内容

  • 没有找到相关文章

最新更新