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

基于FFmpeg和SDL的多路視頻播放器設計與實現

2016-06-07 02:59:11劉文華
漳州職業技術學院學報 2016年1期

劉文華

(漳州職業技術學院計算機工程系,福建漳州363000)

?

基于FFmpeg和SDL的多路視頻播放器設計與實現

劉文華

(漳州職業技術學院計算機工程系,福建漳州363000)

摘要:針對大屏彩色LED多媒體廣告設備,以及其他類似的數字標牌設備對多視頻同屏播放的需求,設計和實現了基于FFmpeg和SDL的多路視頻播放器。播放器包含了一組FFmpeg解碼器,能夠同時對多路視頻進行解碼、縮放、色彩變幻等操作,并有效地降低播放器對嵌入式系統的資源消耗。本設計采用了SDL多媒體開發包及擴展庫、FFmpeg視頻解碼等技術,因此該軟件的跨平臺可移植性和兼容性較高。

關鍵詞:FFmpeg; SDL;多路顯示; LED顯示技術

引言

隨著LED多媒體廣告的普及和發展,多媒體廣告設備的功能越來越強大,用戶對多媒體廣告設備的要求也越來越高。各種多媒體技術及其應用程序被應用到了LED多媒體廣告業務中,是否能夠播放更多的音視頻是人們衡量LED多媒體廣告設備的基本要求之一。而在很多的LED多媒體廣告業務中要求設備能夠同時播放多段音視頻流,這對廣告設備及視頻播放器應用的性能都有很高要求。本文提出了一種基于FFmpeg的多路視頻播放器的解決方案,使多媒體播放器能夠容易的同時播放多段視頻,并有效地降低播放器對嵌入式系統的資源消耗。

1 FFmpeg簡介

FFmpeg[1]是一個開源免費跨平臺的視頻和音頻流方案,屬于自由軟件,采用LGPL或GPL許可證(依據你選擇的組件);是自由軟件中最完備的—套多媒體支持庫,它幾乎實現了所有當下常見的音視頻編解碼器以及多媒體傳輸協議。因此,對于從事多媒體技術開發來說,FFmpeg是最佳選擇。相關數據結構包括AVFormatContext、AVStream、AVInputFormat、AVCodecContext、AVCodec、AVPacket、AVFrame與AVPicture等。

2 視頻播放流程

應用ffmpeg庫播放視頻流程包括打開視頻流、找到解碼器、解碼與顯示等幾個環節,如圖1[2]。

2.1打開視頻流

播放器首先注冊解碼器、初始化SDL[3]并打開視頻流文件,找出視頻流信息并初始化視頻解碼器,初始化的數據結構為VideoState *is、AVFormatContext* ic、AVStream *video_st、AVCodec* codec和AVCodecContext* c等。

2.2打開解碼器

打開視頻編解碼codec、分配輸出流緩存大小、分配每一幀圖像緩存大小。

2.3視頻解碼

播放器分別創建3個處理線程read_thread、video_thread和音頻處理線程。其中read_thread線程從原視頻文件中讀取視頻幀,并將幀放進包隊列中:

2.4視頻顯示

當視頻播放器解碼視頻第一幀的時候創建SDL視頻窗口,如下:

然后,播放器創建刷新線程refresh_thread,進入事件處理循環event_loop。refresh_thread線程按照設定的視頻同步方法發出FF_REFRESH_EVENT事件,而event_loop接收到FF_REFRESH_EVENT事件并通知video_refresh刷新視頻窗口。

刷新窗口時,先計算視頻顯示區域,并調用SDL_DisplayYUVOverlay函數刷新顯示窗口:

2.5關閉

播放器播放到文件結尾并且循環次數為1或者播放器被用戶關閉時,產生FF_QUIT_EVENT事件。事件循環event_loop接收FF_QUIT_EVENT事件后調用do_exit函數關閉read_thread、video_thread、refresh_thread等線程,釋放數據緩沖區并退出事件循環event_loop,最后調用SDL_Quit關閉SDL。

圖1 視頻播放流程

3 多路播放器設計

不同于單實例視頻播放器[4],多路播放器需要特別的設計:顯示設備支持對應多個視頻的多窗口、顯示設備支持刷新多個窗口的多線程、控制多視頻播放流程的事件循環[5]等。

3.1SDL顯示設備

