初印象:所有tutorial图像跑得最快的。如果看了后面的代码,其实就知道原因,这里buffer有了就播放,这里没有使用定时器来控制帧,更没有和音频同步。

测试用例A:微软自带野生动物.wmv

结果及简要分析:失败,原因是不支持中文名;

测试用例B:微软自带 wildlife

结果及简要分析:成功播放,在 frameFinished加上断点。结果表格如下:

Function: SDL_main(int, char * *), Thread: 0x841C 主线程, frameFinished=-858993460

Function: SDL_main(int, char * *), Thread: 0x841C 主线程, frameFinished=0

Function: SDL_main(int, char * *), Thread: 0x841C 主线程, frameFinished=280

Function: SDL_main(int, char * *), Thread: 0x841C 主线程, frameFinished=280

Function: SDL_main(int, char * *), Thread: 0x841C 主线程, frameFinished=280

Function: SDL_main(int, char * *), Thread: 0x841C 主线程, frameFinished=280

后面省略上千次

测试用例C:ffmpeg sample: CLOCKTXT_320.avi’

测试结果及分析:

  1. 格式的理解:覆盖上yv12和最终显示的yuv420
  2. 第一次完整的认识sdl显示的过程:设置surface,设置覆盖,拷贝覆盖,显示(sdl_updateRec)
  3. 第一次使用dump函数,看到结果如下:
[avi @ 003a3000] max_analyze_duration 5000000 reached at 5000000

Input #0, avi, from 'CLOCKTXT_320.avi':

Duration: 00:00:12.00, start: 0.000000, bitrate: 42 kb/s

Stream #0.0: Video: msrle, pal8, 320x320, 1 fps, 1 tbr, 1 tbn, 1 tbc

Stream #0.1: Audio: truespeech, 8000 Hz, 1 channels, s16, 8 kb/s

以上,第一次读包,直觉是读取的头部信息。

由于样本是clock,帧分别就是12个时刻对应的图像,一帧一帧的跟踪变化,对出图过程的理解有很大帮助。

当前只处理图像帧,如果要扩展声音的处理,将在以下代表位置:

while (av_read_frame(pFormatCtx, &packet) >= 0) {//有时候是声音,有时候是vedio
        if (packet.stream_index == videoStream) {

小结:

测试用例标准化了,入门建议使用简单的测试案列



欢迎投稿 职场/创业方向. 邮箱wangfzcom(AT)163.com:王夫子社区 » FFmpeg入门实践与分析 视频教程 电子书免费下载

    标签:

点评 0

评论前必须登录!

登陆 注册