上篇文章中記錄了服務端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的路。但是在播放流的時候發現了一個問題,就是緩衝時間過長,並且不是從流的第一秒開始播放的,有直接跳幀的現象。還有再繼續開發研究。