ffmpeg开发手记(2009-05-25更新)
来源:互联网 发布:淘宝保健品类目 编辑:程序博客网 时间:2024/05/19 18:11
ffmpeg是当前最重要的开源多媒体工程,我之前和现在做的很多项目都用到了ffmpeg。我会在本文中不断更新一些使用和移植优化ffmpeg的心得,和大家一起交流提高。为了方便查看采用Q&A的形式。
Q1:我用一个解码循环解一便视频文件后,调用av_seek_frame到开始位置用同一个循环再解一遍,可第二次的第一祯总是该视频的最后一祯,这是什么原因呢?我的调用方法
av_seek_frame(pFormatCtx, -1, pFormatCtx->start_time, 0)
后来发现
av_seek_frame(pFormatCtx, -1, 0, 0)效果一样,调用模式try了所有除了有一个没有进解码循环,其他都一样。
A: 重新解码前要flush codec
avcodec_flush_buffers(...streams[video_index]->codec)
Q2: 我调用av_seek_frame后解出的图像是花的,调用avcodec_flush_buffers后也是一样
A: 没有seek到I Frame
Q3:把ffmpeg移植到mtk平台,出现Undefined symbol Image$$ZI$$Limit (referred from sys_stackheap.o).
A: ffmpeg是跨平台的,里面用到了很多标准C函数,而MTK里面是不允许越过OS直接操作内存的,所以printf,malloc,fopen,assert,abort函数需要全部define成MTK的系统函数。 比如fopen改成FS_Open,assert改成ASSERT等。
Q4: 用libavformat demuxer出来的raw音频或raw视频用播放器怎么放不了?
A: 还需要文件开头加上几个字节 才能让播放器识别格式。比如mpeg4要加一个VOL,h.264要加起始码0001, aac要加FFF9, amrnb要加6个字节“#!AMR"
5. 如何正确使用av_seek_frame实现视频拖放
time=5;//拖放到5秒的位置
ret = av_seek_frame(FormatCtx,videoStream,(int64_t)time*(AV_TIME_BASE),AVSEEK_FLAG_BACKWARD);
注:AVSEEK_FLAG_BACKWARD的作用是seej到请求的timestamp之前最近的关键帧
- ffmpeg开发手记(2009-05-25更新)
- ffmpeg开发手记
- ffmpeg开发手记
- 开发手记SOP-------(常更新!)
- 3月25日更新手记
- SAE Django+WeChat环境开发手记--持续更新
- 开发手记
- 2009开发手记:为啥不对冰刃做攻防
- 火狐扩展(Firefox Extension)FillForm开发手记(更新中)
- CentOS6.4完全安装FFmpeg手记
- CentOS6.4完全安装FFmpeg手记
- CentOS6.4完全安装FFmpeg手记
- MySpy开发手记
- CSR蓝牙开发手记
- u-boot开发手记
- 开发手记[2007.01.13]
- 开发手记[2007.02.07]
- Oracle开发手记
- 页面对中文进行编码——escape,encodeURI,encodeURIComponent
- 为printPreviewControl添加mousewheel的处理
- 【SL】【DESIGN]Blend环绕文字
- #2003: Can't connect to MySQL server on 'localhost' (10061)
- 开源GIS
- ffmpeg开发手记(2009-05-25更新)
- 求两个时间段之间的天数
- 利用DirectoryEntry组件来查看网络
- 初学入门 PHP 和 MySQL
- Struts初学手记
- PHP访问MySql的方法
- 修炼中……
- 保护视力的小工具 更新到1.53版
- 分析JBoss Remoting