999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于FFmpeg 和SDL 的視頻流播放存儲研究綜述

2019-09-06 06:44:34鄧正良
現代計算機 2019年22期
關鍵詞:結構

鄧正良

(廣東粵電陽江海上風電有限公司,陽江529500)

0 引言

在當今的互聯網時代,隨著網絡視頻的興起與流媒體通信技術的不斷提高、完善,多媒體數據傳輸成為了日常生活中不可或缺的一部分。網絡視頻傳輸依靠其快捷、即時和分享性等優勢,已經成為當今環境下的主宰,越來越多的平臺需要憑借網絡視頻傳輸實現其功能,例如視頻直播、在線觀影和周界安防監控等[1]。不同的視頻服務提供商使用不同類型的傳輸協議、媒體容器格式以及音視頻編解碼標準。傳輸方式包括HTTP、RTMP、RTSP 等多種媒體傳輸協議[2];媒體容器格式包括FLV、MP4、AVI、TS、RMVB 等;視頻編碼標準[3]包括H.264、H.265、MPEG4、MPEG2 等[4]。為了能夠支持不同的傳輸協議、媒體容器格式以及音視頻編解碼標準,市場上一般常用FFmpeg 和SDL 作為主要的工具庫實現視頻播放的功能。FFmpeg[5]作為一個開放的多媒體框架,支持多種傳輸協議、媒體容器格式以及音視頻編解碼標準,能夠通過其封裝的數據結構來存儲從多媒體數據中提取的信息,有效解決視頻數據的編解碼;SDL[6]全稱為Simple DirectMedia Layer,它作為一套開源應用工具開發庫,依靠其簡潔的接口能夠支持音視頻、事件、繪圖等功能,應用于游戲研發、多媒體影像、圖像處理等領域。基于FFmpeg 和SDL 工具庫,能夠實現高效地實現視頻流播放存儲。

1 FFmpeg解碼技術

1.1 FFmpeg數據結構

FFmpeg 結構體功能概述[7]如下:

(1)AVFormatContext:作為輸入、輸出相關信息的一個容器,封裝了格式上下文結構體,對相關視頻文件的封裝格式信息進行存儲。

(2)AVPacket:在讀媒體源文件和寫輸出文件時都需要用于存儲每一幀壓縮編碼后的視頻數據。

(3)AVFrame:存儲每一幀解碼后的采樣數據。

(4)AVStream:音視頻流與對該結構體對應。

(5)AVInputForma:封裝格式與該結構體對應。

(6)AVCodecContext:它作為編碼器關聯結構,對視音視頻編解碼相關信息進行了存儲。

(7)AVCodec:音視頻編解碼器與該結構體對應。

上述結構體[8]之間的關系如圖1 所示。

圖1 FFmpeg結構體間的關系

1.2 FFmpeg常用函數

在利用FFmpeg 進行解碼的過程中,主要會用到以下相關函數:

(1)av_register_all():全注冊函數,該函數的作用是初始化工具庫。

(2)avformat_open_input():輸入源打開函數,該函數的作用是打開輸入視頻文件。

(3)avformat_find_stream_info():流找尋函數,該函數的作用是獲取視頻信息,視頻數據包含了媒體數據中的流信息。

(4)av_find_decoder():編解碼器找尋函數,該函數的作用是查找解碼器,包含了id 和encoder 這兩個參數。

(5)avcodec_open2():解碼器打開函數,該函數的作用是打開解碼器,初始化AVCodecContext 結構。

(6)av_read_frame():幀數讀取函數,該函數的作用是將編碼數據從輸入數據中讀取出來。

(7)avcodec_decode_video2():視頻解碼函數,該函數的功能是解碼壓縮數據。解碼視頻流數據包結構體,調用上述提及的幀數讀取函數獲取流,并判斷其是否為視頻流,若為視頻流則執行解碼操作。

1.3 FFmpeg解碼模塊

FFmpeg 解碼包含了主要的三個解碼模塊[9],分別為解碼協議模塊、解碼格式模塊和解碼視頻和音頻模塊。

(1)解碼協議模塊

媒體流輸入協議數據的協議類型和狀態(例如HTTP、RTMP、RTSP 等類型的傳輸協議)均被存儲于AVIOContext、URLProtocol 和URLContext 中,但由于上述協議中存在對媒體流進行控制的信令數據,該數據會對輸入協議數據產生影響,所以要將其抹去。解碼協議模塊的功能是對輸入數據進行過濾,剔除協議信令數據,將包含協議信息的輸入數據轉換為媒體容器格式數據。

