RK3399平臺多媒體測試-RK3399 視頻編解碼及攝像頭測試

原創 作者 RK3399 2020-12-10 08:56:00 RK3399

本文硬件平臺以飛凌嵌入式OK3399-C開發板為基礎進行講解,其它RK3399產品,由于各個廠家設置不同會有所差異,請參考使用。本文詳細介紹了OK3399-C平臺平臺多媒體測試

OK3399-C平臺多媒體測試

飛凌RK3399平臺音視頻部分應用層軟件采用的是Gstreamer,支持硬件編解碼。本文所有的示例均是基于Gstreamer命令行的形式。如果您需要帶界面的播放器,您也可以使用Qt的多媒體類,同樣支持硬編解,可以參考飛凌提供的RK3399用戶手冊中Qt測試章節。

飛凌RK3399平臺內部有一個視頻處理單元VPU,支持以下格式的視頻硬編解:

視頻解碼:H264, H265, VP8, VP9,最大支持4Kx2K@60fps

視頻編碼:H264,最大支持1080p@30fps

飛凌RK3399平臺硬件編解碼參數表:

 

 

Video Decoder

Format

Profile

Resolution

Frame rate

HEVC

main/main 10

4096x2304

60 fps

H.264

HP/MP/BP

4096x2304

30 fps

VP9

Profile 0

4096x2304

30 fps

Video Encoder

H.264

HP@level4.1

1920x1080

30 fps

VP8

-

1920x1080

30 fps

飛凌RK3399平臺Video Sink說明:

Video Sink

說明

rkximagesink

基于drm效率最高,單個屏幕無法多個rkximagesink同時使用。

xvimagesink

使用XVideo extension輸出,QT多媒體部分采用的就是xvimagesink,雖效率低于rkximagesink,但兼容性好。

glimagesink

使用OpenGL顯示,效率低于xvimagesink。

ximagesink

使用XWindow輸出,效率最低,兼容性最好。

注意:開始測試前,請將用戶資料\工具目錄的多媒體素材包media.tar.bz2拷貝到/home/forlinx目錄并解壓,以方便后續的測試。

$ cd /home/forlinx

$ tar xvf media.tar.bz2

解壓完成后,將生成audio video目錄分別存放的是飛凌提供的音視頻測試素材文件。

一、 音頻和視頻播放體驗

1、使用gplay播放器

Gplay是基于Gstreamer實現的音視頻播放器,能夠自動根據硬件自動選擇合適的插件進行音視頻播放,運行也十分簡單。

$ gst-play-1.0 /home/forlinx/video/1080p_30fps_h265.mp4 --audiosink=pulsesink

2、使用gst-launch播放音視頻

gst-launch是開發者在開發階段常用的調試工具,相比Gplay而言,它更加靈活,當然使用起來也相對復雜。

$ gst-launch-1.0 filesrc location=/home/forlinx/audio/test.mp3 ! id3demux !  mpegaudioparse !

mpg123audiodec ! pulsesink

僅播放視頻:

$ gst-launch-1.0 filesrc location=/home/forlinx/video/1080p_30fps_h265.mp4 ! qtdemux ! queue !

h265parse ! mppvideodec ! xvimagesink

同時播放音頻和視頻:

$ gst-launch-1.0 filesrc location=/home/forlinx/video/1080p_30fps_h265.mp4 ! qtdemux name=dec

dec. ! queue ! h265parse ! mppvideodec ! xvimagesink dec.! queue ! decodebin ! pulsesink


二、視頻硬編碼

飛凌RK3399支持H264格式的視頻編碼,最大支持1080p30fps。

1、H264硬編碼

將YUV420P格式視頻編碼為H264格式視頻:

$ gst-launch-1.0 filesrc location=/home/forlinx/video/yuv420_p352x288.yuv ! rawvideoparse

use-sink-caps=false format=i420 width=352 height=288 ! video/x-raw,width=352,height=288 !

mpph264enc ! queue ! h264parse ! qtmux ! filesink location=yuv2h264.mp4

2、播放編碼的H264視頻:

$ gst-play-1.0 yuv2h264.mp4

可以在屏幕看到視頻播放。


三、視頻硬解碼

飛凌RK3399支持H264,H265、VP8、VP9視頻硬解碼,H265最大支持4Kx2K@60fps。

飛凌RK3399使用mppvideodec組件進行視頻硬解碼,它的輸出格式為:NV12,I420,YV12。

1、H264解碼

