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
主站蜘蛛池模板: 亚洲日韩在线满18点击进入| 美女毛片在线| 日日拍夜夜嗷嗷叫国产| 免费a在线观看播放| 色妞永久免费视频| 国产视频一区二区在线观看| 亚洲精品片911| 99精品视频九九精品| 久久婷婷色综合老司机| 欧美激情视频二区三区| 亚洲综合极品香蕉久久网| 国产情侣一区| 福利一区在线| 欧美一级爱操视频| 一级一级特黄女人精品毛片| 亚洲综合一区国产精品| 国产成人精品亚洲日本对白优播| 国产色爱av资源综合区| 欧美亚洲国产日韩电影在线| 亚洲精品自拍区在线观看| 夜精品a一区二区三区| 99久久婷婷国产综合精| 欧美成人日韩| 狼友视频国产精品首页| 国产夜色视频| 一级毛片不卡片免费观看| 91麻豆久久久| 亚洲精品免费网站| 久久精品一卡日本电影| 欧美日韩国产成人高清视频| 欧洲熟妇精品视频| 亚洲精选高清无码| 国产区91| 国产精品免费福利久久播放| 黄色在线网| 久久国产拍爱| 99久久精品国产麻豆婷婷| 国产白浆在线| 亚洲精品福利网站| 国产AV毛片| 高清无码手机在线观看| 免费中文字幕在在线不卡| 国产一级毛片在线| 又粗又硬又大又爽免费视频播放| 手机在线国产精品| 欧美综合一区二区三区| 尤物成AV人片在线观看| 久久性妇女精品免费| 亚洲日韩国产精品无码专区| 国产欧美日韩专区发布| 在线精品亚洲国产| 国产美女91呻吟求| 国产精品天干天干在线观看| av一区二区三区高清久久| 亚洲天堂免费| 国产欧美网站| 久久公开视频| 国产黑丝视频在线观看| 国产精品女熟高潮视频| 国产高清自拍视频| 免费jizz在线播放| 新SSS无码手机在线观看| 熟妇丰满人妻| 天天躁日日躁狠狠躁中文字幕| 激情综合网激情综合| 亚洲综合片| 伊人精品视频免费在线| 亚洲第一黄片大全| 欧美怡红院视频一区二区三区| 99久久国产自偷自偷免费一区| 免费人成网站在线观看欧美| 国内精品视频区在线2021| 91色国产在线| 四虎永久在线| 国产区91| 毛片基地美国正在播放亚洲 | 日韩人妻无码制服丝袜视频| 青青久久91| 夜夜高潮夜夜爽国产伦精品| 国产成人精品高清在线| 亚洲无码精彩视频在线观看| 亚洲男人在线天堂|