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

基于多線程的視頻采集系統

2017-03-13 05:37:45重慶郵電大學光電工程學院鄧宇靜
電子世界 2017年4期
關鍵詞:利用系統

重慶郵電大學光電工程學院 徐 賀 鄧宇靜

基于多線程的視頻采集系統

重慶郵電大學光電工程學院 徐 賀 鄧宇靜

使用windows的多線程技術設計和實現了的視頻采集系統,為了保證數據的實時性和完整性,在程序中加入了對數據的隊列操作。實驗證明該系統具有良好的靈活性、擴展性。

多線程;視頻采集;視頻編碼

1 引言

在實時視頻數據采集過程中,常常會有“響應慢、卡頓”等問題,影響用戶體驗及感受。“響應慢” 往往是因為系統中部分經常執行的業務如圖像格式轉換、視頻編碼占用了大量的硬件資源。為此本文采用基于多線程和隊列的技術,從軟件角度進行了優化,縮小了響應延遲,提高了用戶體驗。

2 基于多線程視頻采集框架分析

在Windows操作系統下,每個線程被分配了不同的時間片,在某個時刻,CPU僅執行一個時間片內的線程,多個時間片中的相應線程在CPU內輪流執行,由于每個時間片的時間很短,所以對用戶來說仿佛各個線程在計算機中時并行處理的一樣[1]。為此,我們不采用阻塞式同步消息處理機制,而采用異步的消息處理機制,其具體工作示意圖如下所示:

圖1 多線程下視頻采集系統示意圖

其中,視頻源包括攝像頭、Windows桌面,也可擴展為本地文件。視頻采集線程、視頻編碼線程一直在后臺運行,線程數據交互采用隊列的方式進行,為了避免多線程下數據錯誤造成程序死鎖等現象,采用關鍵代碼段進行數據保護,即使用臨界區時,各個線程共享一個對象,無論哪個線程占用臨界區對象時,都可以訪問受保護的數據。而其他線程需要等待,直到一個線程釋放了臨界區,另一個線程才可以訪問。

3 異步多線程視頻采集模塊設計與實現

3.1 異步多線程的優缺點

可以將采集、編碼以及傳輸分成多個部分,每個部分僅處理當前任務,將暫時不需要處理的數據放入隊列中,下一部分將從隊列中進行讀取數據,并不直接響應上次操作。所以可以充分的利用系統資源、有效的降低系統響應時間,提高系統的穩定性[2]。

與之對應的異步多線程在本系統也存在著些缺點,將一次任務分為多個步驟進行執行。用戶僅能從最后步驟中判斷結果是否正確。如果最后一個步驟中出現異常情況,就可能造成結果與期待結果不一致,所以采用異步多線程需要注意代碼的穩定性。

3.2 線程間隊列技術

隊列是一種先入先出的線性表,在使用隊列時我們需要根據音視頻數據對隊列進行格式封裝[3]。使隊列中,每個視頻幀單獨作為一個存儲塊,每個存儲塊包括數據大小、占用標志位等信息,當寫入信息時,將數據保存到指定區域,并標志位置1,當讀出消息后,清空指定區域數據,標志位置0。等待下次使用,如果隊列大小不夠,使用遞歸的方式自動擴展隊列大小。其主要函數如下所示:(1)建立隊列 CreateQueue();(2)從隊列中寫入數據 WriteToQueue();標志位置1;(3)從隊列中讀取數據 ReadFromQueue();標志位置0。

3.3 異步多線程下的功能實現

根據異步多線程和隊列的特點。以視頻為例,本文主要利用ffmpeg開源庫進行采集視頻數據,然后利用libx264進行編碼,然后通過相關網絡協議進行網絡數據傳輸。

3.3.1 基于ffmpeg的視頻采集的實現

由于在此編碼器中,我們最終獲取到到的視頻分辨率為640*480,并且在使用libx264庫進行編碼時需要輸入的數據為YUV420格式。而通過ffmpeg進行采集生成的數據一般為YUV422格式,所以要利用ffmpeg庫函數sws_scale()進行圖像尺寸和格式變化。

在使用sws_scale()函數之前,首先要對ffmpeg進行初始化,注冊所有文件格式和編解碼器,利用avformat_open_input()打開視頻源,利用avformat_find_stream_info()查找到視頻流,利用avcodec_decode_ video2()進行視頻解碼,最后在函數sws_scale()函數中使用雙三次插值算法得到YUV420數據,并將數據寫入到隊列中。

3.3.2 基于libx264的視頻編碼的實現

再使用libx264編碼器之前,首先要設置編碼器的碼率方式及大小、編碼像素格式、利用zerolatency方式設置實時性、利用定時器設置幀率。其中碼率采用恒定平均碼率ABR的方式進行碼率控制,它是CBR和VBR的一種折中優化方案。關鍵參數如下所示:

