基於gst launch的實時轉碼

2021-08-27 16:24:03 字數 1385 閱讀 7746

目標是實現乙個實時轉碼,可用於iptv提供節目源。

相關工作在ubuntu作業系統下進行。需要對源**進行修改的時候,直接採用apt-get source命令獲取源**,根據需要進行修改,然後安裝,這樣能最大限度的保證相容性和穩定性。

命令列示例

gstreamer是通過不同功能的element構成pipeline的方式來工作的,乙個transcoding也是通過解碼,編碼等各種element構成的pipeline來實現的。採用gstreamer的命令列工具就能實現各種複雜的轉碼功能,不過乙個複雜的應用還是要通過程式設計來實現。下面是乙個例子:

gst-launch-0.10 filesrc location=mpts.ts !

mpegtsdemux !

ffdec_mpeg2video !

ffenc_mpeg2video bitrate=3500000 !

ffmux_mpegts !

filesink location=m

輸入filesrc:檔案。

udpsrc:ip網路,可以採用ip輸出的工程用數碼電視接收機。

v4lsrc:採集卡,測試過osprey,微檢視像的採集卡

v4lsrc:dvb數字電視卡,測試過衛星電視卡。

v4lsrc:中國標準的dmb-th地面數字電視接收卡,做過測試。

v4lsrc:中國標準的abs-s,中星九號衛星電視接收卡,沒有找到過合適的硬體。

輸出filesink:檔案

udpsink:ip網路組播或者單播

rtspv

解復用解復用選擇ffdemux_mpeg2ts,需要考慮到時間戳的問題,見《ffdemux_mpegts中時間戳的處理問題》

解碼ffdec_mpeg2video:ffmpeg的gstreamer外掛程式,可以解碼多種格式,包括mpeg2,mpeg4,264,vp6等。

mpeg2dec:用於mpeg2解碼。

對於解碼相對比較容易,要求不是很苛刻。

編碼x264enc:x264編碼,效率相當高,在4核的cpu上可以實現4路標清編碼。支援多執行緒編碼。

ffenc_mpeg2video:ffmpeg的mpeg2編碼,效率比較高,在32位的ubuntu server 10.04.1上經過驗證效率較高,乙個cpu核心接近兩個標清實時編碼,在64位的ubuntu server 10.10上則效率比較低。不支援多執行緒?

mpeg2enc:支援多執行緒,但是效率明顯不如ffenc_mpeg2video。需要明確gop的大小,並明確需要在每個gop之前加入序列頭,否則這些都沒有,影象質量不如ffmpeg的mpeg2video編碼,不支援interlaced。

因此對於264選擇x264enc,對於mpeg2應該選擇ffmpeg,但是需要增加對於多執行緒的支援,否則實時編碼的效果不理想,會經常出現馬賽克。

封裝

基於視窗的實時統計

實時資料是無邊界的,即不斷地有資料輸入,但我們的統計一般是有時間範圍的,離線統計以年月日為統計週期,最小能到小時週期,如果是分鐘甚至秒級別計算,則可認為是實時計算,我們把實時資料流按時間段分割成乙個個視窗,則可基於視窗進行資料統計。我司開源pike支援三種視窗,結合各種udaf,通過sql就能能實現...

hbase基於solr的實時索引

實時查詢方案 hbase key value store solr web前端實時查詢展示 1.hbase 提供海量資料儲存 2.solr提供索引構建與查詢 3.key value store 提供自動化索引構建 從hbase到solr 使用流程 前提 cdh5.3.2solr集群搭建好,cdh5....

基於功耗預算的實時繪製

今天給大家介紹的是一篇以畫面質量與裝置耗電量為引導的渲染技術 該 發表於2016年著名的siggraph圖形學大會。一般來說,影象渲染質量的提公升往往意味著每個畫素都要進行更多的資料計算,從而造成裝置耗電量的增加。對於對耗電量非常敏感的移動裝置來說,我們往往需要在畫面質量與裝置耗電量間進行權衡。如何...