(2)解碼格式模塊

剔除協議信令數據并完成協議解碼的媒體容器格式數據包含了音視頻兩部分數據,解碼格式模塊的作用就是對媒體容器格式數據進行拆分,獨立出音頻編碼數據和視頻編碼數據這兩部分,并將解碼后的兩部分數據分別放入特定格式的文件中。

該模塊主要與AVFormatContext 和AVInputFormat結構體相關,AVFormatContext 存儲包含在媒體容器格式中的信息;AVInputFormat 存儲輸入媒體流媒體容器格式的類型。

(3)解碼音視頻模塊

經由格式解碼拆分獨立的音視頻兩部分數據,仍需要進行進一步操作才能得到未壓縮的數據。解碼視頻和音頻模塊的作用就是將視頻編碼數據和音頻編碼數據分別解碼為未經壓縮的視頻和音頻原始數據。經過解碼處理后的視頻數據被轉換為未壓縮的像素數據,而音頻數據被轉換為未壓縮的音頻采樣數據。

該模塊主要與AVStream、AVCodecContext 和AVCodec 結構體相關,AVStream 存儲了音頻和視頻流信息;AVStream 存儲了AVCodecContext,用于保存音視頻流解碼信息;AVCodecContext 存儲了AVCodec,用于保存音視頻頻解碼器信息。

2 SDL顯示技術

2.1 SDL數據結構

(1)SDL_Window:該結構表示“窗口”。

(2)SDL_Renderer:該結構表示“渲染器”。

(3)SDL_Texture:該結構表示“紋理”。

(4)SDL_Rect:該結構表示“矩形結構”。

基于SDL 數據結構,視頻顯示原理如圖2 所示。

圖2 視頻顯示原理

2.2 SDL顯示常用函數

SDL 主要通過以下八個函數實現顯示操作:

(1)SDL_Init():系統初始化函數,該函數對整個系統進行初始化操作。

(2)SDL_CreateWindow():窗口創建函數,該函數創建了窗口SDL_Window 結構體變量。它的主要作用是分別是為SDL_Window 結構體分配內存、設置窗口的寬高與坐標位置以及創建窗口。

(3)SDL_CreateRenderer():渲染器創建函數,該函數創建了渲染器結構體變量。

(4)SDL_CreateTexture():紋理創建函數,該函數創建了紋理SDL_Texture 結構體變量。它的主要作用分別是檢查輸入參數合理性、為SDL_Texture 紋理結構分配內存以及創建紋理。

(5)SDL_UpdateTexture():紋理更新函數,該函數主要提供四部分功能,分別是設置相關紋理數據、檢查輸入參數合理性、處理特殊格式以及更新紋理。

(6)SDL_RendererCopy():渲染拷貝函數,該函數的功能是把紋理數據復制給渲染器,主要完成檢查輸入參數合理性以及復制紋理給渲染對象這兩部分操作。

(7)SDL_RendererPresent():渲染顯示函數,該函數的功能是顯示已復制給渲染對象的圖像。

(8)SDL_Quit():系統退出函數,該函數的作用是退出SDL 系統,釋放相關占用資源。

3 視頻流播放存儲

基于FFmpeg 和SDL 的視頻流播放存儲的實現方式如圖3 所示[10]。

視頻流播放的實現步驟主要分為取流、解碼和顯示三部分組成。

(1)視頻流播放

①讀取視頻流地址的配置文件信息,根據配置信息從流地址中讀取實時視頻的數據。

②通過FFmpeg 初始化,獲取媒體源后,尋找視頻流的相關信息,尋找解碼器,并打開解碼器,讀取視頻幀,判斷是否獲取到數據包,存儲壓縮編碼的數據,解碼每一幀視頻數據后,再存儲每一幀解碼后的數據,回到解碼器進行下一幀的處理,直到無法獲取到數據包為止。

③通過SDL 創建窗口,渲染器和紋理,將一幀幀解碼后的視頻貼圖顯示,實現視頻的播放。

(2)視頻流存儲

視頻流存儲的實現步驟主要分為創建、取流、讀幀和存儲四部分組成。