m_param.i_fps_num = 25;

m_param.i_fps_den = 1;

m_param.rc.i_bitrate = 330;

m_param.rc.i_rc_method = X264_RC_ABR;

打開編碼器后,利用x264_encoder_encode()函數將一幀圖像編碼為h.264格式,并以結構體x264_nal_t的形式輸出即可。

4 結語

本文詳細介紹了基于多線程的音視頻采集、編碼傳輸的過程和實現方式。其中利用異步多線程有效的降低了系統響應時間,提高了視頻轉播過程中實時性的要求,同時節約了系統資源;最后利用相關網絡協議進行視頻網絡傳輸,實驗表明,本模塊可以用于構建實時采集轉播系統。

[1]常發亮,劉靜.多線程下多媒體定時器在快速數據采集中的應用[J].計算機應用,2003,23(S1):177-178.

[2]周方.基于隊列和多線程的異步消息處理[J].中國水運:理論版,2007,5(5):166-167.

[3]王孟祿,李浩,張鐳.基于多線程和隊列操作的TCM上位機系統設計[J].河南大學學報(自然版),2016,46(1):96-101.

徐賀【通訊作者】(1985—),男,黑龍江哈爾濱人,碩士,主要研究方向:流媒體及視頻編解碼。

鄧宇靜(1993—),女,重慶人,碩士,主要研究方向:流媒體及視頻編解碼。

猜你喜歡
利用系統
Smartflower POP 一體式光伏系統
工業設計(2022年8期)2022-09-09 07:43:20
利用min{a,b}的積分表示解決一類絕對值不等式
中等數學(2022年2期)2022-06-05 07:10:50
利用倒推破難點
WJ-700無人機系統
ZC系列無人機遙感系統
北京測繪(2020年12期)2020-12-29 01:33:58
利用一半進行移多補少
基于PowerPC+FPGA顯示系統
半沸制皂系統(下)
利用數的分解來思考
Roommate is necessary when far away from home
主站蜘蛛池模板: h视频在线观看网站| 人妻21p大胆| 国产黄网永久免费| 夜色爽爽影院18禁妓女影院| 精品自窥自偷在线看| 亚洲精品中文字幕无乱码| 久久无码免费束人妻| 国产凹凸一区在线观看视频| 国产亚洲欧美日韩在线一区| 亚洲精品爱草草视频在线| 米奇精品一区二区三区| 在线色国产| 国产美女精品一区二区| 亚洲精品无码日韩国产不卡| 欧美.成人.综合在线| 国产玖玖视频| 她的性爱视频| 中文字幕波多野不卡一区| 午夜久久影院| 国产亚洲精品自在久久不卡 | 久久中文无码精品| 五月综合色婷婷| 日本高清有码人妻| 国产美女91呻吟求| 欧美97色| 成人在线观看不卡| 高清国产在线| 欧美一级在线看| 狼友视频国产精品首页| 性激烈欧美三级在线播放| 国产精品亚洲а∨天堂免下载| 久草视频精品| 久久综合色视频| 狠狠综合久久| 亚洲三级视频在线观看| 污视频日本| 免费不卡在线观看av| 55夜色66夜色国产精品视频| 在线观看无码av五月花| 国产精品美乳| 亚洲av无码人妻| 亚洲第一成年网| 亚洲第一福利视频导航| 成年免费在线观看| 欧美一区二区福利视频| 毛片视频网址| 亚洲人成高清| 中文天堂在线视频| 91精品国产91欠久久久久| 精品久久高清| 亚洲国产天堂久久综合| 欧美一级高清片欧美国产欧美| 久久人搡人人玩人妻精品| 国产在线麻豆波多野结衣| 全午夜免费一级毛片| 国产成+人+综合+亚洲欧美| av天堂最新版在线| 亚洲资源站av无码网址| 国产精品美女网站| 亚洲综合片| 高清不卡毛片| 波多野结衣亚洲一区| 一级毛片在线播放| 国产微拍精品| 国产白浆一区二区三区视频在线| 国产精品女同一区三区五区| 亚洲欧美不卡| 亚洲欧美极品| 91午夜福利在线观看| 亚洲日韩国产精品综合在线观看| 午夜在线不卡| 99久久国产自偷自偷免费一区| 麻豆精品在线| 区国产精品搜索视频| Jizz国产色系免费| 亚洲中文精品人人永久免费| 精品中文字幕一区在线| 91探花国产综合在线精品| 国模私拍一区二区| 爱做久久久久久| 99热这里只有精品国产99| 少妇人妻无码首页|