1. 程式人生 > >MPlayer上支援RTSP流媒體(live555作為流媒體播放器)

MPlayer上支援RTSP流媒體(live555作為流媒體播放器)

    條件:在中天CK810的CPU上執行linux12.04作業系統以tft傳輸方式載入uImage;

考慮到針對性,一開始mplayer的編譯選項並不是mplayer官網上下載下來的configure,很多條件都是disable的,連結檔案和連結庫也是有自己的指定位置 -Ixx -Lxx 

  (1)查詢player播放RTSP流的命令 mplayer rtsp://192.168.1.2:/video.264 板子和電腦之間使用網線進行連線;

  (2)在同一臺電腦上使用live555播放,mplayer可以接收到;但是在板子上執行之後就會出現Server returned 404:Not found;用wireshark進行抓包的時候根本就沒有相關RTP或者RTSP的資料包出現只有TCP和NFS的資料包,最後發現原因在於配置檔案時--disable-networking;

  (3)之後再次配置編譯執行的時候終端出現了Server returned 405:Method Not Allowed;跟蹤原始碼發現程式在執行過程中跳到了HTTP相關的函式中去,405程式碼時HTTP 標準的狀態碼,大概花了一天的時間和電腦上的配置檔案進行比較發現了是因為 --disable-live了;

  (4)在enable-live配置選項開啟之後,編譯就出現了錯誤:fatal error:liveMedia.hh:No Such file or directory;原來編譯的時候還要將live555的標頭檔案和庫檔案的位置寫到配置指令碼檔案build-mp4g.sh中去。

  (5)上述步驟完成之後,編譯還是有問題,連operator new()這個標準C++方法都是undefined;最後在有經驗的同事的幫助下找到了原因,Mplayer是用C語言編寫的,在Makefile檔案中無論.c檔案還是.cpp檔案最後都是通過CC也就是中天的交叉編譯器csky-abiv2-linux-gcc來實現的,同樣最後的連結也是它,所有就在Makefile中將gcc改為了g++。

  (6)終於編譯成功了,還以為一切都OK了,但是板子上出現了這樣一個錯誤:Can't loading stdc++.so.6;將交叉編譯好的標準的C++庫cp到../rootfs/usr/lib下面後,終於可以執行MPlayer,但是在程式的最後出現了:MPlayer interrupted by signal 11 in module:decode_video;最後在有經驗的同事在板子上使用gdbserver,在PC端使用gdb進行了除錯,最後將錯誤定位live555原始檔中的傳引數的時候傳了一個空指標,導致出現了段錯誤。

  (7)經過這一系列的錯誤發現和改正之後,終於在板子上MPlayer可以播放RTSP流了,前前後後差不多花了一個禮拜的時間,這一個禮拜心裡真的是很煎熬,這也算是我在士蘭實習的第一個要自己去完成的任務,也想證明一下我自己吧,結果現實還是太殘忍,真的有太多的不會,現在大四的我也發現了企業工作和大學學習有很多很多的不同,而經過這次的實踐其實大學裡學習成績好並不能證明很多東西,對於技術這種工作還是自學能力要比較強的,對於開源軟體的閱讀也是程式猿的必修課,雖然這一個禮拜我的心裡壓力很大,但是我對自己還是很有信心的,士蘭的氛圍也是蠻不錯的,我想我的選擇也是沒有錯的,我也希望能夠在這家公司呆上至少三年,慢慢成長。