有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Red5视频流录制正在中断

最后,我创建了一个流视频录像机flash应用程序及其简单的Red5后端,但当然,Red5再次取笑了我。大多数情况下,录制的视频都已损坏,无法在不随机停止恢复、挂断播放机的情况下播放。。我也是。为什么要这样做

我研究了互联网,发现了这个问题,但没有解决办法!我尝试不录制视频,而是将其切换为live并附加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,但结果是一样的!这些视频似乎被破坏了


共 (2) 个答案

  1. # 1 楼答案

    *但是我应该在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)获取编写器的实例

    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

    类还包含收集数据包的队列

    iStream数据包。getType==9是视频,我认为8是音频(但您需要验证这一点)

    塞巴斯蒂安

  2. # 2 楼答案

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

    我已经在:http://incubator.apache.org/openmeetings/成功地实现了这两个解决方案 没有断断续续的视频或随机停止/暂停

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

    塞巴斯蒂安