在ffmpeg播放器的構造函數中,應用SDL_CreateYUVOverlay函數創建播放窗口并實例化解碼器。構造多路視頻播放器的顯示設備時,分配窗口為多個子窗口,創建解碼器實例數組并將子窗口位置傳入到各解碼器實例中。

各解碼器實例調用SDL_CreateRGBSurface構造視頻播放緩沖區,并調用SDL_CreateYUVOverlay創建與之關聯的Overlay窗口,最后使用SDL_DisplayYUVOverlay刷新視頻到緩沖區。

3.2SDL事件循環

SDL事件循環主要是循環處理視頻幀的讀取、解碼和窗口刷新流程,以及用戶的輸入事件等。不同于單實例視頻播放器準備好后直接進入其事件處理循環,多路視頻播放器構造多個解碼器實例后創建事件處理線程進入事件處理,支持多個視頻播放實例的事件處理:

3.3刷新線程

不同于單實例視頻播放器直接將視頻刷新到播放窗口,多路視頻播放器構造的多個解碼器實例將視頻刷新到視頻緩沖surface,在播放器的刷新線程MaaThread中拷貝到播放窗口顯示。

SDL_BlitSurface(mp[i].screen, NULL, window, &mp[i].ScreenRect);

4 多路播放器實現

4.1解碼器類實現

ffplay播放實例程序中包含了大量的全局變量。為了實現播放器的多實例化、函數重進入性,將這些全局變量封裝到解碼器類MaaPlay中并添加多實例化相關屬性。這些屬性包括window(播放窗口)、window_width(播放窗口寬度)、window_height(播放窗口高度)、screen(播放緩沖區)、screen_left(播放區域坐標)、screen_top(播放區域坐標)、screen_width(播放區域寬度)、screen_height(播放區域高度)、ScreenMutex(視頻緩沖區刷新互斥量)等,類的實現如程序1。

解碼器類添加構造函數MaaPlay和prepare函數。構造函數傳入視頻播放窗口、視頻播放窗口寬和高、視頻緩沖刷新互斥量等,prepare函數初始化VideoState等結構體、設置播放緩沖區寬高和位置、播放文件名等其他播放參數。prepare函數不調用event_loop進入事件處理循環。

程序1解碼器類實現

4.2播放器類實現

播放器類定義如下,主要包括解碼器實例數組、播放窗口、視頻事件處理循環線程、播放窗口刷新線程及其初始化函數OnMaaInit等,如程序2。

在播放器應用程序類成員函數OnMaaInit中,調用SDL_Init函數初始化SDL模塊、av_register_all注冊視頻解碼器、SDL_setVideoMode函數構造視頻播放窗口window并設置其寬高;然后函數構造多個解碼器實例保存在MaaPlay數組中,并調用SDL_CreateThread構造ScreenEventThread事件處理線程進入事件處理循環;最后函數調用SDL_CreateThread函數構造MaaThread播放窗口刷新線程,刷新線程按照固定時間間隔MaaInterval調用SDL_BlitSurface拷貝視頻緩沖區到播放窗口并調用SDL_Flip函數刷新播放窗口。播放器應用類的MaaThread刷新線程與各解碼器實例的refresh_thread刷新線程使用ScreenMutex保持對視頻緩沖區的互斥使用。

程序2播放器應用實現

圖2 改進的視頻播放流程

5 實驗結果

在此實驗中,播放器創建寬640高480的播放窗口,初始化兩個視頻并創建事件處理線程和窗口刷新線程,程序如下:

分別在播放窗口的(0,0)處添加一個視頻播放區,播放區域寬320,高240,播放起始時間0秒,播放時長1000秒,允許音頻輸出,循環次數為3次,播放文件coco.mp4文件;在播放窗口的(320,240)處添加一個視頻播放區,播放區域寬320,高240,播放起始時間0秒,播放時長1000秒,不允許音頻輸出,循環次數為3次,播放文件fight.mp4文件。程序運行結果如圖3。

6 結語

將開源的ffmpeg庫封裝成C++解碼器類,獨立出SDL播放窗口和事件處理循環,從而實現了ffmpeg庫的多實例化。在應用程序實現中初始化了多個解碼器實例,實現了多個視頻同窗播放。

參考文獻:

[1]郭玉霞. FFMPEG SDK結構分析[J].計算機與網絡,2013(11):48-50.

[2]解梅,張自然.SDL軟件設計技術研究[J].電子科技大學學報,2003(2):61-63.

