三、FFmpeg視頻解碼(附源碼)

在視頻播放器的開發中,有兩個重要的概念——視頻Track音頻Track,即視頻流音頻流。“流”是個 抽象的詞,用來表示“一連串的通過時間來串連的數據元素”。流中的數據元素稱爲 幀(frames)。 不同的流是由不同的編碼器(codec)來編碼生成的。編解碼器定義 了流中的數據是如何被編碼COded和解碼DECoded的,因此它的名字叫做CODEC。 常用的編解碼器有Divx和MP3等。從流中讀出來的數據叫做包(packets),包是一 段數據,它包含了一段可解碼成幀的數據,這些幀就是我們要在應用程序處理的東西 (如播放音頻幀或視頻幀等)。

每個包要麼包含了一個完整的視頻幀,要麼包含了多個音頻幀,這一點非常重要。

我們將實現這樣一個流程:

1. 從一個.mp4文件中找到視頻流並將它找開;

2. 從視頻流中讀取包到一幀中;

3. 如果未獲取到一個完整的幀,跳轉到2

4. 把當前獲取到的完整幀保存成文件

5. 跳轉到2,直到獲取到10幀數據。

 

本節用到的函數主要有

(1) av_register_all():這個函數用於註冊所有編解碼器等,在舊版本的ffmpeg裏面,要在主函數中先調用這個函數,才能使用ffmpeg的其他編解碼器等模塊功能。但是在新版本的ffmpeg中,不是不需要調用的;

(2) avformat_open_input(&pAVFormatContext, argv[1], NULL, NULL):用於打開視頻文件;第一個參數是用於存放相關的文件信息,即ffmpeg打開文件後,會把相關的文件信息(如視頻流、音頻流的下標)存放到pAVFormatContext這個變量裏面。

(3) avformat_find_stream_info(pAV

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章