Linux 开发第 30 节 DP音频播放与VCU视频解码,选自ALINX 黑金云课堂 FPGA 免费直播课。该课程由 ALINX 资深工程师团队倾力打造,从 0 到 1 系统化教学,帮助每位工程师跨过 FPGA 开发门槛。
🔍 ALINX:关注 ALINX,进入视频号即可查看完整黑金云课堂 FPGA 视频教程。配合笔记学习效果更佳。
数字音频由采样率、位深、声道数三个参数定义。
计算公式:比特率 = 采样率 × 位深 × 声道数
示例:CD 音质 = 44100 × 16 × 2 = 1,411,200 bps ≈ 1.4 Mbps
应用层 ├── ALSA lib (libasound) # 底层音频标准API ├── PulseAudio / PipeWire # 音频服务混音器 └── GStreamer / Qt Multimedia # 多媒体开发框架内核层 ├── ALSA Core (sound/core/) # ALSA音频内核核心 ├── ASoC (ALSA System on Chip) # 嵌入式片上音频框架 └── DP Audio Driver # DisplayPort音频驱动硬件层 ├── DP Controller # DisplayPort显示控制器 └── Audio Codec # 音频编解码芯片[*] packagegroup-xilinx-gstreamer[*] packagegroup-xilinx-matchbox[*] packagegroup-xilinx-multimedia[*] packagegroup-opencv[*] packagegroup-xilinx-qt[*] populate_sdk_qt5[*] packagegroup-xilinx-qt-extended[*] packagegroup-core-x11aplay -l 查看播放设备,amixer设置音量,aplay播放WAV文件。 GStreamer支持更多格式(MP3、AAC等),通过decodebin自动检测格式。
实践要点:DP音频需要DP线缆连接且显示器支持音频。常用格式为48000Hz/16bit/立体声。调试时先确认设备存在,再设置音量,最后播放测试。
VCU(Video Codec Unit)是Zynq UltraScale+ MPSoC EV系列内置硬件视频编解码单元,专门处理 H.264/H.265 实时编解码转码
优势:将高算力视频压缩 / 解压交给专用硬件,ARM CPU 仅负责驱动、缓冲、调度、显示输出
硬件互联:VCU 硬核通过 AXI 总线与 PS、DDR 内存交互,依赖驱动 + 固件协同工作
性能上限:支持 H.264/H.265 硬编硬解,最高 4K@60fps

前置操作:关闭 X11 占用 KMS 显示
systemctl stop xserver-nodm.servicesystemctl disable xserver-nodm.serviceMP4 视频解码输出 DP 显示器
gst-launch-1.0 uridecodebin uri=File:///run/media/BOOT-mmcblk1p1/h264_720P.mp4 ! queue max-size-bytes=0 ! videoconvert ! kmssink bus-id=fd4a0000.display fullscreen-overlay=1测试画面编码生成 MP4 文件
gst-launch-1.0 -e videotestsrc num-buffers=600 pattern=ball ! \video/x-raw,width=1280,height=720,framerate=30/1 ! \clockoverlay time-format="%H:%M:%S" font-desc="Sans, 36" ! \videoconvert ! video/x-raw,format=NV12 ! \omxh264enc ! h264parse ! mp4mux ! \filesink location=/run/media/BOOT-mmcblk1p1/test_clock_ball_720p30.mp4数据流链路: 测试图像源 → 分辨率帧率约束 → 时间水印叠加 → 格式转 NV12 → VCU 硬件 H.264 编码 → 码流解析 → MP4 封装 → 本地文件保存
视频转码(23.97fps → 30fps)
gst-launch-1.0 -e filesrc location=/run/media/BOOT-mmcblk1p1/h264_720P.mp4 ! \qtdemux ! h264parse ! omxh264dec low-latency=0 ! \videorate ! video/x-raw,framerate=30/1 ! \omxh264enc ! h264parse ! mp4mux ! \filesink location=/run/media/BOOT-mmcblk1p1/h264_720P_30fps.mp4USB 摄像头采集编码 + UDP 本地回环推流接收端(解码 + DP 显示,后台运行)
gst-launch-1.0 -v udpsrc port=5000 buffer-size=10000000 \caps="application/x-rtp,media=video,clock-rate=90000,payload=96,encoding-name=H264" ! \queue max-size-buffers=4 leaky=downstream ! \rtph264depay ! h264parse ! video/x-h264,alignment=nal ! \omxh264dec low-latency=1 ! \queue max-size-buffers=4 leaky=downstream ! \kmssink bus-id=fd4a0000.display plane-id=33 fullscreen-overlay=1 sync=false async=false &发送端(摄像头采集 + VCU 编码 + UDP 发送)
gst-launch-1.0 -v v4l2src device=/dev/video0 io-mode=mmap ! \video/x-raw,format=YUY2,width=640,height=480,framerate=25/1 ! \videoconvert ! video/x-raw,format=NV12,width=640,height=480,framerate=25/1 ! \omxh264enc target-bitrate=2000 control-rate=low-latency gop-mode=low-delay-p \gop-length=25 periodicity-idr=25 ! \h264parse ! rtph264pay config-interval=1 pt=96 ! \udpsink host=127.0.0.1 port=5000 sync=false async=false💡 完整视频讲解可前往 ALINX 视频号进行直播回看
更多细节欢迎关注我们黑金云课堂全年免费直播课,黑金云课堂六月直播日历 我们将在每周二、三、四,同步推进 Verilog开发、Vitis开发、Linux开发三大系列,带你从零开始,稳扎稳打掌握 FPGA 开发全流程!