①指定擴展名,輸入存儲文件的名稱,創建文件進行保存,若視頻文件名稱已存在,提示是否覆蓋。

②讀取視頻流地址的配置文件信息,根據配置信息從流地址中讀取實時視頻的數據。

③通過FFmpeg 初始化用于輸出結構體,為視頻流創建Stream 通道。獲取媒體源后,尋找視頻流的相關信息,尋找并打開解碼器。地址的打開方式選擇讀寫狀態,調用頭函數創建函數完成視頻文件頭的寫入。循環讀取并存儲每一幀數據,判斷是否獲取到數據包。

④通過寫視頻文件尾,關閉上下文結構體,釋放輸出結構體,完成視頻存儲。

圖3 視頻流播放存儲過程

4 結語

本文介紹了基于FFmpeg 和SDL 工具庫,實現視頻流播放的方式,闡述FFmpeg 與SDL 的常用函數及各結構體間的關系,并給出視頻流播放存儲的實現過程。在實際應用中,可以根據支持的不同種傳輸協議、媒體容器格式和音視頻編解碼標準,調整碼率、幀數,實現不同需求的實時視頻流播放存儲,提高在不同情況下的媒體流播放效果。

猜你喜歡
結構
DNA結構的發現
《形而上學》△卷的結構和位置
哲學評論(2021年2期)2021-08-22 01:53:34
論結構
中華詩詞(2019年7期)2019-11-25 01:43:04
新型平衡塊結構的應用
模具制造(2019年3期)2019-06-06 02:10:54
循環結構謹防“死循環”
論《日出》的結構
縱向結構
縱向結構
我國社會結構的重建
人間(2015年21期)2015-03-11 15:23:21
創新治理結構促進中小企業持續成長
現代企業(2015年9期)2015-02-28 18:56:50
主站蜘蛛池模板: 91视频青青草| 亚洲色无码专线精品观看| 亚洲综合亚洲国产尤物| 欧美视频在线不卡| 国产成人三级在线观看视频| 婷婷色在线视频| 国产拍揄自揄精品视频网站| 男女精品视频| 婷婷久久综合九色综合88| 久久精品娱乐亚洲领先| 潮喷在线无码白浆| 手机精品福利在线观看| 伊人无码视屏| 91丨九色丨首页在线播放| 九色在线视频导航91| 国产黑丝一区| 日韩精品一区二区三区swag| 国产精品微拍| 亚洲成aⅴ人在线观看| 成年午夜精品久久精品| 亚洲黄网在线| 国产无人区一区二区三区| 亚洲成人黄色在线观看| 99久久国产精品无码| 亚洲人成影院午夜网站| 98超碰在线观看| 91无码网站| 黄色三级网站免费| 免费国产一级 片内射老| 亚洲va视频| 色综合五月婷婷| 成人免费视频一区| 精品福利视频网| 国产素人在线| 色欲综合久久中文字幕网| 国产人人乐人人爱| 99re视频在线| 国产成人精品免费av| 免费a级毛片18以上观看精品| 国产黄色爱视频| 91在线播放免费不卡无毒| 国产精品密蕾丝视频| 久久精品国产亚洲麻豆| 欧美一级视频免费| 国产精品亚洲αv天堂无码| 久久国产精品麻豆系列| 视频在线观看一区二区| 国产乱论视频| 国产日韩欧美精品区性色| 国产一区二区三区日韩精品| 欧美区国产区| 在线观看国产精品第一区免费| 欧美日韩一区二区在线播放| 人妻丰满熟妇αv无码| 中文字幕亚洲第一| 中文字幕在线观| 一区二区午夜| 福利视频99| 在线视频精品一区| 久久中文字幕2021精品| 免费国产黄线在线观看| 亚洲欧美一区在线| 欧美激情综合| 日韩午夜伦| 久久久久久高潮白浆| 久久精品这里只有精99品| 成人国产免费| 国产精品永久在线| 国产精品hd在线播放| 丰满人妻中出白浆| 91在线丝袜| 亚洲一级毛片在线播放| 日韩欧美中文亚洲高清在线| 午夜无码一区二区三区| 亚洲a级毛片| 国产美女精品在线| AV熟女乱| 国产精品无码久久久久AV| 欧美日韩v| 久久免费视频6| 精品夜恋影院亚洲欧洲| 久久久久久久蜜桃|