使用Flash和Red5 Media Server录制高质量视频

时间:2013-09-14 06:48:15

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

我正在从本地计算机上运行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加入了EC2服务器并看到该文件确实是在red5/webapps/vod/streams文件夹中创建的,但我不确定其质量或是否已正确记录或不。我甚至使用基于命令行的电影播放器​​mplayer来尝试播放该文件,但它没有播放,因为我猜测Ec2服务器Ubuntu缺少播放插件(虽然不确定。)

然而,当它是640 x 480而不是1920 x 1080的低质量录制时,缓冲区不会被填充超过0.1或0.2,并且视频会顺利播放。

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

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

2 个答案:

答案 0 :(得分:0)

您需要使用

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

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

答案 1 :(得分:0)

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

  • 录制高质量视频,导致数据必须在本地缓存
  • 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生成.flv文件只有1或2个视频关键帧。播放这样的.flv文件时,视频会从第1秒开始卡住,只有音频才会继续播放。使用yamdi提取关键帧数据确认.flv文件缺少视频关键帧。

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