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

使用GStreamer实现RTSP转HLS时如何保留音频通道?

解决GStreamer RTSP转HLS时音频丢失的问题

你的问题很典型——当前的GStreamer管道只处理了RTSP流里的H.264视频部分,完全忽略了音频流,所以生成的HLS内容自然没有声音。要解决这个问题,我们需要把音频流也加入到处理链路中,最终和视频一起复用进TS分片里。

核心思路

RTSP源通常包含至少两个流:视频流和音频流。我们需要分别解析这两个流,然后用mpegtsmux将它们合并成带音视频的TS流,再交给hlssink生成HLS播放列表和分片。

方案一:针对已知音频编码(比如AAC)的管道

如果你的RTSP流音频是AAC编码(这是最常见的情况),可以直接用以下管道:

gst-launch-1.0 rtspsrc location=rtsp://192.168.112.86:8554/test \
  ! queue ! rtph264depay ! h264parse ! mpegtsmux name=mux \
  rtspsrc location=rtsp://192.168.112.86:8554/test \
  ! queue ! rtpmp4gdepay ! aacparse ! mux. \
  mux ! hlssink max-files=5 playlist-location=/hlssink/playlist.m3u8 location=/hlssink/segment%05d.ts target-duration=10

各部分作用:

  • queue:为音视频流分别创建缓冲队列,避免音视频不同步或阻塞
  • rtph264depay/rtpmp4gdepay:分别解封装RTSP中的H.264视频RTP包和AAC音频RTP包
  • h264parse/aacparse:解析音视频码流,让复用器能正确识别格式
  • mpegtsmux name=mux:创建TS复用器实例,把音视频流都输入进去(注意音频流结尾的.表示将流送入名为mux的复用器)

方案二:通用适配任意音频编码的管道

如果你不确定原RTSP的音频编码,或者音频是其他格式(比如G.711、PCM),可以用decodebin自动识别并处理,再转成HLS支持的AAC编码:

gst-launch-1.0 rtspsrc location=rtsp://192.168.112.86:8554/test ! decodebin name=dec \
  dec. ! queue ! videoconvert ! x264enc tune=zerolatency ! h264parse ! mpegtsmux name=mux \
  dec. ! queue ! audioconvert ! audioresample ! faac bitrate=128000 ! aacparse ! mux. \
  mux ! hlssink max-files=5 playlist-location=/hlssink/playlist.m3u8 location=/hlssink/segment%05d.ts target-duration=10

这个管道的优势是:

  • decodebin会自动探测并解码RTSP中的音视频流
  • 视频解码后重新用x264enc编码(tune=zerolatency适合低延迟场景)
  • 音频解码后通过audioconvert/audioresample处理格式,再用faac编码成HLS兼容的AAC格式
  • 最终音视频流合并后生成带声音的HLS内容

验证方法

运行修改后的管道后,你可以用ffprobe查看生成的TS分片:

ffprobe /hlssink/segment00000.ts

如果输出中同时显示视频流和音频流,就说明音频已经成功加入了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:41:03