You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Gstreamer将树莓派实时音视频封装为MPEG-TS流供VLC局域网播放

错误原因

你遇到的not-negotiated报错是音频采集到复用的链路缺少格式适配元件,导致上下游元件的输入输出格式无法匹配导致的,与麦克风本身的硬件兼容性无关。

修复后的可运行脚本

#!/bin/bash
dstAdr=${1:-192.168.0.255}

raspivid -n -w 640 -h 480 -fps 20 -b 2000000 -a 12 -t 0 -o - \
        | gst-launch-1.0 -e -v fdsrc \
        ! video/x-h264, width=640, height=480, framerate=20/1 \
        ! h264parse config-interval=-1 \
        ! mpegtsmux name=mux \
        ! udpsink host=$dstAdr port=5004 \
          alsasrc device=hw:1,0 \
        ! audio/x-raw, channels=1, rate=44100 \
        ! audioconvert \
        ! audioresample \
        ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 \
        ! lamemp3enc target=1 bitrate=64 cbr=true \
        ! mp3parse \
        ! mux.

修改说明:

  1. 音频链路新增audioconvert、audioresample元件,适配不同硬件输出的原始音频格式,满足编码器输入要求
  2. MP3编码后新增mp3parse元件,对齐mpegtsmux的输入格式要求
  3. 移除多余的rtpmp2tpay封装,保持和原有纯视频流的播放地址兼容,局域网设备仍可通过udp://@:5004直接用VLC播放
  4. 调整queue参数避免音频缓存导致的音画不同步

疑问解答

  • alsasrc是否需要额外添加明确配置参数?
    你当前配置的设备号、声道数、采样率参数已经满足要求,不需要额外新增alsasrc配置项,报错和alsasrc本身的配置无关。
  • 使用Gstreamer命令行工具是否可以实现两路实时流复用为单一流?
    完全可以,你原有的流水线结构逻辑是正确的,仅缺少中间适配元件,上述修复后的命令即可直接实现音视频流合并输出。
  • 该需求是否可以通过Gstreamer C API实现?
    可以,Gstreamer命令行本质是对C API的上层封装,所有命令行可实现的流水线功能都可以通过C API实现,还可额外扩展运行时参数调整、异常自动重启、流控优化等自定义功能。

内容的提问来源于stack exchange,提问作者thatjames

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 18:15:03