999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于DirectShow RTMP協議的視頻采集傳輸系統的設計與實現

2015-02-18 03:51:59孫盼康維新
應用科技 2015年6期
關鍵詞:系統

孫盼, 康維新

哈爾濱工程大學 信息與通信工程學院,黑龍江 哈爾濱 150001

?

基于DirectShow RTMP協議的視頻采集傳輸系統的設計與實現

孫盼, 康維新

哈爾濱工程大學 信息與通信工程學院,黑龍江 哈爾濱 150001

摘要:主要研究了DirectShow的視頻采集技術,并用該技術設計了一個基于RTMP( real time messaging protocol)協議的視頻采集與傳輸系統。DirectShow負責采集實時視頻、音頻,使用H.264和faac編碼器進行音視頻編碼。通過多線程技術對采集到的視頻和音頻數據進行封裝為可被流媒體服務器識別的可播放流,通過IP網絡,以流媒體的形式傳輸給流媒體服務器Nginx,Nginx服務器通過網絡接收各個客戶端的音視頻數據流,通過一定的緩沖機制,保證媒體數據的連續性,再以RTMP流式協議直播給客戶端。系統滿足了直播對視頻高實時性和有效性的要求。

關鍵詞:DirectShow;RTMP協議;Nginx;H.264;編碼器;視頻采集

康維新(1963-),男,教授,博士生導師.

隨著網絡視頻直播技術的發展,人們對視頻直播提出了更高要求,由于多媒體網絡傳輸具有高帶寬、高實時性特點,而當前網絡帶寬不夠高,在廣域網傳播傳輸多媒體數據時還普遍存在延遲和丟包現象,因此對于視頻的壓縮和編碼[1]、傳輸信道選取、不同網絡協議之間的的選擇、組播技術、媒體流幀率控制技術已經成為了視頻直播系統中的關鍵技術,文中提出了“Internet+DirectShow+RTMP+H.264+Nginx”的方式來進行視頻傳輸系統的構建。利用了Internet的廣泛性[2]和DirectShow內在的可擴展性以及H.264[3]的高壓縮比即在低帶寬情況下高效的傳輸數據特性和RTMP協議對有網絡缺陷的補償性,使得實時多媒體信息在網絡中的傳輸更為高效。本系統為純軟件實現,對硬件要求低,具有穩定性的Nginx服務器[4]、豐富的模塊庫配置、配置靈活和低系統資源的消耗等優點降低了系統成本的同時又滿足了項目的需求。本系統可用于學校和企業的視頻會議、視頻監控,能夠滿足不同層次的實時視頻直播的要求。

1DirectShow技術和RTMP

DirectShow是Windows平臺上的流媒體體系結構,是一個開放性的應用框架。是DirectX家族一員,是基于COM(component object model)的編程接口。DirectShow在Windows平臺上數字媒體程序的開發并負責系統總體任務和底層工作大大降低了開發的難度并且有很好的兼容性能夠支持多種硬件設備在Windows平臺上的音視頻采集。典型的DirectShow系統如圖1所示。

圖1 DirectShow系統框圖

在DirectShow使用中構建Filter Graph 模型成了DirectShow視頻捕獲技術的關鍵,在Filter Graph 中包含了各個能夠處理數據模塊的Filter[5],各個Filter按照特定的順序連接為一條線就能夠完成處理數據等功能,各個過濾器Filter 通過針腳Pin[6]連接,針腳Pin通過 GetMediaType()、CheckMediaType()和SetMediaType()3種方法來協商各個Filter之間傳輸數據的多媒體類型。

RTMP是由 Adobe 公司提出的一種在Flash平臺進行實時數據傳輸的網絡協議,RTMP 協議使用的是TCP 協議作為其傳輸層的網絡協議[7]。TCP協議是一種面向連接的、可靠的、基于字節流的傳輸層通信協議, 在網絡傳輸的過程中沒有丟包的現象,從而使用戶能夠收看更加清晰流暢的視頻。 RTMP協議可以進行實時視頻流的傳輸和控制他的播放。因此本系統采用RTMP協議作為數據傳輸協。

2系統總體設計方案