解碼并播放H264視頻文件:

$ gst-launch-1.0 filesrc location=/home/forlinx/video/1080p_60fps_h264.mp4 ! qtdemux ! queue !

h264parse ! mppvideodec ! xvimagesink

解碼并播放H264視頻文件(帶音頻):

$ gst-launch-1.0 filesrc location=/home/forlinx/video/1080p_60fps_h264.mp4 ! qtdemux

name=dec dec. ! queue ! h264parse ! mppvideodec ! xvimagesink dec. ! queue ! aacparse !

decodebin ! pulsesink

使用rkximagesink解碼播放4K視頻文件(帶音頻):

$ gst-launch-1.0 filesrc location=/home/forlinx/video/4K.mp4 ! qtdemux name=dec dec. ! queue ! h264parse ! mppvideodec ! queue ! rkximagesink dec. ! queue ! aacparse ! decodebin ! pulsesink

2、H265解碼

解碼并播放H265視頻文件:

$ gst-launch-1.0 filesrc location=/home/forlinx/video/1080p_30fps_h265.mp4 ! qtdemux ! queue !

h265parse ! mppvideodec ! xvimagesink 

解碼并播放H265視頻文件(帶音頻):

$ gst-launch-1.0 filesrc location=/home/forlinx/video/1080p_30fps_h265.mp4 ! qtdemux name=dec

dec. ! queue ! h265parse ! mppvideodec ! xvimagesink dec. ! queue ! decodebin ! pulsesink

3、VP8解碼

解碼并播放VP8視頻文件:

$ gst-launch-1.0 filesrc location=/home/forlinx/video/1080p_30fps_vp8.webm

typefind=true ! video/webm ! matroskademux ! queue  ! mppvideodec ! xvimagesink

解碼并播放VP8視頻文件(帶音頻):

$ gst-launch-1.0 filesrc location=/home/forlinx/video/1080p_30fps_vp8.webm

typefind=true ! video/webm ! matroskademux name=dec dec. ! queue ! mppvideodec !

xvimagesink dec. ! queue ! decodebin ! audioconvert ! audioresample ! pulsesink

4、VP9解碼

解碼并播放VP9視頻文件:

$ gst-launch-1.0 filesrc location=/home/forlinx/video/1080p_30fps_vp9.webm

typefind=true ! video/webm ! matroskademux ! queue  ! mppvideodec ! xvimagesink

解碼并播放VP9視頻文件(帶音頻):

$ gst-launch-1.0 filesrc location=/home/forlinx/video/1080p_30fps_vp9.webm

typefind=true ! video/webm ! matroskademux name=dec dec. ! queue ! mppvideodec !

xvimagesink dec. ! queue ! decodebin ! audioconvert ! audioresample ! pulsesink

四、攝像頭測試

飛凌RK3399支持OV13850 MIPI攝像頭,同時也支持UVC攝像頭。首先來測試一下UVC攝像頭,這里以羅技C270進程測試,將USB攝像頭插入開發板,將自動安裝uvc驅動。

1、UVC Camera測試

然后可以看到uvc設備節點:

$ v4l2-ctl --list-devices

uvc設備節點 

查看攝像頭支持的格式與分辨率:

$ v4l2-ctl --list-formats-ext -d /dev/video10

查看攝像頭支持的格式與分辨率

1.1、攝像頭預覽

$ gst-launch-1.0 v4l2src device=/dev/video10 io-mode=4 ! videoconvert ! 

video/x-raw,format=NV12,width=640,height=480 ! xvimagesink

可以在屏幕看到攝像頭預覽畫面。

1.2、攝像頭拍照

$ gst-launch-1.0 v4l2src device=/dev/video10 num-buffers=1 ! videoconvert ! 

video/x-raw,format=NV12,width=640,height=480 ! mppjpegenc ! filesink location=/tmp/pic.jpg

然后將pic.jpg拷貝到Windows下,打開它可以看到拍到的照片。

1.3、攝像頭預覽時視頻編碼H264

$ gst-launch-1.0 v4l2src device=/dev/video10 num-buffers=100 ! videoconvert !

video/x-raw,format=NV12,width=640,height=480 ! tee name=t ! queue ! mpph264enc ! queue !

h264parse ! qtmux ! filesink location=/tmp/uvc_h264.mp4 t. ! queue ! xvimagesink

上面這條命令會開啟攝像頭的預覽和錄像,錄像文件的編碼格式為H264.

