当前位置: 首页 > 面试题库 >

Red5视频流录制中断

西门旻
2023-03-14
问题内容

最终,我创建了一个流式录像机Flash应用程序及其简单的Red5后端,但是Red5当然再次使我开玩笑。在大多数情况下,录制的视频已损坏,无法在不随机停止-
继续播放的情况下播放它们,也不会和播放器和我一起玩。为什么这样做呢?

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

执行调用时出错:服务:null方法:播放数字参数: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 Line附近

        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 Line附近

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

塞巴斯蒂安



 类似资料:
  • 我正在使用AVPlayer播放HLS流。当用户按下录制按钮时,我还需要录制这些流。我使用的方法是分别录制音频和视频,然后在最后合并这些文件以制作最终视频。远程mp4文件是成功的。 但是现在对于HLS(.m3u8)文件,我可以使用AVAssetWriter录制视频,但音频录制有问题。 我正在使用MTAudioProccessingTap处理原始音频数据并将其写入文件。我遵循了这篇文章。我能够录制远程

  • 我们有一台摄像机,记录高FPS率-163的视频。 谢谢!

  • 问题内容: 我正在尝试建立一个程序来录制一部分互联网音频流,并将其保存到文件(最好是mp3或wav)。我到处都看过,找不到任何合适的方法来做到这一点。我找到了两个似乎可以工作的不同库(NativeBass和Xuggle),但我都不支持64位Windows。 有谁知道使用Java保存一部分互联网音频流的任何简单方法?(如果重要,则为“音频/ mpeg”流)。 编辑:好的,我发现了一种可行的方法。但是

  • 我使用jitsi为我们的需求之一。我已经按照快速安装步骤配置和安装jitsi。我也在使用https://jitsi.github.io/handbook/docs/dev-guide/dev-guide-iframe来创建空间以及一些配置更改。 我们的一个要求是单独录制参与者的视频。基本上保存了每个参与者的视频流。据我所知,Jibri记录了整个会议,但我们需要单独的与会者视频流。有一个图书馆,现在

  • 我将在android上播放Vimeo在线流媒体的视频。为此,我现在正在使用VideoView。现在,我想控制视频播放速度控制功能,如:0.5x、1x、1,5x、2x和视频缓存支持。Android VideoView是否可以实现这两个功能,或者我是否可以使用第三个播放器?帮助

  • 我正在尝试用HLS格式录制rtsp流。我需要同时录制音频和视频。使用下面的命令,可以录制一些流的视频和音频,比如来自Internet rtsp://wowzaec2demo.streamlock.net/vod/mp4:bigbuckbunny_115k.mov的测试rtsp流。至于我的IP相机,它不工作,意味着视频被录制,但没有音频输出文件。 这是我的IP相机的命令行输出,同时开始录制上面的命令