0

在 Flash 中,我有一个应用程序,其中多人通过 NetStreams 以不同的比特率和不同的质量设置将实时摄像机源共享到 Flash Media Server/Adobe Media Server。

我需要移动用户以与其他用户不同的质量设置接收实时提要。

我在 Adob​​e API 文档中找到了 receiveVideoFPS,但经过大量的汗水和泪水之后,它似乎不受 H.264 支持......(去图 - http://forums.adobe.com/message/3841837#3841837 #3841837 )

那么有没有其他方法可以让任何人都知道?或者我需要为此做一些定制的事情吗?有任何想法吗 ?解决方法?

当前:Flash Applicaion Publisher > 通过 NetStream 共享相机 > 发布到 FMS/AMS 目标:Flash 应用程序接收者 > 以不同的 fps 和/或分辨率订阅已发布的 NetStream

4

1 回答 1

0

我看到了两种方法来做到这一点。

如果任何流只能被 PC 或移动用户一次看到,则第一种方式是合适的。然后您必须获取输入视频分辨率,如果不合适,请通过 NetStream“发送”方法发送具有正确视频高度/宽度的消息。发布者必须接收此命令并更改其相机对象参数。

第二个更难,但它可以在任何情况下使用。您必须在服务器上转码和重新流式传输。所以每个人都会以 PC 质量流式传输,当移动用户尝试观看流式传输时,他会向媒体服务器发送重新流式传输请求,媒体服务器接收它并创建一个具有相同名称和一些后缀的新流(例如“流”->“流_移动“)。必须在该流中推送转码的视频(可以使用 FFmpeg 转码器)。完成后,您的移动设备应收听“_MOBILE”流。

一个月前我遇到了类似的问题。顺便说一句,我使用的是 Wowza 媒体服务器,而不是 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中有很多参数,比如比特率、帧率、图像质量等。

于 2013-04-10T05:51:51.040 回答