播放編碼后的H264視頻:

$ gst-launch-1.0 filesrc location=/tmp/uvc_h264.mp4 ! qtdemux ! queue ! h264parse ! 

mppvideodec ! xvimagesink

2、OV13850測試

OV13850的測試方法與UVC Camera的測試方法基本相同。首先確認攝像頭設備節點。本節測試以RK3399開發板前置OV13850為例,測試后置時請將“video1”修改為“video6”即可。

2.1、攝像頭預覽(前置)

$ gst-launch-1.0 v4l2src device=/dev/video1 ! video/x-raw, format=NV12, width=640,

height=480, framerate=30/1 ! xvimagesink

可以在屏幕看到攝像頭預覽畫面。

2.2、攝像頭拍照(前置)

$ gst-launch-1.0 v4l2src device=/dev/video1 num-buffers=1 ! video/x-raw,format=NV12,

width=640,height=480 ! mppjpegenc ! filesink location=/tmp/pic.jpg

然后將pic.jpg拷貝到Windows下,打開它可以看到拍到的照片。

2.3、攝像頭預覽時視頻編碼H264(前置)

$ gst-launch-1.0 v4l2src device=/dev/video1 num-buffers=100 ! video/x-raw,format=NV12,

width=640,height=480 ! tee name=t ! queue ! mpph264enc ! queue !

h264parse ! qtmux ! filesink location=/tmp/13850_h264.mp4 t. ! queue ! xvimagesink

上面這條命令會開啟攝像頭的預覽和錄像,錄像文件的編碼格式為H264.

播放編碼后的H264視頻:

$ gst-launch-1.0 filesrc location=/tmp/13850_h264.mp4 ! qtdemux ! queue ! h264parse ! 

mppvideodec ! xvimagesink

3、雙路Camera測試(USB Camera+OV13850)

$ gst-launch-1.0 v4l2src device=/dev/video10 io-mode=4 ! queue ! videoconvert !

video/x-raw,format=NV12,width=640,height=480 ! queue ! xvimagesink & gst-launch-1.0 v4l2src device=/dev/video1 ! video/x-raw, format=NV12, width=640, height=480, framerate=30/1 ! xvimagesink

五、rkximagesink測試

在前面幾節的測試中,我們使用的都是xvimagesink,相對來說兼容性和性能都不錯。如果客戶想追求極致性能體驗,可以嘗試rkximagesink。rkximagesink可以做到播放4k視頻幾乎不占用CPU負載。

使用rkximagesink需要綁定屏幕,一個屏幕只能使用一個rkximagesink,且擴展顯示時無法拖動到其它屏幕顯示。

首先使用modetest查看屏幕的Connector ID:

查看屏幕的Connector ID 

例如,播放視頻在DP屏幕上:

$ gst-launch-1.0 filesrc location=/home/forlinx/video/1080p_30fps_h265.mp4 ! qtdemux ! queue !

h265parse ! mppvideodec ! rkximagesink connector-id=93

注意:使用rkximagesink如果窗體不在connector-id對應的屏幕上無法顯示時正常現象。

CPU負載 

可以看到CPU負載非常低。



原創 RK3399  2020-12-10 08:56:00


相關產品 >

  • FET3399-C核心板

    飛凌RK3399安卓高性能核心板采用 采用六核Rockchip RK3399芯片,雙Cortex-A72大核+四Cortex-A53小核結構,對整數、浮點、內存等作了大幅優化,在整體性能、功耗及核心面積三個方面提升。以下將對瑞芯微芯片RK3399參數,RK3399核心板方案及其性能做具體介紹。如您對飛凌RK3399系列核心板有興趣,歡迎咨詢了解。

    了解詳情
    FET3399-C核心板
  • OK3399-C開發板

    飛凌嵌入式RK3399安卓開發板主芯片采用高性能六核CPU Rockchip RK3399,GPU采用Mail-T860四核 GPU,RK3399作為目RK產品線中低功耗、高性能的代表,可滿足人臉識別設備、機器人、無人機、IoT物聯網領域應用。飛凌RK3399開發板在整體性能、功耗及核心面積做了大幅度優化,更加滿足工業設計需求。飛凌RK3399開發板為進一步減少用戶二次開發難度,開放了底板原理圖,并提供了RK3399用戶手冊、芯片手冊,加上優質的技術服務,讓您的方案從構思到上市時間縮短。

    了解詳情
    OK3399-C開發板

推薦閱讀 換一批 換一批