【问题标题】:Recording high quality video using Flash and Red5 Media Server使用 Flash 和 Red5 媒体服务器录制高质量视频
【发布时间】:2013-09-18 21:34:23
【问题描述】:

我正在本地计算机上运行 Video Recorder 应用程序(用 ActionScript 3.0 编写)。它使用安装在远程 Amazon EC2 服务器上的 Red5 服务器进行记录。

要录制,我使用以下设置

  • 宽度、高度和 FPS(Camera.setMode()) - 1920 x 1080 和 10
  • 带宽和质量(Camera.setQuality())- 0 和 80
  • 缓冲时间(NetStream.setQuality()) - 3600

我可以录制视频直到缓冲区被填满(我一直在监视NetStream.BufferLength

一旦停止记录 - 缓冲区中的数据将被发送到服务器。现在,当我尝试使用 (bufferTime = 1) 播放时,视频没有出现。

我已将 ssh 'ed 到 EC2 服务器中,并看到该文件确实在 red5/webapps/vod/streams 文件夹中创建,但我不确定它的质量或它是否已正确记录。我什至使用基于命令行的电影播放器​​mplayer 来尝试播放文件,但它无法播放,因为我猜 Ec2 服务器 Ubuntu 缺少播放插件(虽然不确定。)

但是,当使用 640 x 480 而不是 1920 x 1080 进行低质量录制时,缓冲区不会被填充超过 0.1 或 0.2,并且视频可以流畅地播放。

我的互联网上传速度约为 300 kbps。

我如何(如果可能)录制并播放高质量视频?

【问题讨论】:

  • 我并不完全了解您的播放器的工作原理,但以您的上传带宽,除非质量明显下降,否则上传高清视频需要好几个小时。

标签: actionscript-3 flash video amazon-ec2 red5


【解决方案1】:

您的问题源于这三个同时发生的原因:

  • 录制高质量视频会导致数据必须在本地缓冲
  • Flash Player 仅缓冲视频数据(适用于实时流式传输)
  • Red5 处理录制结束时出现的视频数据的错误机制

Red5 一直受到许多录制问题的困扰。 This HDFVR documentation article 涵盖了 Red5 的各种录制问题以及通过 连接录制时处理 FP 缓冲区的机制。

媒体服务器需要通过等待更多视频数据包来解决这个问题,并将它们与音频数据包一起排序,然后再将数据写入磁盘(.flv 文件)。

Red5 0.8 没有这样的机制,因此通过慢速连接录制高质量视频会导致低质量/加扰的视频文件(只是音频,最后是所有视频)。

Red5 0.9 的音频视频录制完全中断。

Red5 1.0 RC1 有一个新的延迟写入机制 - 由 Red5/conf/red5-common.xml 控制 - 等待音频和视频数据并在将数据包写入磁盘之前重新排列它们。 queueThreshold 值测量 rtmp 消息/数据包。

Red5 1.0 final、1.0.1 和 1.0.2 的延迟写入机制完全被破坏了。开启它后,通过慢速连接,Red5 正在生成只有 1 或 2 个视频关键帧的 .flv 文件。播放此类 .flv 文件时,视频会从第一秒开始卡住,并且只会继续播放音频。使用 yamdi 提取关键帧数据确认 .flv 文件缺少视频关键帧。

不过,感谢 HDFVR 对 Red5 的代码贡献,Red5 1.0.3 及更高版本修复了通过连接进行视频录制

【讨论】:

    【解决方案2】:

    你需要使用

    // Ensure that no more than 43690.6(43K/second) is used to send video. camera.setQuality(43690.6,0);

    这对我有用。我使用了 Amazon EC2 超大实例。

    【讨论】:

      猜你喜欢
      • 2012-01-21
      • 2013-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      相关资源
      最近更新 更多