ffmpeg Tutorial -2 初印象


Tutorial -2

 

初印象:所有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) {

 

小结:

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


你可能感兴趣的:(ffmpeg Tutorial -2 初印象)