本系統采用H.264編碼進行視頻流的的實時播出,主要有4大部分組成:視頻數據的捕獲、視頻編碼、視頻RTMP打包與傳輸及流媒體服務器的轉播。視頻捕獲部分負責實時捕獲視頻數據;視頻編碼部分負責將捕獲的視頻數據進行實時H.264編碼壓縮,并可以選擇保存為本地文件;視頻播出部分負責將編碼完的數據進行RTMP包封裝,然后發送到Nginx服務器,最后由Nginx服務器向申請觀看的客戶端實時轉播視頻數據。工作原理如圖2所示。

圖2 系統整體結構

3軟件模塊設計與實現

3.1DirectShow實現視頻捕獲功能

在系統中正確安裝視頻采集卡后通過GraphEdit就能夠在“VideoCaptureSources”目錄下找到各個捕捉設備的Filter,一般以CaptureFilter形式出現,1個Capture Filter至少有1個Capture Output Pin。選擇系統使用的捕捉卡后然后調用AddFilter把Capture Filter添加到Filter Graph。

本系統通過DirectShow實現視頻捕獲,具體分為以下4個步驟。

1)采集設備枚舉

在構造Video Capture Filter前,需要列舉出系統的所有采集設備,根據列舉的設備名稱創建需要的Video Capture Filter。核心代碼如下:

IID_ICreateDevEnum,(LPVOID *)&pDevEnum);

2)創建Video Capture Filter

由上一步驟得到采集設備,建立Video Capture Filter。具體代碼如下:

hr=pMoniker->BindToObject(0,0,IID_IBaseFilter,(void **)&m_pCapture);//創建采集Filter 實例[8]

3)創建視頻采集過濾器圖表[9]

使用ICaptureGraphBuilder2接口,創建視頻采集過濾器圖表,然后再將它添加到IGraphBuilder圖表管理器中。

4)將所有的的Smart Tee和Video Renderer Filter連接成完整的圖表。

利用ICaptureGraphBuilder2提供的RenderStream函數,構建Smart Tee和Video Renderer Filter[10]并將它們連接成一個完整的圖表,從而完成視頻采集的功能。核心代碼如下;

pBuild->RenderStream(&PIN_CATEGORY_PREVIEW,&MEDIATYPE_Video,pCap, NULL, NULL);

該系統的發送端實現思路如下,用USB攝像頭采集數據,用FFmpeg 支持的X264編碼對采集到的數據進行H.264編碼 ,對編碼好的數據連接到發送Filter并以RTMP協議打包,將打包好的數據發送至Nginx服務器。其中濾波圖如圖3所示。

圖3 發送端的Filter Graph

3.2視頻編碼技術

喬-彼 得· 威 特 金(Joel-Peter Witkin) 美國攝影師。他的作品常以死亡、尸體(或尸塊)為主題,以諸如侏儒、變性人以及畸形人等各式邊緣人物為拍攝對象。他創造的合成場景,常常使人聯想到某些宗教故事或經典畫作。其作品因題材的驚世駭俗,時常令公眾輿論大驚。他的藝術作品常因挑戰常規而遭受排擠。

在本系統中利用DirectX SDK 將視頻編碼模塊封裝為H.264Filter,將視頻傳輸模塊封裝為H.264SenderFilter。利用開源的X264編碼器進行H.264的視頻編碼,使用librtmp進行對H.264數據進行RTMP協議的封裝和傳輸[11]。H.264編碼Filter重寫了函數CheckinputType(eonsteMediaType*mtln)該函數檢測Filter對輸入的媒體是否支持。DecideBuffersize()根據輸入媒體類型給出需要分配的緩沖區大小,給函數分配緩沖區。CompleteConnect(pINesDIRECTION direetion,Ipin*pReeeivepin)當輸入Pin連接成功后,會調用該函數對X264編碼器進行初始化,參數設置,編碼器打開,編碼空間分配。在本項目中使用的攝像頭采集到的視頻數據格式是RGB24,而X264支持的是標準的YUV420格式,因此編碼前要對采集模塊傳送過來的RGB格式的圖像進行格式轉換,在編碼前對RGB格式的圖像轉換為YUV420格式,然后用X264編碼進行編碼,X264編碼過程如下:

