【正文】
ter all formats and codecs}printf(Please provide a movie file\n)。if(argc 2) {uint8_tintint*pFrameRGB。*pFrame。*pCodec。*pCodecCtx。AVCodecContextintfclose(pFile)。 yheight。fprintf(pFile, P6\n%d %d\n255\n, width, height)。// Write headerpFile=fopen(szFilename, wb)。// Open file y。intFILE *pFile。在An ffmpeg and SDL Tutorial 1中,給出了一個(gè)陽春版的解碼器,我們來仔細(xì)看看陽春后面的故事,為了方便講述,我先貼出代碼:include ffmpeg/include ffmpeg/include void SaveFrame(AVFrame *pFrame, int width, int height, int iFrame) {FFMpeg的解碼流程(20090618 14:50:32)標(biāo)簽:雜談FFMpeg的解碼流程1. 從基礎(chǔ)談起先給出幾個(gè)概念,以在后面的分析中方便理解Container:在音視頻中的容器,一般指的是一種特定的文件格式,里面指明了所包含的音視頻,字幕等相關(guān)信息 Stream:這個(gè)詞有些微妙,很多地方都用到,比如TCP,SVR4系統(tǒng)等,其實(shí)在音視頻,你可以理解為單純的音頻數(shù)據(jù)或者視頻數(shù)據(jù)等 Frames:這個(gè)概念不是很好明確的表示,指的是Stream中的一個(gè)數(shù)據(jù)單元,要真正對(duì)這個(gè)概念有所理解,可能需要看一些音視頻編碼解碼的理論知識(shí) Packet:是Stream的raw數(shù)據(jù) Codec:Coded + Decoded其實(shí)這些概念在在FFmpeg中都有很好的體現(xiàn),我們?cè)诤罄m(xù)分析中會(huì)慢慢看到我很懶,于是還是選擇了從An ffmpeg and SDL Tutorial中的流程概述:10 OPEN video_stream FROM 20 READ packet FROM video_stream INTO frame30 IF frame NOT COMPLETE GOTO 2040 DO SOMETHING WITH frame50 GOTO 20這就是解碼的全過程,一眼看去,是不是感覺不過如此:),不過,事情有深有淺,從淺到深,然后從深回到淺可能才是一個(gè)有意思的過程,我們的故事,就從這里開始,展