【正文】
NULL) {return 1。if(videoStream==1)if(pFormatCtxstreams[i]codeccodec_type==CODEC_TYPE_VIDEO) { i++)t find stream informationif(av_open_input_file(amp。[2]// Open video file}printf(Please provide a movie file\n)。if(argc 2) {uint8_tintintAVCodecContextint yheight。// Write header// Open fileint在An ffmpeg and SDL Tutorial 1中,給出了一個陽春版的解碼器,我們來仔細看看陽春后面的故事,為了方便講述,我先貼出代碼:include ffmpeg/include ffmpeg/include void SaveFrame(AVFrame *pFrame, int width, int height, int iFrame) {FFMpeg的解碼流程1. 從基礎談起先給出幾個概念,以在后面的分析中方便理解Container:在音視頻中的容器,一般指的是一種特定的文件格式,里面指明了所包含的音視頻,字幕等相關信息 Stream:這個詞有些微妙,很多地方都用到,比如TCP,SVR4系統(tǒng)等,其實在音視頻,你可以理解為單純的音頻數(shù)據(jù)或者視頻數(shù)據(jù)等 Frames:這個概念不是很好明確的表示,指的是Stream中的一個數(shù)據(jù)單元,要真正對這個概念有所理解,可能需要看一些音視頻編碼解碼的理論知識 Packet:是Stream的raw數(shù)據(jù) Codec:Coded + Decoded其實這些概念在在FFmpeg中都有很好的體現(xiàn),我們在后續(xù)分析中會慢慢看到我很懶,于是還是選擇了從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這就是解碼的全過程,一眼看去,是不是感覺不過如此:),不過,事情有深有淺,從淺到深,然后從深回到淺可能才是一個有意思的過程,我們的故事,就從這里開始,展開來講。for(y=0。 //