小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

windows下ffmpeg音視頻采集并推流【較亂,懶的整理了】

 昵稱597197 2016-01-21

1. windows下ffmpeg的編譯:

        可參考:在windows下編譯ffmpeg的詳細(xì)說(shuō)明

        如:./configure --disable-yasm --enable-static --enable-indev=dshow

如果裝了yasm,x264,就:./configure --enable-static --enable-indev=dshow --enable-gpl --enable-libx264

2. windows下用ffmpeg采集視頻:

        可參考:ffmpeg在windows下捕獲攝像頭視頻

        命令如:ffmpeg.exe -r 5 -f vfwcap -i
0 -s 176x144 
-f rawvideo -pix_fmt yuv420p
ss.yuv

3. 如果要想深入下ffmpeg中vfwcap:

        可參考:ffmpeg源碼分析之vfwcap

4.記錄一下遇到的問(wèn)題

        Aconnect設(shè)備失敗

        Win7系統(tǒng)下使用capDriverConnect()連接失敗的解決辦法

5. 前面提到的是VFW(video for windows)設(shè)備,現(xiàn)在攝像頭都會(huì)支持vfw/wdm,但各系統(tǒng)并非有對(duì)應(yīng)驅(qū)動(dòng)程序。

        【電腦插上USB攝像頭時(shí),會(huì)為其安裝通用驅(qū)動(dòng),測(cè)試其是VFW還是WDM,在設(shè)備管理查看驅(qū)動(dòng)程序詳細(xì)信息應(yīng)該能辨別,或者直接上程序,編譯測(cè)試?!?/p>

        【根據(jù)使用的驅(qū)動(dòng)程序的不同來(lái)分類,目前市場(chǎng)上大致有兩種捕捉卡:VFW (Video for Windows)卡和WDM (Windows Driver Model)卡。VFW是DirectShow的前身,攝像頭驅(qū)動(dòng)未必支持。新的程序應(yīng)該使用DirectShow。參考DirectShow
SDK中的amcap示例?!?/p>

        【視頻捕捉卡的接口,可以是以PCI或AGP的方式插入PC機(jī)箱,也可以直接以USB接口的方式外掛;還有就是通過(guò)1394接口與PC機(jī)相連的數(shù)碼攝像機(jī)等等。】

6.windows下用ffmpeg采集音頻:

7.windows下使用ffmpeg中的dshow

如:ffmpeg -f dshow -i video="6RoomsCam" -y out.flv //用的六間房的虛擬攝像頭

ffmpeg-f dshow -i audio="Realtek HD Audio Input" -y out.flv

上面是分開(kāi)采集的,同時(shí)采集,合并就行了,兩個(gè)輸入文件是ffmpeg -f dshow -i video="6RoomsCam" -f dshow -i audio="Realtek HD Audio Input" -y out.flv。若要查看本機(jī)有哪些設(shè)備,可以參考10.

8.null.

9.在linux下,如:

        ffmpeg  -f video4linux2 -s 320*240 -r 10 -i /dev/video0  test.asf

        ffmpeg -f oss -i /dev/dsp   /tmp/out.mpg

10. 最后可以參考這里:

        how to capture a webcam input

記錄一些命令,直接研究也可:

ffmpeg -list_devices true
-f dshow -i dummy //可查看攝像頭和聲卡設(shè)備名稱

ffmpeg -y -f vfwcap -i list
ffmpeg -y -f vfwcap -r 25 -i 0 out.mp4
ffmpeg -f video4linux2 -r 25 -s 640x480 -i /dev/video0 out.avi
ffmpeg -f v4l2 -r 25 -s 640x480 -i /dev/video0 out.avi
ffmpeg -f dshow -i video="Integrated Camera" out.mp4

ffmpeg -f dshow -s 1280x720 -r 15 -vcodec mjpeg -i video="Integrated Camera" out.avi

dshow編譯方面參考如何編譯包含dshow設(shè)備的版本【編譯遇到問(wèn)題,就自己解決吧,不是很麻煩?!?/p>

        ffplay -f dshow video="USB video capture 0"

【交代后期遇到的問(wèn)題,以及提示】

『用ffmpeg推音視頻流(音視頻皆用dshow為輸入,視頻編碼用X264,以flv格式輸出)的延遲問(wèn)題,據(jù)我所看,有兩點(diǎn)如下:』

1. 音頻采樣的帶來(lái)的延遲,這個(gè)延遲很小。它是如何影響到延遲大小的呢?這樣的:dshow中,音視頻源filter的capture pin,數(shù)據(jù)包buffer大小是可設(shè)置的,假設(shè)它默認(rèn)為1秒的數(shù)據(jù),也就是每一秒才回調(diào)并向外投遞出一包數(shù)據(jù),此時(shí)(假設(shè)視頻fps=15)編碼器得到了15幀,在format的interleave(音視頻包交錯(cuò)存放)處理里ff_interleave_packet_per_dts時(shí),就緩存了接近1秒,即造成等量延遲。

如何修改capture pin呢?參考代碼如下:

  1. dshow_cycle_formats()  
  2. {  
  3. ......  
  4.     IAMBufferNegotiation *negotiate = NULL;  
  5.     ALLOCATOR_PROPERTIES prop = {0};  
  6.     if (devtype == AudioDevice)  
  7.         if (IPin_QueryInterface(pin, &, (void **) &negotiate) != S_OK)  
  8.             return;//IID_IAMBufferNegotiation  
  9. ......  
  10.         if (devtype == AudioDevice)  
  11.         {  
  12.             {  
  13.                 prop.cbAlign = 1;  
  14.                 prop.cBuffers = 2;  
  15.                 prop.cbBuffer = ??;  
  16.             }  
  17.             if (IAMBufferNegotiation_SuggestAllocatorProperties(negotiate, &prop) != S_OK)  
  18.                 goto next;  
  19.         }  
  20. ......  
  21.     if (devtype == AudioDevice)  
  22.         IAMBufferNegotiation_Release(negotiate);  
  23. ......    
  24. }  


至于該buffer設(shè)置多大,可以結(jié)合,音頻編碼的frame_size、interleave是單幀視頻對(duì)應(yīng)多少音頻包,來(lái)考慮

2. X264編碼帶來(lái)的延遲,在配置參數(shù)的時(shí)候,先參考下這篇文章:如何計(jì)算x264編碼延遲(轉(zhuǎn)載如下)

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多