第三季1:ORTP库的移植与局域网视频传输
以下內容源于朱有鵬課程,如有侵權,請告知刪除。
本季課程重點在于使用ORTP庫來實現局域網視頻實時傳輸。
一、ORTP的介紹
1、視頻網絡傳輸的兩種方式
(1)基于下載
- 比如http(Hyper Text Transfer Protocol 超文件傳輸協定);
- 比如ftp(File Transfer Protocol,文件傳輸協議);
- 如果網速慢就不會實時,如果網速大于播放速率則緩沖。
- 基于下載方式,能夠保證視頻質量。
(2)基于實時
- RTP、RTSP(S->steam,專門傳輸視頻流的協議?)、RTCP(是對RTP的一種補充,因為RTP只有傳輸沒有控制信息)。
- 應用于視頻監控、直播等行業。
2、ORTP的介紹
(1)RTP(Real-time Transport Protocol,實時傳輸協議)是一個網絡傳輸協議。RTP協議詳細說明了在互聯網上傳遞音頻和視頻的標準數據包格式。
(2)openRTP,即ORTP,是用C實現的一個RTP庫(其實還有C++實現的,JAVA等實現的)。這句話意思是,RTP是一種協議,而ORTP是協議的軟件實現(即寫成庫)。
(3)實質是一個視頻服務器,工作時客戶端和服務器實時傳遞視頻數據。
- VLC播放器在這里即為客戶端。
(4)一般認為RTP工作在傳輸層,但RTP其實比TCP/UDP高一個層次。
(5)RTP(及RTCP)的實現由國際標準RFC3550規定,只要符合協議誰都可以寫一個RTP的實現。
二、ORTP庫的移植
1、準備源碼
(1)下載ortp源碼:https://github.com/dmonakhov/ortp
- OPTP庫里面最關鍵的是include,src和src/test這三個文件夾,相應的數據結構和頭文件存放在include/ortp目錄下;src里面實現了一些功能函數;src/test是示例代碼。
- ORTP庫實現了RTP和RTCP協議,前者負責傳輸視頻,后者負載視頻傳輸的質量控制、同步、協調等。
(2)將下載好的ortp-master.zip文件通過共享文件夾存放到ubuntu合適的目錄,并解壓。
- zip文件使用unzip命令解壓。
- 這里解壓到的目錄是/root/hisidk/ortp-master。
2、源碼修改
(1)增加H.264格式的payload支持。
- 在src/avprofile.c中357行添加:rtp_profile_set_payload(profile,96,&payload_type_h264);
- “:set nu” 顯示行號
- “:357”表示定位到第357行
3、配置和編譯、安裝
(1)進入ortp目錄(/root/hisidk/ortp-master/)執行./autogen.sh
錯誤1:./autogen.sh: line 44: libtoolize: command not found
- 解決:sudo apt-get install libtool*
- ubuntu得能夠上網。配置方法:先橋接到無線網卡(我的個人電腦是如此),然后配置/etc/network/interfaces文件,改為dhcp的形式。
- GNU Libtool 可以容易的在不同的系統中建立動態鏈接庫。它通過一個稱為 Libtool 庫的抽象,隱藏了不同系統之間的差異,給開發人員提供了一致的的接口。
錯誤2:libtoolize: ? error: Please install GNU M4, or 'export M4=/path/to/gnu/m4'.
- 解決:sudo apt-get install m4
- M4是一個宏處理器,將輸入拷貝到輸出,同時將宏展開。宏可以是內嵌的也可以是用戶定義的。除了可以展開宏,M4還有一些內建的函數,用來引用文件,執行Unix命令,整數運算,文本操作,循環等。M4既可以作為編譯器的前端也可以單獨作為一個宏處理器。
錯誤3:Automake - aclocal: command not found?
- 解決:sudo apt-get install automake
- 主要用于創建makefile。
(2)繼續執行./configure --prefix=/tmp/ortp --host=arm-hisiv300-linux
- --host=arm-hisiv300-linux,指定了交叉編譯工具鏈,所以工具鏈一定要安裝好(安裝好并導出環境變量PATH中)。
- --prefix=/tmp/ortp表示最后安裝到/tmp/ortp此目錄下。
(3)執行“make && make install”
4、查看移植完的庫和頭文件
- 在/tmp/ortp目錄下。
?至此,移植結束。
三、RTP傳輸視頻
1、在官方SDK的sample中添加rtp傳輸代碼
(1)在venc/sample_venc.c中添加:s32ChnNum = 1;
- 本來有三路的,現在強制限制為1路。因為只是為了演示,沒必要弄那么麻煩。
(2)在common/sample_common_venc.c中改了很多內容。
忽略修改的過程,將修改后的的文件sample_common_venc.c【1111】覆蓋原目錄的文件即可。
2、重新編譯sample
(1)復制ortp頭文件
(2)修改venc中Makefile,以便添加libortp的鏈接支持
原來的:
改后的:
(3)執行make,得到sample_venc可執行文件。
3、開發板中部署并運行測試
(1)部署(即拷貝)libortp.so到開發板中/usr/lib目錄下(通過nfs掛載方式)。
(2)檢查開發板中原有配置是否正確,譬如sensor是否對應實際。
(3)通過nfs掛載方式,在板載系統中運行/mnt/./sample_venc 0
(4)vlc中打開(媒體—》打開文件—》選擇sdp文件)配置好的sdp文件【提取碼ms4a】,看到實時圖像就證明整個實驗完成了。
- 注意這里window主機的有線IP設置為192.168.1.20,因為sdp文件里面要求的。當然也可以更改,但要注意相同。
//這是VLC軟件的配置文件,它告訴VLC播放器接收到的數據是怎樣的。
//這里只是一些配置項目,其實還可以有很多。
/*
m=vidio表示這是視頻信息 8080是端口 RTP/AVP表明傳輸過來的網絡協議 96表示是h264的
a=rtpmap:96 H264
a=framerate:25 這表示幀率
c=IN IP4 192.168.1.20 表示VLC所在的IP地址(window的ip地址),而非遠端的(遠端的在報文中有自己的IP地址)
*/
總結
以上是生活随笔為你收集整理的第三季1:ORTP库的移植与局域网视频传输的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 巨头不想再将“命脉”交给微信、支付宝
- 下一篇: 文言文亦能编程,该项目在GitHub摘得