我看到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