Red5流媒體直播開發總結(續)

來源:互聯網
上載者:User

                上篇文章中記錄了服務端Playlists工程的獲得和部署,這篇文章將總結用戶端播放流媒體時的點點滴滴的總結。

======================================================================================

1. 項目的第三條要求:終端通過直播流地址,播放該直播

                 由於平台選擇Android平台。關於播放RTMP流媒體直播流有多種選擇。android開源的播放器有VLC,Vitamio。android原生播放器對rtmp的支援不給力。所以需要整合android開源播放器到工程中。或者選擇使用videoJS,JWPlayer。因為Android開發可以分為原生android開發和web類的android開發(使用PhoneGap架構),web開發不是我的強項,所以選擇使用整合android開源播放器的方法。


關於整合的方法,網上有大把的例子,這裡就不做概述,最終選擇使用vitamio作為我們的播放器。

======================================================================================

2.測試過程的一波三折

如果使用Vitamio作為自己播放流媒體的終端播放器,需要經過以下嚴格的測試環節

2.1 首先將流在VLC終端播放器上測試(vlc播放器在網上直接下載一個PC用戶端即可)

2.2 如果在VLC上可以正常播放,接著使用VPlayer(網上直接下載apk安裝在android系統的裝置上)進行測試,

2.3 以上兩個都可以正常播放的話,在使用Vitamio播放器進行播放流媒體

這些細節最好嚴格去做,因為以上的步驟時為了確認該流是否能被vitamio播放,如果一上來就直接播放一個流,出了問題的話,不知錯在何地。

    Example:

當時我的測試選擇了深圳衛視的rtmp流,先做驗證--看播放器是否對rtmp協議的流支援。

     深圳衛視rtmp流: rtmp://tsl.s1979.cutv.com:1935/cutvChannelLive/AxeFRth/live

    測試結果顯示vitamio是可以正常播放該直播流。

    

     下一步:開始拿自己的直播流進行替換測試;

    rtmp;//XXXX/webtv

     測試結果顯示:Vitamio播放是報錯,開啟rtmp流地址失敗。

     因為服務端的存取權限已經放開,所以不存在訪問的問題。所以工作進入僵持之中....

======================================================================================

3.為了第二個步驟產生的問題,查閱了大量的資料,主要是關於ffmpeg的資料

    這才有了之前關於FFmpeg的編譯和使用的部落格

   由於上面兩個流的測試結果迥然不同,得出的結果也是讓人費解,開始歸結於是否是因為streams/下的視頻的編碼格式有關係。通過使用PC下VLC播放終端的查看流媒體資訊功能(在工具菜單下)


查看的結果如下:


但是自己的流媒體上的視頻格式為:


2.


兩種 ,明顯在編碼格式上有重大的差異。

所以 目標轉為怎麼編碼出和深圳衛視一樣的視頻格式,然後進行播放,是否就能解決問題了。

答案很遺憾。即使你把視頻經過ffmpeg重新編碼後和深圳衛視直播流的編碼格式一致,還是顯示不出來,並且vlc測試的結果是只有聲音沒有畫面。(在linux上使用自己已經編譯的FFmpeg整合X264即可對H.264進行編碼。)這段鬱悶的時光參考了

雷霄驊博主的部落格,也問了很多問題。

http://blog.csdn.net/leixiaohua1020/article/details/12029543

=====================================================================================

4.有一個地址至關重要:

FFmpeg的官方編譯下載地址:Windows版本的哈,有靜態庫版本,也有動態庫版本的。已經編譯好了,很多外部庫已經整合進來。

  http://ffmpeg.zeranoe.com/builds/

我問的問題也是使用下載的windows版本的ffmpeg來做的,linux版本的太繁瑣,自己編譯的很痛苦,而且有些第三方庫你不一定整合的全,所以果斷選擇了windows版本。

   怎麼用ffplay和ffmpeg進行編碼就不贅述了,博主的問題欄回複的很清楚。在此也感謝博主的協助。

======================================================================================

5.很遺憾的是我將直播流的地址改為:”rtmp;//XXXX/webtv live=1“在vitamio中直接報錯:

底層就報avformat_open_input: Operation not permitted : -1錯誤 debug資訊: Detected librtmp style URL parameters, these aren't supported by the libavformat internal RTMP handler currently enabled. See the documentation for the correct way to pass parameters. 

根據博主的回複,我初步確定可能是因為vitamio底層的ffmpeg不包含librtmp庫。

======================================================================================

6.所以努力的方向改為替換vitamio底層ffmpeg庫,但是這種方法太不靠譜了,沒有解決問題,編譯存在很多風險,比較幸運的是:Vitamio團隊專門維護Vitamio。新版本的Vitamio外掛程式4.2.整合上這個版本。流播出來了....


很意外,也很幸運~~~

======================================================================================

7.視頻的編碼格式統一問題

通過對Red5流媒體RTMP流的測試效果得出以下結論,所有的音視頻編碼均為以下格式:



使用ffmpeg命令列進行音視頻編碼轉碼

ffmpeg -i ../gy.flv -vcodec flv1 -r 15 -s 720*576 -q:v 6 -aspect 1.7777 -acodec libmp3lame -ac 1 -ar 
11025 -ab 16K -f flv  -y ../gy_ffmpeg.flv

轉碼後部署到流媒體伺服器上面

測試。

同時可以使用ffplay命令列同步測試:

ffplay -i "rtmp://XXX/playlistTest/webtv live=1"

****注意****音訊編碼中採樣率必須是11025HZ,位率:16Kb/s。adebo的RTMP手冊中有明確要求。

這個是在一個音視頻群裡面詢問高手得知。如果用別的採樣率聽到的是噪音,雖然有畫面。

======================================================================================

8.為什麼說是DEMO層級的。

之所以說是DEMO層級是,在網上很少有關於Red5直播的例子,視頻會議或者視訊交談等例子頗多。這個只是實現了服務端和用戶端的正常互動。從整體上走通了這條RED5+Android的路。但是在播放流的時候發現了一個問題,就是緩衝時間過長,並且不是從流的第一秒開始播放的,有直接跳幀的現象。還有再繼續開發研究。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.