1)x264_param_default( x264_param_t *param )。對編碼器進行參數設定分配編碼器所需結構體。檢測參數有效性,初始化sps和pps,分配編碼器所需memory空間,包括參考幀和緩沖幀,初始化macroblock cache相應空間。根據cpu類型,初始化各指令集加速函數。

2)以宏塊為單位對視頻數據進行編碼,x264_macroblock_cache_load()函數將相關數據載入緩存。然后利用x264_macroblock_analyse()函數分析參數,確定最佳編碼模式。確定好編碼模式后,首先用x264_macroblock_encode()函數對宏塊進行編碼,然后用x264_encoder_encode( h, &nal, &i_nal, pic, &pic_out )對幀進行編碼。

3)i_size = x264_nal_encode( data, &i_data, 1, &nal[i] ) 網絡打包編碼i_file += p_write_nalu( hout, data, i_size ) 把網絡包寫入到輸出文件中去返回對下一幀進行編碼。視頻編碼流程如圖4所示。

圖4 視頻編碼流程

3.3發送端 RTMP 打包

將編碼好的數據通過Output pin 輸入到H.264 RTMP SenderFilter,首先要將H.264數據進行RTMP協議封包,RTMP協議封包組成與含義如表1所示。

表1 RTMP協議封包組成與含義

將封裝好的數據包利用網絡傳輸到流媒體服務器。數據包是使用librtmp庫進行傳輸的。首先初始化RTMP結構,建立和流媒體服務器的RTMP連接,并設置輸入的RTMP連接的URL,然后將封裝好的RTMPPacket 調用RTMP_SendPacket()函數,循環往流媒體服務器Nginx發送數據。這里RTMP Packet是已經封裝好的加了時間戳的H264或者AAC數據流。發送端流程如圖5所示。

3.4流媒體服務器的搭建及轉播

nginx rtmp模塊能夠支持外部程序調用。本系統使用了nginx rtmp模塊,調用FFmpeg實現了對實時視頻流h.264編碼的功能。在nginx服務器上配置rtmp模塊具體步驟為首先安裝依賴包,然后安裝git工具,最后安裝FFmpeg及其依賴包。

1)安裝和編譯nginx rtmp模塊代碼如下./configure--add-module=/path/to/nginx-rtmp-module。

2)安裝對于HLS(HTTP Live Streaming)支持模塊的配置,./configure--add-module=/path/to/nginx-rtmp-module--add-module=/path/to/nginx-rtmp-module/hls。

對于HLS支持模塊的配置利用了Apple的動態碼率自適應技術,主要用于PC和Apple終端的音視頻服務。包括一個m3u(8)的索引文件、TS媒體分片文件和key加密串文件。使用FFmpeg轉流如下

exec/opt/ffmpeg/bin/ffmpeg-irtmp://localhost/myapp/$name-c:acopy-c:vlibx264-b:v512K-g30-fflvrtmp://localhost/hls/$name_low。

將視頻流轉推到hls,hls_variant會生成一個多碼率的m3u8文件,同時把切片文件存放到test_low目錄下,在觀看視頻時,訪問http://yourip/hls/test.m3u8,本系統中使用的實際碼流的URL http://IP /hls /livestream.m3u8為其中IP為服務器Nginx的IP地址,Nginx服務器對于RTMP直播配置在配置文件nginx.conf中加入rtmp直播配置代碼如下:

rtmp {

server {

listen 1935;

chunk_size 4000;

application live {

live on;

}

}

}

配置好直播模塊以后啟動Nginx服務器就可完成流媒體服務器的搭建和轉播的配置。

4系統測試

完成jwplayer下載后,解壓到/usr/local/nginx/html/,建立測試頁面player.html,也放到上面目錄下。系統采集視頻界面如圖6所示。

圖6 視頻采集界面

其中視頻設備采用攝像頭Gsou USB2.0 Camera 幀率為25 ,可根據項目需要自己選取幀率、分辨率和波特率,本系統也可以把本地保存的視頻文件推流到Nginx服務器,可以把攝像頭采集的實時視頻保存為本地文件。rtmp://111.117.58.223/mytv/livestream 為流媒體鏈接。其中111.117.58.223為Nginx服務器的IP地址錄制實時視頻之前需要啟動Nginx服務器然后點擊開始錄制,開始錄制界面如圖7所示。

