色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于ARM的移動(dòng)視頻監(jiān)控終端設(shè)計(jì)與實(shí)現(xiàn)

          基于ARM的移動(dòng)視頻監(jiān)控終端設(shè)計(jì)與實(shí)現(xiàn)

          作者: 時(shí)間:2012-08-09 來源:網(wǎng)絡(luò) 收藏

          f.JPG


          FU indicator的Type字段表示RTP采用的負(fù)載結(jié)構(gòu),28,29時(shí)表示采用分片封包模式,NRI字段的值根據(jù)NALU的NRI值設(shè)置。FU header的S位置1時(shí)表示該包是NALU的起始分片,E位置1時(shí)表示該包是NALU的結(jié)束分片。
          2.1.3 RTP丟包處理
          由于網(wǎng)絡(luò)穩(wěn)定性原因,可能造成RTP丟包的情況。針對單一NALU模式和組合封包模式丟包不會(huì)影響解碼器的正常工作,會(huì)導(dǎo)致監(jiān)控畫面花屏或跳幀想象,但對于實(shí)時(shí)監(jiān)控是在可承受的范圍。對于分片封包模式丟包會(huì)造成接收端收到一個(gè)不完整的NALU,對一個(gè)不完整的NALU解碼可能造成解碼失敗,甚至系統(tǒng)崩潰。因此,對于分片封包模式的RTP包需要判斷接收的NALU是否丟包。
          傳輸分片封包模式的NALU時(shí),一個(gè)NALU分割封裝成若干個(gè)RTP包具有相同的時(shí)間戳、依次遞增的序列號。對接收的RTP包根據(jù)FU header頭信息做不同的處理:接收到起始分片(S=1),根據(jù)序列號在鏈表中添加節(jié)點(diǎn),保存視頻數(shù)據(jù)、起始分片序列號,計(jì)數(shù)器加1;接收到中間分片,在鏈表中找到時(shí)間戳相同的節(jié)點(diǎn),將此RTP包序列號與起始序列號相減,計(jì)算出視頻數(shù)據(jù)在鏈表的相對偏移,存儲視頻數(shù)據(jù)到鏈表相應(yīng)位置,計(jì)數(shù)器加1;接收到結(jié)束分片(E=1),同中間分片一樣,但還需要保存結(jié)束分片序列號。每接收一個(gè)RTP包后判斷NALU完整性,在接收到起始分片、結(jié)束分片的前提下,結(jié)束分片序列號與起始分片序列號之差是否等于計(jì)數(shù)器的值,以此判斷一個(gè)NALU是否接收完整,若接收到所有分片,置位結(jié)構(gòu)體中FrameCompelere,解碼器可根據(jù)此位判斷NALU完整性。
          2.2 H.264解碼器的實(shí)現(xiàn)
          通過網(wǎng)絡(luò)接收到H.264視頻流后,需要移植H.264的解碼庫實(shí)現(xiàn)實(shí)時(shí)解碼。在眾多解碼器中經(jīng)對比和分析,選用ffmpeg開源解碼器來實(shí)現(xiàn)。ffmpeg庫為音視頻數(shù)據(jù)分離、轉(zhuǎn)換、解碼提供了完整解決方案,其中兩個(gè)重要庫libavformat和libavcodec,分別支持各種音視頻文件格式和音視頻解碼器。
          利用ffmpeg的API函數(shù)進(jìn)行視頻流解碼,先做好解碼前的準(zhǔn)備工作。調(diào)用av_register_all()函數(shù)注冊所有的文件格式和編解碼器的庫,也可以只注冊特定的解碼器。關(guān)于解碼器的信息在AVCodecContext結(jié)構(gòu)體中,它包含解碼器所有信息,查找H.264解碼器CODEC_ID_H264,通過avcodec_open()函數(shù)打開解碼器。用avcodec_alloc_frame()函數(shù)分配一幀的存儲空間,存儲解碼后輸出的數(shù)據(jù)。
          在雙向鏈表中已經(jīng)保存了接收的視頻流,從鏈表頭讀取NALU進(jìn)行解碼,每讀取一個(gè)NALU將鏈表頭指向下一個(gè)單元,釋放已讀取NALU占有的內(nèi)存。NALU的頭信息定義了視頻流所屬類型,一般包括增強(qiáng)信息(SEI)、序列參數(shù)集(SPS)、圖像參數(shù)集(PPS)、條帶(Slice)等。先將SPS、PPS參數(shù)集通過解碼器解碼出來設(shè)置解碼圖像尺寸、片組數(shù)、參考幀數(shù)、量化和濾波參數(shù)等。依次從鏈表頭讀取NALU,調(diào)用avcodec_decode_ video()函數(shù)解碼輸出到分配的存儲空間,當(dāng)完成一幀的解碼,就需要對解碼后的圖像顯示到液晶屏。解碼輸出的圖像格式為YUV420P,可以采用ffmpeg提供的sws_seale()把圖像格式轉(zhuǎn)換為RGB格式顯示,也可以采用其他SDL之類的庫直接YUV覆蓋顯示。整個(gè)解碼流程如圖5所示。

          g.JPG

          3 結(jié)語
          系統(tǒng)采用S3C2440硬件平臺和嵌入式Linux操作系統(tǒng)相結(jié)合,設(shè)計(jì)了移動(dòng)視頻,重點(diǎn)闡述了用RTP協(xié)議在網(wǎng)絡(luò)中通過套接字傳輸視頻流,結(jié)合開源解碼庫ffmpeg實(shí)時(shí)解碼H.264視頻流的解決方案。經(jīng)測試,對于QCIF分辨率監(jiān)控畫面具有較好的實(shí)時(shí)性和可靠性。當(dāng)視頻分辨率增大時(shí),解碼器的解碼性能成為視頻的瓶頸。因此,本文的后續(xù)工作就是針對ffmpeg解碼庫在9平臺的優(yōu)化,提升解碼性能。


          上一頁 1 2 3 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