瑞芯微Rockchip开发者社区
直播中

他在笑

9年用户 723经验值
擅长:可编程逻辑 电源/新能源 制造/封装
私信 关注
[问答]

如何对OK3399-C平台多媒体进行测试呢

如何对OK3399-C平台多媒体进行测试呢?有哪些测试步骤?

回帖(1)

阎慧

2022-3-8 10:37:32
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

   

  

   

  查看摄像头支持的格式与分辨率:

  $ 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:


  

  
  例如,播放视频在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负载非常低。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分