Hobbit玩转Zynq MPSoC系列之2:TPG输入+VCU编码+rtp网络传输

  Xilinx官方提供了TPG、MIPI、SDI、HDMI和FILE等接口作为图像的输入源,在工程中例化为V4L2架构设备,供上层软件调用。TPG全称为Test Pattern Generator,为FPGA逻辑产生的一个模拟图像源,可提供一系列不同模式的模拟图像,对于初学者而言是学习V4L2架构、Gstreamer命令以及调试流程最合适的开端。VCU编码并通过rtp网络传输是很多工程应用的基本需求,本文将演示如何将TPG图像编码并通过网络传输。
Hobbit玩转Zynq MPSoC系列之2:TPG输入+VCU编码+rtp网络传输

平台、配件及软件

  1. ZCU104
  2. Vivado2019.2
  3. Petalinux2019.2
  4. micro usb数据线
  5. 网线

Vivado工程

  整个工程的block desigh如下:
Hobbit玩转Zynq MPSoC系列之2:TPG输入+VCU编码+rtp网络传输
  VCU的配置和之前一样,使能Encoder和Decoder,并按照下图进行配置。
Hobbit玩转Zynq MPSoC系列之2:TPG输入+VCU编码+rtp网络传输Hobbit玩转Zynq MPSoC系列之2:TPG输入+VCU编码+rtp网络传输
  TPG和Frame Write配置如下:
Hobbit玩转Zynq MPSoC系列之2:TPG输入+VCU编码+rtp网络传输Hobbit玩转Zynq MPSoC系列之2:TPG输入+VCU编码+rtp网络传输
  VCU的HP口选择和之前一致,也是接到HP2和HP3,TPG的Frame Write单独接到HP1口。

Petalinux工程

  按照官方ug1144的命令新建工程、配置工程、编译工程、生成BOOT.BIN。
  petalinux-create --type project --template --name <PROJECT_NAME>
  petalinux-config --get-hw-description /–get-hw-description=<PATH-TO_XSA Directory>
  xliinx工具已经为VCU、TPG生成好了完美的devicetree,不用自己去修改。
  在rootfs下打开gstreamer插件和v4l2插件。
  petalinux-build
  petalinux-package --boot --format BIN --fsbl --u-boot -o PATH-TO-OUTPUT-WITH-FILE-NAME

工程演示

  将生成的BOOT.BIN和image.ub复制到SD卡,插入SD卡,上电启动,TPG会例化为V4l2的设备挂载到/dev/video0,执行如下命令:
  设置ZCU104板子的IP为192.168.1.101
  root@blog:/mnt# ifconfig eth0 192.168.1.101
  将video0的视频编码通过rtp协议发送到网络
  root@blog:/mnt# gst-launch-1.0 v4l2src device=/dev/video0 ! “video/x-raw, width=1920, height=1080” ! omxh264enc target-bitrate=20000 ! h264parse config-interval=-1 ! mpegtsmux ! rtpmp2tpay ! udpsink host=192.168.1.99 port=9001 sync=true
  板子上打印信息如下:

root@blog:/mnt# ifconfig eth0 192.168.1.101
root@blog:/mnt# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0A:35:00:22:01
inet addr:192.168.1.101 Bcast:0.0.0.0 Mask:255.255.255.0
inet6 addr: fe80::20a:35ff:fe00:2201/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1933 errors:0 dropped:2 overruns:0 frame:0
TX packets:119657 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1088389 (1.0 MiB) TX bytes:163819758 (156.2 MiB)
Interrupt:30

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

root@blog:/mnt# gst-launch-1.0 v4l2src device=/dev/video0 ! “video/x-raw, width=1920, height=1080” ! omxh264enc target-bitrate=20000 ! h264parse config-interval=-1 ! mpegtsmux ! rtpmp2tpay ! udpsink host=192.168.1.99 port=9001 sync=true
Setting pipeline to PAUSED …
Pipeline is live and does not need PREROLL …
Setting pipeline to PLAYING …
New clock: GstSystemClock
Redistribute latency…
[ 1105.839444] xilinx-vtc a0010000.v_tc: Failed to set clk rate: 74250000, actual rate: 75000000
!! Warning : Adapting profile to support bitdepth and chroma mode
!! The specified Level is too low and will be adjusted !!

  设置PC的IP地址为192.168.1.99,然后打开vlc软件,媒体->打开网络串流->网络->rtp://@:9001->播放。最终显示效果如下:
Hobbit玩转Zynq MPSoC系列之2:TPG输入+VCU编码+rtp网络传输

工程文件

  百度网盘
  链接:https://pan.baidu.com/s/1XxCu3Lu4cOSuMMrbyoppGQ
  提取码:2ops

上一篇:HTML CSS定位属性详解 嘿嘿嘿


下一篇:MPsoc开发板增加对4ev的支持,来看看都有哪些升级?