我看到2种方法可以做到这一点。
第一种方法适用于PC或移动用户一次只能看到任何流的情况。然后您必须获得输入视频分辨率,如果不适合,请通过NetStream“发送”方法发送具有正确视频高度/宽度的信息。发布者必须收到此命令并更改其Camera对象参数。
第二个是比较困难,但它可以在任何情况下使用。你必须对服务器进行流式转码和重新流式处理。所以每个人都会使用PC质量,当移动用户尝试观看流时,他向mediaserver发送一个restream请求,mediaserver接收它并创建一个具有相同名称和一些后缀的新流(例如“stream” - >“ stream_MOBILE“)。必须在此流中推送转码后的视频(您可以使用FFmpeg转码器)。完成后,您的移动设备应该收听“_MOBILE”流。
一个月前我面临类似的问题。顺便说一句,我使用的是Wowza Media Server,而不是FMS。我知道,Wowza有一个本地转码器工具,但没有钱购买它,所以我不得不使用FFmpeg(这是免费的)。在我的情况下,解决方案非常简单:我写了一个小服务器端模块,它正在监听HTTP-GET请求,如:
http:// [adr]:[port]/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流转码为-f dir,大小为-s和编解码器-vcodec和-acodec。
正如你所看到的,这很容易。 FFmpeg中有很多参数,比如比特率,帧率,图像质量等。
解决方案2将是理想的。我使用的是Flash Media Server,因此您会认为转码可以在飞行中完成 - 我必须对其进行调查。 – 2013-04-10 10:24:34
我也在想也许我可以发布在多比特率或类似的东西。你有什么经验吗? – 2013-04-10 10:25:24
我想我已经找到了一条走向终点的好路子。我应该可以抓取Feed并使用服务器端动作重新发布为另一个流。我可以处理一个onPublish事件。 http://help.adobe.com/en_US/adobemediaserver/devguide/WS5b3ccc516d4fbf351e63e3d11a0773d56e-7ffbDev.2.3.html – 2013-04-10 12:42:42