Red5video流录制正在分手

最后我创建了一个流录像机Flash应用程序及其简单的Red5后端,但当然Red5再次开玩笑。 大多数情况下录制的video都已损坏,无法随意停止播放,播放播放器以及我也无法播放。 它为什么这样做?

我研究了互联网,发现了这个问题,但没有解决方案! 我尝试不录制video,而是将其切换为live并附加ffmpeg来执行脏作业,但自然ffmpeg无法连接red5输出上的以下错误消息:

执行调用时出错:Service:null方法:play Num Params:1 0:my_little_stream … blabla bla

在我尝试整合Xuggler之前我真正不想要的东西我问你,做什么,我可以以某种方式附加ffmpeg,或者我应该更改red5服务器中的配置..或者其他任何东西! 谢谢!

编辑 :我正在使用Red5 1.0 RC2

编辑#2 :我使用red5 1.0.0rc2服务器文件从trunk源编译了oflaDemo应用程序,然后使用简单的flex应用程序创建了一个实时流,以便尝试ffmpeg recorder工作。 现在它可以连接到red5,但结果是一样的! video似乎已损坏……

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

我在一个单独的答案中添加这个以正确突出显示:

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

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

public void packetReceived(IBroadcastStream broadcastStream, IStreamPacket streampacket) { } 

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

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

线路90ff附近的http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/flvrecord/listener/async/StreamVideoWriter.java?view=markup

  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的实例

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

 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

class还包含一个用于收集数据包的队列。

IStreamPacket.getType == 9是video,我认为8是音频(但你需要validation)。

塞巴斯蒂安

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

我已成功实施了两个解决方案: http : //incubator.apache.org/openmeetings/没有乱七八糟的video或随机停止/暂停。

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

塞巴斯蒂安