ffmpeg SDK 开发使用zz

分类: 多媒体中间件平台 |
zeranoe debug和release:
win7
难道是用mingw生成ffmpeg时有调试信息,应用程序用release编译冲突?
ffmpeg版本老旧,有这个bug?
我编译的选项不对?
测试排除了上面3个疑问.
连接器->优化->引用
在release版本下面使用"保留未引用数据(/OPT:NOREF)"选项才可以正常运行.
your-application->properties->Linker->Optimization->References and select OPT/NOREF.
https://ffmpeg.org/pipermail/libav-user/2013-March/003972.html
资源收集:
https://ffmpeg.org/documentation.html
在ffmpeg中调用opencv:
利用ffmpeg和opencv进行视频的解码播放
在opencv中调用ffmpeg是比较容易的,可以参考opencv的文档。
http://m.blog.csdn.net/article/details?id=51014307
其实shared和dev库都是需要的,shared中的DLL是在程序运行的时候需要,
把dev版本与share版本都下下来解压,dev版本文件夹中的Include和lib目录整个儿复制到VS项目目录下。 接着将share版本文件夹中bin目录下对应的所有dll复制到项目路径下
这两天研究了FFmpeg发送流媒体的命令,在此简单记录一下以作备忘。
http://blog.csdn.net/leixiaohua1020/article/details/38283297
windows 下FFMPEG的编译方法 附2012-9-19发布的FFMPEG编译好的SDK下载:http://blog.csdn.net/harvic880925/article/details/8024445
ffmpeg开发--ffmpeg sdk下载
http://www.cnblogs.com/js2854/archive/2013/05/16/ffmpeg-sdk.html
注意到不同的FFMPEG的版本中API的名称已经有些变化了:
ffmpeg2.4.2默认是不支持av_close_input_file函数的了,换成了avformat_close_input函数
avcodec_alloc_frame -> av_frame_alloc
av_close_input_file -> avformat_close_input
PIX_FMT_RGB24 -> AV_PIX_FMT_RGB24
av_find_stream_info -> avformat_find_stream_info
有很多函数已经不建议使用了deprecated。但是如果你不想改可以暂时使用下面的方法:
可以在c/c++->advanced then Disable specific warnings, add 4996 , if you want to add more simply just do 4996;0001;0002 etc.
FFMPEG SDK 可以自己源代码编译,也可以直接使用编译好的:
FFMPEG官网
API地址
由于在windows下编译非常痛苦,所以还是推荐大家去直接下载编译好的二进制文件,注意官网上并没有直接完整的开发包,你需要分别取下载Linux或者windows下的
共享库
http://ffmpeg.zeranoe.com/builds/
人家老外都这么说了
Donating shows that you
benefit from my work and are thankful for the time I spend on it.
So if you like my work and would like to see more, feel free to
donate, if you can't right now don't worry about it and just enjoy
using FFmpeg on Windows. Thank you to everyone who has donated in
the past!
ffmpeg每部分功能都采用plugin的方式,使用统一的接口调用,这样就能够非常方便的使用和扩展。
H.264的解析器(Parser)在解析数据的时候调用h264_parse(),h264_parse()调用了parse_nal_units(),parse_nal_units()则调用了一系列解析特定NALU的函数。H.264的解码器(Decoder)在解码数据的时候调用h264_decode_frame(),h264_decode_frame()调用了decode_nal_units(),decode_nal_units()也同样调用了一系列解析不同NALU的函数。
图中简单列举了几个解析特定NALU的函数:
ff_h264_decode_nal():解析NALU Header
ff_h264_decode_seq_parameter_set():解析SPS
ff_h264_decode_picture_parameter_set():解析PPS
ff_h264_decode_sei():解析SEI
bitstream filter:
http://www.ffmpeg.org/ffmpeg-bitstream-filters.html
滤镜filter的使用(crop, resize, deinterlace, drawtext, overlay, vflip, ...)
1. UDP
1.1. 发送H.264裸流至组播地址
注:组播地址指的范围是224.0.0.0—239.255.255.255
下面命令实现了发送H.264裸流“chunwan.h264”至地址udp://233.233.233.223:6666
注1:-re一定要加,代表按照帧率发送,否则ffmpeg会一股脑地按最高的效率发送数据。
注2:-vcodec copy要加,否则ffmpeg会重新编码输入的H.264裸流。
1.2. 播放承载H.264裸流的UDP
注:需要使用-f说明数据类型是H.264
播放的时候可以加一些参数,比如-max_delay,下面命令将-max_delay设置为100ms:
1.3. 发送MPEG2裸流至组播地址
下面的命令实现了读取本地摄像头的数据,编码为MPEG2,发送至地址udp://233.233.233.223:6666。
1.4. 播放MPEG2裸流
指定-vcodec为mpeg2video即可。
2. RTP
2.1. 发送H.264裸流至组播地址。
下面命令实现了发送H.264裸流“chunwan.h264”至地址rtp://233.233.233.223:6666
注1:-re一定要加,代表按照帧率发送,否则ffmpeg会一股脑地按最高的效率发送数据。
注2:-vcodec copy要加,否则ffmpeg会重新编码输入的H.264裸流。
注3:最右边的“>test.sdp”用于将ffmpeg的输出信息存储下来形成一个sdp文件。该文件用于RTP的接收。当不加“>test.sdp”的时候,ffmpeg会直接把sdp信息输出到控制台。将该信息复制出来保存成一个后缀是.sdp文本文件,也是可以用来接收该RTP流的。加上“>test.sdp”后,可以直接把这些sdp信息保存成文本。
2.2. 播放承载H.264裸流的RTP。
3. RTMP
3.1. 发送H.264裸流至RTMP服务器(FlashMedia Server,Red5等)
面命令实现了发送H.264裸流“chunwan.h264”至主机为localhost,Application为oflaDemo,Path为livestream的RTMP URL。
3.2. 播放RTMP
注:ffplay播放的RTMP URL最好使用双引号括起来,并在后面添加live=1参数,代表实时流。实际上这个参数是传给了ffmpeg的libRTMP的。
有关RTMP的处理,可以参考文章:ffmpeg处理RTMP流媒体的命令大全
4. 测延时
4.1.测延时
测延时有一种方式,即一路播放发送端视频,另一路播放流媒体接收下来的流。播放发送端的流有2种方式:FFmpeg和FFplay。
通过FFplay播放是一种众所周知的方法,例如:
即可播放本地名称为“Integrated Camera”的摄像头。
此外通过FFmpeg也可以进行播放,通过指定参数“-f sdl”即可。例如:
就可以一边通过SDL播放视频,一边发送视频流至RTMP服务器。
注1:sdl后面指定的xxxx.yuv并不会输出出来。
注2:FFmpeg本身是可以指定多个输出的。本命令相当于指定了两个输出。
播放接收端的方法前文已经提及,在此不再详述。
DirectShow是微软公司提供的一套在Windows平台上进行流媒体处理的开发包,与DirectX开发包一起发布。那么,DirectShow能够做些什么呢?且看,DirectShow为多媒体流的捕捉和回放提供了强有力的支持。运用DirectShow,我们可以很方便地从支持WDM驱动模型的采集卡上捕获数据,并且进行相应的后期处理乃至存储到文件中。它广泛地支持各种媒体格式,包括Asf、Mpeg、Avi、Dv、Mp3、Wave等等,使得多媒体数据的回放变得轻而易举。另外,DirectShow还集成了DirectX其它部分(比如DirectDraw、DirectSound)的技术,直接支持DVD的播放,视频的非线性编辑,以及与数字摄像机的数据交换。更值得一提的是,DirectShow提供的是一种开放式的开发环境,我们可以根据自己的需要定制自己的组件。
应用程序与DirectShow组件以及DirectShow所支持的软硬件之间的关系如图1所示。
http://cimg.163.com/catchpic/3/36/363719C844B6C2DFFDAB6D72C021C6BE.jpgSDK |