方法
ffmpeg中av_open_input_file()这个函数可以直接打开rtsp流,av_write_frame()可以把数据写到文件。
如果只是采集视频流的话,关键的是两个函数,一个是avformat_open_input,通过URL打开视频流,一个是av_read_frame读取视频流每一帧。
live555提供了两个demo ,一个是openRTSP,另一个是testRTSPClient
可以看这里: http://blog.chinaunix.net/uid-15063109-id-4482932.html
保存成bmp或jpg看这个:http://blog.chinaunix.net/uid-15063109-id-4275143.html
当然ffmpeg也可以,参考ffplay代码就行了。只是ffplay延时比直接用live长一些。
FFmpeg的使用
代码来自FFmpeg 获取RTSP传过来的视频数据并保存成文件
- 缺少libavutil/avconfig.h头文件
自己写一个放在libavutil文件夹里。内容如下:
/* Generated by ffconf */
#ifndef AVUTIL_AVCONFIG_H
#define AVUTIL_AVCONFIG_H
#define AV_HAVE_BIGENDIAN 0
#define AV_HAVE_FAST_UNALIGNED 0
#endif /* AVUTIL_AVCONFIG_H */
- avstream::codec 被声明为已否决
定位错误代码:
if (pFormatCtx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO)
{
videoindex = i;
break;
}
AVStream的codec成员不再推荐使用,替换为codecpar。
从而我们知道FFmpeg中所谓的“被声明为已否决”就是因为函数或者结构体属性被标示为attribute_deprecated,很有可能在未来的版本中就删除了。
所以我们最好的解决方案就是使用新的被推荐使用的函数、结构体等。
- av_register_all 被声明为已否决
新的ffmpeg库不需要集中初始化的组建。
旧的接口:av_register_all();
去掉av_register_all()这句即可。
- 错误 LNK2019 9个无法解析的外部命令
是FFmpeg的使用方法错了,ffmpeg官网有static、dev和shared三个版本,后两个也都要下载,是项目中必不可少的库文件。
(这个问题花了3小时都没解决,博客教的属性配置方法没有错,但谁知道原来是我的ffmpeg没有下载全呢。之前看安装教程说只要下载static版本就可以了,那些写ffmpeg项目的博客里也没有说要用后两个版本的。)
- 警告 C4326 “main”的返回类型应为“int”而非“void”
我写的是 void main(){…}
改成int main(int argc, char* argv[]){…}