[3] http://xcshen.blog.51cto.com/2835389/565929[EB/OL].

[4]趙宏,尹磊,曹潔,申超.多媒體終端的設計與實現[J].科學技術與工程,2010(22):5420-5425.

[5]李耀華,張貽雄,阮銘清.基于DirectFB的嵌入式播放器設計[J].單片機與嵌入式系統應用,2012(3):53-55.

(責任編輯:季平)

Design and Implementation of Multiplex Video Player Based on FFmpeg and SDL

LIU Wen-hua

(Zhangzhou Institute of Technology, Fujian Zhangzhou 363000, China)

Abstract:Aiming at the LED multimedia advertising equipment with large and full-color screen, and the other similar digital equipment which has requirements of multiplex display on a signal screen, We design and implement the multiplex video player based on SDL and FFmpeg technology. Including a set of FFmpeg decoder, the player can decode, zoom, modify colors on multiplex video at the same time. The design can effectively reduce system resources consumption which is significant for embedded system. At the other hand, this design has high cross platform portability and compatibility, because of applicationof SDL multimedia development kit and extended library, and FFmpeg video decoding technology.

Key words:FFmpeg; SDL; multiplex display; LED

中圖分類號:TP311.1

文獻標識碼:A

文章編號:1673-1417(2016)01-0001-06

doi:10.13908/j.cnki.issn1673-1417.2016.01.0001

收稿日期:2015-12-10

基金項目:省教育廳B類課題(JB12326);漳州職業技術學院科研計劃資助項目(ZZY1203)

作者簡介:劉文華(1980—) ,男,山東莒南人,講師,碩士,研究方向:嵌入式系統和應用設計。

主站蜘蛛池模板: 精品伊人久久久香线蕉| 亚洲欧美综合另类图片小说区| 很黄的网站在线观看| 国产一级无码不卡视频| 亚洲女人在线| 亚洲第一视频区| 91免费片| 久久香蕉国产线看精品| 精品無碼一區在線觀看 | 大陆国产精品视频| 亚洲黄色成人| 亚洲精品日产精品乱码不卡| 欧美亚洲国产一区| 亚洲中文在线看视频一区| 亚洲美女久久| 亚洲黄色成人| 成人va亚洲va欧美天堂| 国产亚洲精品资源在线26u| 不卡国产视频第一页| 91精品国产91久久久久久三级| 成人在线综合| 亚洲日本精品一区二区| 免费激情网站| 91小视频在线观看免费版高清 | 精品视频在线一区| 亚洲综合第一区| 国产日韩欧美在线播放| 一级成人a毛片免费播放| 国产精品九九视频| 99久久国产精品无码| 国产成人精品男人的天堂| 国产成人综合亚洲欧美在| 久久免费看片| 成·人免费午夜无码视频在线观看| 欧美19综合中文字幕| 亚洲国产一成久久精品国产成人综合| 久久综合亚洲鲁鲁九月天| 日韩精品免费一线在线观看| 国产人前露出系列视频| 久久综合九九亚洲一区 | 亚洲AⅤ永久无码精品毛片| 五月婷婷激情四射| 国产精品视频系列专区 | 日韩午夜片| 免费A∨中文乱码专区| 亚洲精品人成网线在线| 无码区日韩专区免费系列| 亚洲综合中文字幕国产精品欧美| 国产第八页| 伊人久久久久久久久久| 91最新精品视频发布页| 国产福利在线免费观看| 国产亚洲精| 亚洲第一网站男人都懂| 国模私拍一区二区| 香蕉国产精品视频| 亚洲熟女中文字幕男人总站| 三区在线视频| 在线观看国产精品日本不卡网| 国产日韩欧美黄色片免费观看| 亚洲天堂网在线观看视频| 亚洲天堂在线视频| 欧美日韩精品一区二区视频| 91色在线观看| a亚洲视频| 先锋资源久久| 国内精自线i品一区202| AV在线天堂进入| 精品免费在线视频| 欧美啪啪网| 国产a v无码专区亚洲av| 国产高清免费午夜在线视频| 欧美国产日本高清不卡| 激情六月丁香婷婷| 国产精品自在线拍国产电影| 中文字幕第1页在线播| 亚洲一区二区三区国产精华液| 九九久久99精品| 国模极品一区二区三区| 91人人妻人人做人人爽男同| 欧美成人精品在线| 精品久久久久成人码免费动漫|