在Flash中,我有一个应用程序,其中有多人通过NetStreams以不同的比特率和不同的质量设置与Flash Media Server / Adobe Media Server共享实时摄像头。
我需要移动用户以不同的质量设置接收实时Feed。
我在Adobe API文档中找到了receiveVideoFPS,但是经过大量的汗水和更多的眼泪,似乎不支持w / H.264 ......(去图 - http://forums.adobe.com/message/3841837#3841837#3841837)
那么还有其他任何方式可以让任何人知道吗?或者我需要为此做什么定制或什么? 有任何想法吗 ?解决方法?
目前:Flash Applicaion Publisher>通过NetStream分享相机>发布到FMS / AMS 目标:Flash应用程序收件人>以不同的fps和/或分辨率订阅已发布的NetStream
答案 0 :(得分:0)
我看到有两种方法可以做到这一点。
如果PC或移动用户一次只能看到任何流,则第一种方式是合适的。然后你必须获得输入视频分辨率,如果它不合适,通过NetStream“发送”方法发送具有正确视频高度/宽度的消息。发布者必须接收此命令并更改其Camera对象参数。
第二个更难,但它可以在任何情况下使用。您必须在服务器上转码和重新流式传输流。因此,每个人都会流入PC质量,当移动用户尝试观看流时,他向mediaserver发送一个restream请求,mediaserver接收它并创建一个具有相同名称和一些后缀的新流(例如“stream” - > “stream_MOBILE”)。必须在此流中推送转码后的视频(您可以使用FFmpeg转码器)。完成此操作后,您的移动设备应该收听“_MOBILE”流。
一个月前我遇到过类似的问题。顺便说一下,我使用的是Wowza Media Server,而不是FMS。我知道,在Wowza中有一个原生的代码转换工具,但没有钱买它,所以我被迫使用FFmpeg(它完全免费)。在我的情况下,解决方案非常简单:我写了一个小的服务器端模块,它正在监听HTTP-GET请求,如:
的http:// [ADR]:[端口] / restream ID = ID&安培; W = XX&安培; H = YY
其中ID是流的名称,XX / YY是新的视频尺寸。
当收到此类请求时,会触发一个脚本,其中只有启动FFmpeg的功能。它从这样的命令开始:
ffmpeg -i rtmp:// [adr] / [appName] / [streamName] -vcodec libx264 -s 352x288 -acodec copy -f flv rtmp:// [adr] / [appName] / [newStreamName]
此命令使FFmpeg将-i stream转码为-f dir,其大小为-s,编解码器为-vcodec和-acodec。
如您所见,这很容易。 FFmpeg中有很多参数,如比特率,帧率,图像质量等。