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

一種快速將FLV 文件轉換為MP4文件的方法和實現

2021-07-16 06:13:24葉遠清
網絡安全技術與應用 2021年7期

◆葉遠清

(廣州市第十二人民醫院 廣東 510620)

Flash 曾經為互聯網富媒體領域的主流解決方案,但由于其安全性不斷受到詬病,且隨著HTML5、WebGL 等技術的不斷成熟,現代瀏覽器已有足夠高的性能和安全的解決方案替代Flash 技術。Adobe公司宣布于2020 年12 月31 日結束對FlashPlayer 的分發和更新,并建議用戶卸載Flash Player;主流的瀏覽器如IE/Edge/Chrome/Firefox等也于該日期后無法使用Flash 技術。而在過去的20 多年,由于Flash技術的流行,以及視頻網站的蓬勃發展,在瀏覽器的HTML 5 技術還未成熟之時,眾多的公司和視頻網站都是采用服務器后端存儲FLV視頻格式文件,前端瀏覽器使用Flash Player 播放視頻的技術架構。在Flash 技術被結束生命周期后,導致網絡上以及企業中已存的FLV格式視頻無法在瀏覽器上正常播放。通常,傳統的方案可以通過使用ffmpeg/mencode 等視頻處理工具將FLV 格式視頻轉換成MP4 文件格式,但當有大量FLV 視頻文件內容時,則需要大量的計算資源對FLV視頻格式進行重新編碼并使用MP4 文件格式重新封裝。本文通過分析FLV 視頻文件格式和MP4 視頻文件格式的特點,研究出一種給原有FLV 視頻文件添加一個合適的MP4 頭部以實現網絡播放的方案,作為傳統方案的補充方案。

1 視頻文件格式介紹

介紹本方案前,先簡單介紹FLV 視頻格式和MP4 格式的基本特點,為了方便述說本方案,以下對FLV 視頻文件格式和MP4 視頻文件格式的介紹都做了簡化,突出本方案使用到的關鍵部分,其他無關部分則弱化處理。

1.1 FLV 文件格式

FLV 視頻文件是Adobe 開發的視頻文件格式,可以在網絡上以流的形式播放。如圖1 所示,FLV 文件主要分為FLV 頭部和FLV 文件主體兩大部分。FLV頭部主要用來標識文件是否為FLV格式文件,以及是否包含視頻流、音頻流等情況。FLV 文件主體則包含了具體的視頻流和音頻流等媒體數據,這些媒體數據都封裝在Tag 中,視頻數據為Video Tag,音頻數據為Audio Tag,Video Tag 和AudioTag 以間隔方式出現,一個Video Tag 銜接一個Audio Tag[1-2]。

圖1 FLV 和MP4 的文件格式

Video Tag 中包含Tag Header、Tag Metadata 以及Video Data。Tag Header 標識本Tag 是視頻,以及該視頻數據所處的時間點等屬性;Tag Metadata 則標識本 Tag 所包含的 Video Data 的幀類型(FrameType 如是key frame 還是inter frame),視頻編碼類型(CodecID,如7 表示AVC 編碼)等解碼該視頻數據所必須的信息;Video Data 則是包含的具體視頻數據。

Audio Tag 也類似,包含Tag Header、Tag Metadata 以及 Audio Data。Tag Header 標識本Tag 是音頻,以及該音頻數據所處的時間點等屬性;Tag Metadata 則標識本Tag 所包含的Audio Data 的音頻格式(SoundFormat,如10 表示AAC 編碼)、音頻采樣率(SoundRate,如3 表示44kHZ)等;Audio Data 則是包含具體的音頻數據。

1.2 MP4 文件格式

MP4 文件格式與FLV 文件格式相差甚大,其不像FLV 文件那樣,多媒體的Metadata 分布在Video Tag 和Audio Tag 中,而Video Tag和Audio Tag 間隔分布在整個文件中。如圖1 所示,MP4 文件格式主要包含三個數據節點(通常叫box):ftype box:文件類型,描述MP4文件所遵從的規范版本;moov box:包含正確播放媒體數據所需的元數據(metadata);mdata box:存儲具體的視頻和音頻等媒體數據(有時候還會有多條字幕數據)[3-4]。

moov box 內包含關鍵的Box 為Trak Box,可以是Video 類型,包含視頻數據,可以是Audio 類型,包含音頻數據;每個Trak Box內包含stbl box(sample table box):包含媒體樣本(sample)的序號、時間、文件位置映射的信息。stbl box 包含三類關鍵的box:stsz(sample size box),記錄每個sample 的字節大小;stsc(sample to chunk box),sample-chunk 的映射表,表示一個chunk 包含了哪些sample;stco(chunk offset box),每個chunk 在mp4 文件中的偏移量,這個偏移量通常是指向mdata 區的某個位置,如圖2 所示,stco 中的偏移量索引了mdata 中的數據塊,而stsz 中的數據塊則表示了對應數據塊的長度,結合stco 和stsz 就能讀取到對應的chunk。當播放器播放視頻時,即根據stco 的chunk offset 找到對應的數據塊,根據stsz 和stsc 的信息讀取相應的媒體sample 數據,并對這些數據進行解碼播放。

圖2 MP4 頭部中stco 和mdata 的映射關系

一個MP4 文件包含若干個Trak,一個Trak 包含若干個chunk,一個chunk 包含若干個連續的sample,而sample 則是媒體數據的存儲單位,其可以是video sample,也可以是audio sample,取決于Trak是Video Trak 還Audio Trak。

2 方案設計