實時視頻錄制系統啟動以后,需要查看服務器和客戶端的1955端口是否打開,因為1935通信的是RTMP協議。如果的1935端口沒有打開,需要在對應的TCP端口設置項中選中全部允許就可以了。設置完畢后,點確定按鈕使設置生效。打開PC機瀏覽器輸入111.117.58.223:9091/player.html 實時視頻可以清晰流暢地觀看,如圖8。同時通過長時間的視頻系統的運行和實時視頻網頁和手機客戶端播放,可以很直觀地測試系統的準確性、穩定性和可靠性。

圖7 錄制開始界面

圖8 瀏覽器收看界面

5結束語

文中通過對實時視頻直播系統的介紹,詳細的描述了實現軟件系統的步驟和方法,主要包括DirectShow進行視頻數據的捕獲,H.264編碼器進行實時編碼,使用RTMP協議作為視頻網絡傳輸協議,配置穩定高效的Nginx作為本系統的流媒體服務器,用戶不需要使用任何客戶端僅僅在裝過Flash的瀏覽器就可以觀看視頻直播,本系統完美解決多平臺的兼容問題RTMP解決PC端,HLS解決Android、Apple終端,使用RTMP協議保證了實時視頻數據質量避免了在廣域網傳播中丟包現象,經過測試系統性能可靠穩定,很好地滿足了復雜場景和網絡帶寬低的情況下視頻直播系統的要求。

參考文獻:

[1]王洪偉. 基于DM3730和GStreamer的網絡視頻傳輸技術設計與實現[J]. 應用科技, 2014, 41(3): 19-22.

[2]SERGIO S. The embedded internet: TCP/IP basics, implementation and applications[M]. Buenos Aires: Addison Wesley Professional, 2008: 47-59.

[3]KIM W J, CHO K, CHUNG K S. Stage-based frame-partitioned parallelization of H. 264/AVC decoding[J]. IEEE Transactions on Consumer Electronics, 2010, 56(2): 3-10.

[4]林志偉. 面向移動終端的流媒體實時通信服務器關鍵技術研究[D]. 廈門: 廈門大學, 2012: 72-73.

[5]楊晨. 移動流媒體服務器設計和性能分析[D]. 武漢: 華中科技大學, 2006: 57-58.

[6] 曾華山, 宋鈺. 基于Directshow的VMR視頻捕獲的實現[J]. 電腦知識與技術, 2010, 6(25): 7110-7111.

[7]于洋. 基于DirectShow的多線程AVS轉碼器的研究與實現[D]. 哈爾濱: 哈爾濱工業大學, 2009: 53-54.

[8]章洪兵, 于永彥, 趙歡, 等. 基于DirectX的視頻采集與處理系統[J]. 電腦知識與技術, 2008, 4(5): 1204-1207.

[9]余永勝. 探究基于TCP協議的網絡應用設計與開發[J]. 電子制作, 2013, (22): 58.

[10]姜浩然, 徐林. 基于RTMP的流媒體服務器的研究[J]. 計算機與數字工程, 2011(10): 104-108.

[11]葉秀芬, LIU Peter Xiaoping, 馮偉興, 等. 用于互聯網遙操作的基于速率的點對點傳輸協議的研究[J]. 哈爾濱工程大學學報, 2003, 24(3): 273-277.

網絡出版地址:http://www.cnki.net/kcms/detail/23.1191.u.20151205.1505.002.html

Design and realizaiton of video capture and transmission system

based on DirectShow RTMP protocol

SUN Pan,KANG Weixin

College of Information and Communication Engineering, Harbin Engineering University, Harbin 150001, China

Abstract:The DirectShow video capture technology was studied, and by using this technology, a video capture and transmission system was designed based on real time messaging protocol protocol. DirectShow is responsible for capturing real-time video and audio, and H.264 and faac encoders are used to encode audio and video. By using multithreading technology, the captured videos and audios are encapsulated into streams that can be played and can be recognized by streaming media server. Through an IP network, the streams in the form of streaming media are transferred to Nginx streaming media server. Nginx server receives the audio and video data streams of each client through the network. By using a certain buffer mechanism, the continuity of media data is ensured. Then the streams are broadcasted to clients through RTMP streaming protocol in real time. The system realizes high real time and high availability required by live broadcast for video.

