windows下ffmpeg音视频采集并推流【较乱,懒的整理了】
来源:互联网 发布:参展数据流程图 编辑:程序博客网 时间:2024/05/16 07:52
【大多为搜集的文章,都归类为,转载。所以没有标明,来处。】
1. windows下ffmpeg的编译:
可参考:在windows下编译ffmpeg的详细说明
如:./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
3. 如果要想深入下ffmpeg中vfwcap:
可参考:ffmpeg源码分析之vfwcap
4.记录一下遇到的问题
Aconnect设备失败
Win7系统下使用capDriverConnect()连接失败的解决办法
5. 前面提到的是VFW(video for windows)设备,现在摄像头都会支持vfw/wdm,但各系统并非有对应驱动程序。
【电脑插上USB摄像头时,会为其安装通用驱动,测试其是VFW还是WDM,在设备管理查看驱动程序详细信息应该能辨别,或者直接上程序,编译测试。】
【根据使用的驱动程序的不同来分类,目前市场上大致有两种捕捉卡:VFW (Video for Windows)卡和WDM (Windows Driver Model)卡。VFW是DirectShow的前身,摄像头驱动未必支持。新的程序应该使用DirectShow。参考DirectShow SDK中的amcap示例。】
【视频捕捉卡的接口,可以是以PCI或AGP的方式插入PC机箱,也可以直接以USB接口的方式外挂;还有就是通过1394接口与PC机相连的数码摄像机等等。】
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
上面是分开采集的,同时采集,合并就行了,两个输入文件是ffmpeg -f dshow -i video="6RoomsCam" -f dshow -i audio="Realtek HD Audio Input" -y out.flv。若要查看本机有哪些设备,可以参考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 //可查看摄像头和声卡设备名称
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.mp4ffmpeg -f dshow -s 1280x720 -r 15 -vcodec mjpeg -i video="Integrated Camera" out.avi
dshow编译方面参考:如何编译包含dshow设备的版本【编译遇到问题,就自己解决吧,不是很麻烦。】
ffplay -f dshow video="USB video capture 0"
【交代后期遇到的问题,以及提示】
『用ffmpeg推音视频流(音视频皆用dshow为输入,视频编码用X264,以flv格式输出)的延迟问题,据我所看,有两点如下:』
1. 音频采样的带来的延迟,这个延迟很小。它是如何影响到延迟大小的呢?这样的:dshow中,音视频源filter的capture pin,数据包buffer大小是可设置的,假设它默认为1秒的数据,也就是每一秒才回调并向外投递出一包数据,此时(假设视频fps=15)编码器得到了15帧,在format的interleave(音视频包交错存放)处理里ff_interleave_packet_per_dts时,就缓存了接近1秒,即造成等量延迟。
如何修改capture pin呢?参考代码如下:
dshow_cycle_formats(){......IAMBufferNegotiation *negotiate = NULL;ALLOCATOR_PROPERTIES prop = {0};if (devtype == AudioDevice)if (IPin_QueryInterface(pin, &, (void **) &negotiate) != S_OK)return;//IID_IAMBufferNegotiation......if (devtype == AudioDevice){{prop.cbAlign = 1;prop.cBuffers = 2;prop.cbBuffer = ??;}if (IAMBufferNegotiation_SuggestAllocatorProperties(negotiate, &prop) != S_OK)goto next;}......if (devtype == AudioDevice)IAMBufferNegotiation_Release(negotiate);......}
至于该buffer设置多大,可以结合,音频编码的frame_size、interleave是单帧视频对应多少音频包,来考虑
2. X264编码带来的延迟,在配置参数的时候,先参考下这篇文章:如何计算x264编码延迟(转载如下)
01
delay = 0
02
03
if
b-adapt=2 and not (nopass or pass2):
04
delay = MAX(bframes,3)*4
05
else
:
06
delay = bframes
07
08
if
mb-tree or vbv:
09
delay = MAX(delay,rc_lookahead)
10
11
if
not sliced-threads:
12
delay = delay + threads - 1
13
14
delay = delay + sync-lookahead
15
16
if
vbv and (vfr-input or abr or pass1:
17
delay = delay + 1
计算出来是x264要buffer掉的frame数。当然在这之外还要算上编码计算的时间,但是这个buffer掉的时间是不可逾越的延迟的极限了。
“B帧给客户端带来的延迟,并不能简单的说,是B帧数目的两倍关系,请画出时序图去衡量。” “编码速度带来的延迟?编码帧缓冲与策略带来延迟?网路延迟?流媒体服务器带来延迟?解码带来延迟?。。。”
『』- windows下ffmpeg音视频采集并推流【较乱,懒的整理了】
- windows下ffmpeg音视频采集并推流【较乱,懒的整理了】
- windows下ffmpeg音视频采集并推流
- windows下用ffmpeg采集摄像头的视频
- ffmpeg在windows下视频采集
- ffmpeg在windows下视频采集
- ffmpeg在windows下视频采集
- ffmpeg在windows下视频采集
- FFMPEG采集摄像头视频并切片为hls视频流
- Windows 下视频采集
- 基于FFmpeg的视频推流
- FFmpeg从视频文件中抽离视频并以udp+rtp+h264推流的命令
- 音视频采集封装到直播推流的简单原理
- windows mobile的音视频采集传输
- ffmpeg Windows下采集摄像头一帧数据,并保存为bmp图片
- ffmpeg Windows下采集摄像头一帧数据,并保存为bmp图片
- ffmpeg Windows下采集摄像头一帧数据,并保存为bmp图片
- ffmpeg Windows下采集摄像头一帧数据,并保存为bmp图片
- TCHAR 与const wchar_t *等的转换
- DB2取浮点数的小数部分
- connect
- C++中获取操作系统的名称和版本名称
- Android图片裁剪,合成(调用系统裁剪功能)
- windows下ffmpeg音视频采集并推流【较乱,懒的整理了】
- 高效代码审查10条
- Android读写文件
- 将h.264视频流封装成flv格式文件(二.开始动手)
- hibernate学习笔记6
- VC中动态申请和释放二维数组 用new delete
- JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); 报错
- 模拟网易新闻盖楼评论C#+ASP.NET+SQL
- 静思:将“找工作”的核心放一放