方案的核心理念則是針對MP4 文件格式的特點,利用其媒體數據sample 文件都存儲在mdata 段,而具體索引這些媒體sample 數據所需的地址集合、大小、chunk-sample 映射都包含在MP4 文件頭部中的stco、stsz、stcs box 中的特點,考慮到FLV 文件的文件格式是一個video sample 和一個audio sample 間隔排列的特點,我們可以生成一種符合MP4 規范,但又比較特殊的MP4 文件頭部,拼接在FLV文件的頭部,形成一個MP4 文件。

MP4 文件中的video/audio sample 對應FLV 文件中的video/audio data,都是具體為某種編碼的媒體數據。如圖3 所示,FLV 文件的一個video/audio tag 數據塊包含了tag header、metadata 以及video/audio data,由于tag data、metadata 的存在,在FLV 文件中,video/audio data是不連續的,導致生成的對應的MP4 文件頭部中的stsc box 比較特殊,其中每項表示的每一個chunk 只包含一個sample;而stsz 中的每項則表示了該sample 的大小,stco 中每項表示的偏移量則指向每一個間隔分布在FLV 文件中的video/audio data。

圖3 MP4 頭部stsz/stco 和FLV 文件的映射關系

3 方案實現

具體實現時,對于MP4 文件格式的解析代碼,可具體采用ffmpeg中對應的MP4 格式文件解封裝代碼,對于FLV 文件格式的解析代碼,亦可具體采用ffmpeg 中對應的FLV 格式文件解封代碼。通過掃描FLV 文件,記錄每個video/audio data 塊的位置和大小,按照MP4 的規范生成對應的MP4 頭部,并將該MP4 頭部拼接在FLV 文件的頭部(類似Linux 命令:cat mp4_header file.flv >>file.mp4),生成的該文件是個標準的MP4 文件,可直接使用支持MP4 格式的播放器進行播放。

對于使用網絡瀏覽器播放的情況,不需要真實地將該MP4 頭部與FLV 文件進行拼接,可通過Webserver(如nginx)在輸出文件時,先輸出已生成的MP4 頭部,再繼續輸出對應的FLV 文件的方式。從瀏覽器的角度,這就是從后端輸出的一個完整的,符合MP4 規范的視頻文件,可正常地通過video 標簽進行引用,并且能正常地拖動播放,與普通的MP4 文件并無不同[5]。

4 結論

傳統的處理方案是將FLV 文件重新編碼和封裝成MP4,因為視頻的編解碼本身就是對視頻的有損壓縮,需要大量的計算才能重新對視頻進行編解碼,對于大量的FLV 視頻文件而言,這樣的方案需要大量的計算資源,速度慢,需時長,且生成的新MP4 文件也與原FLV文件大小基本相同,導致占用的存儲空間翻倍。而本文所提供的方案則不需要對原有的FLV 視頻文件做重新編碼,而是基于FLV 以及MP4 格式的封裝特點,只需要掃描FLV 文件生成一個很小的MP4文件頭部,直接索引FLV 文件中的媒體數據即可,不會占用大量的服務器計算資源,也不會占用大量的服務器存儲空間,方便快捷。對于網絡上存在的海量FLV 視頻而言,有重大的現實意義。

主站蜘蛛池模板: 久久一本精品久久久ー99| 日韩色图区| 亚洲狼网站狼狼鲁亚洲下载| 四虎精品黑人视频| 波多野吉衣一区二区三区av| 92精品国产自产在线观看 | a级毛片网| 色老二精品视频在线观看| 国产人人干| 亚洲美女操| 高清色本在线www| 亚洲不卡影院| 久久亚洲高清国产| 亚洲aaa视频| 三上悠亚在线精品二区| 亚洲不卡无码av中文字幕| 国产无套粉嫩白浆| 久久亚洲中文字幕精品一区| 亚洲精选高清无码| 色色中文字幕| 欧美在线一二区| 91福利免费| 国产精品手机视频| 欧美国产中文| 3344在线观看无码| 在线欧美日韩国产| 亚洲人成成无码网WWW| 美女毛片在线| 欧美爱爱网| 手机在线免费毛片| 思思热精品在线8| 国产欧美在线| 久久人搡人人玩人妻精品一| 色AV色 综合网站| 国产精品视频a| 免费看久久精品99| 欧美日韩中文国产| 国产成人精品高清不卡在线| 国产综合网站| 亚洲天堂成人在线观看| 噜噜噜久久| 蜜臀AV在线播放| 国产在线拍偷自揄拍精品| 国产丰满大乳无码免费播放| 精品亚洲麻豆1区2区3区| 国禁国产you女视频网站| 午夜激情婷婷| 不卡的在线视频免费观看| 日韩麻豆小视频| 无码一区18禁| 91精品专区国产盗摄| 久久精品人妻中文视频| 国产第一页免费浮力影院| 一级毛片在线免费看| 青青热久免费精品视频6| 九九热免费在线视频| 免费激情网址| 亚洲无码电影| 亚洲色图欧美视频| 色天天综合| 久热这里只有精品6| 综合五月天网| 久久这里只有精品23| 欧美一级专区免费大片| 91青青在线视频| 不卡视频国产| 中文精品久久久久国产网址| 狠狠躁天天躁夜夜躁婷婷| 日本欧美午夜| 国产成人精品第一区二区| 欧美日韩在线亚洲国产人| 99热最新网址| 狠狠ⅴ日韩v欧美v天堂| 亚洲va欧美va国产综合下载| 福利片91| 欧洲一区二区三区无码| 国产喷水视频| 午夜精品一区二区蜜桃| 国产91av在线| 免费国产一级 片内射老| 沈阳少妇高潮在线| 欧美一区二区人人喊爽|