Keywords:DirectShow; RTMP protocol; Nginx; H.264; encoder; video capture

通信作者:孫盼,E-mail:419811304@qq.com.

作者簡介:孫盼 (1990-),男,碩士研究生;

基金項目:黑龍江省交通運輸廳資助項目(P083314005).

收稿日期:2015-04-10.網絡出版日期:2015-12-05.

中圖分類號:TP368.5

文獻標志碼:A

文章編號:1009-671X(2015)06-040-05

doi:10.11991/yykj.201504015

猜你喜歡
系統
Smartflower POP 一體式光伏系統
工業設計(2022年8期)2022-09-09 07:43:20
WJ-700無人機系統
ZC系列無人機遙感系統
北京測繪(2020年12期)2020-12-29 01:33:58
基于PowerPC+FPGA顯示系統
基于UG的發射箱自動化虛擬裝配系統開發
半沸制皂系統(下)
FAO系統特有功能分析及互聯互通探討
連通與提升系統的最后一塊拼圖 Audiolab 傲立 M-DAC mini
一德系統 德行天下
PLC在多段調速系統中的應用
主站蜘蛛池模板: 亚洲伊人电影| 国产精品专区第1页| 88国产经典欧美一区二区三区| 丰满少妇αⅴ无码区| 久久综合九色综合97网| 国产精品自在在线午夜| 97精品伊人久久大香线蕉| 国产97视频在线| 亚洲人成成无码网WWW| 亚洲视频三级| 久精品色妇丰满人妻| 国产亚洲精品97AA片在线播放| 人妻一区二区三区无码精品一区| 国产亚洲精品自在久久不卡| 欧美福利在线观看| 欧美精品色视频| 国产AV无码专区亚洲A∨毛片| 成年人国产网站| 久久91精品牛牛| 亚洲国产清纯| 国产网站在线看| 幺女国产一级毛片| 无码专区国产精品一区| 欧美色伊人| 国产一区二区三区日韩精品| 国产色偷丝袜婷婷无码麻豆制服| 永久免费无码成人网站| 99热这里只有精品国产99| 亚洲有无码中文网| 日本AⅤ精品一区二区三区日| 色综合久久久久8天国| 国产微拍精品| 国产青青草视频| 久久综合色播五月男人的天堂| 亚洲A∨无码精品午夜在线观看| 欧美成人午夜视频免看| 日韩一区精品视频一区二区| 怡红院美国分院一区二区| 国产在线小视频| 色亚洲激情综合精品无码视频| 亚洲综合中文字幕国产精品欧美| 青青草国产一区二区三区| 亚洲精品天堂自在久久77| 亚洲精品你懂的| 国产福利一区视频| 国产高清毛片| 91免费精品国偷自产在线在线| 亚洲中文字幕在线一区播放| 99视频在线免费看| 一本综合久久| 亚洲综合色在线| 免费一看一级毛片| 亚洲黄色视频在线观看一区| 国产欧美日韩一区二区视频在线| 亚洲精品黄| 毛片免费观看视频| 亚洲成人黄色在线观看| 性色一区| 亚洲国产中文精品va在线播放| 99er这里只有精品| 欧美日韩国产在线观看一区二区三区| 成年女人a毛片免费视频| 国产精品欧美激情| 国产精品成人久久| 亚洲色图在线观看| 中文字幕在线日韩91| 国产亚洲欧美日韩在线一区| 无码国内精品人妻少妇蜜桃视频| 久久香蕉国产线看观看式| 中文字幕在线播放不卡| 九九九精品成人免费视频7| 亚洲码一区二区三区| 极品性荡少妇一区二区色欲 | 国产成人区在线观看视频| 国产美女精品一区二区| 草草线在成年免费视频2| 国产迷奸在线看| 久久久无码人妻精品无码| 凹凸精品免费精品视频| 久草青青在线视频| 亚洲视频三级| 国产综合精品日本亚洲777|