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

基于GStreamer RTSP传输视频与额外数据的实现及比特率疑问

Ubuntu下GStreamer RTSP推流:添加额外元数据(如气温)及x265enc比特率单位确认

问题描述

我在Ubuntu上用以下命令推流笔记本摄像头:

gst-rtsp-launch '( v4l2src device=/dev/video0 ! video/x-raw,framerate=30/1,width=320,height=240 ! videoconvert ! queue ! x265enc tune="zerolatency" byte-stream=true bitrate=80 ! rtph265pay name=pay0 pt=96 )'

现在有两个疑问:

  1. 听说RTSP可以传输额外信息(比如监控画面+气温),该怎么实现?是否需要编写脚本?
  2. 想确认x265enc中bitrate的单位,我用Wireshark测得实际比特率约97kbps,和设置的80不符,这是正常的吗?

回答

1. RTSP传输额外信息(如气温)的实现方式

RTSP传输额外数据有两种主流方案,都可以结合简单脚本实现,不需要复杂的应用开发:

方案一:将元数据嵌入视频流的SEI(补充增强信息)

H.265编码支持把自定义元数据打包到SEI帧中,GStreamer的x265enc可以配置传递这类信息:

  • 写个简单脚本(bash或Python都行),定时读取气温数据(比如从系统热传感器或外接传感器接口获取)
  • 通过GStreamer的fdsrc或identity元素把气温数据注入视频帧元数据,再由x265enc打包进SEI
  • 示例管道(结合bash脚本实时输出气温):
    # 后台脚本每秒输出一次当前CPU温度(模拟气温数据源)
    (while true; do echo "Temp: $(cat /sys/class/thermal/thermal_zone0/temp | awk '{print $1/1000}')°C"; sleep 1; done) | \
    gst-rtsp-launch '( 
      v4l2src device=/dev/video0 ! video/x-raw,framerate=30/1,width=320,height=240 ! videoconvert ! queue ! 
      x265enc tune="zerolatency" byte-stream=true bitrate=80 sei-user-data="$(cat -)" ! 
      rtph265pay name=pay0 pt=96 
    )'
    
    客户端播放时,可通过h265parse提取SEI中的用户数据解析出气温。

方案二:创建RTSP多流(视频流+文本数据流)

如果不需要把元数据和视频绑定,可以在RTSP服务器上开两个独立流:一个视频流,一个文本数据流:

gst-rtsp-launch '( 
  # 视频流分支
  v4l2src device=/dev/video0 ! video/x-raw,framerate=30/1,width=320,height=240 ! videoconvert ! queue ! 
  x265enc tune="zerolatency" byte-stream=true bitrate=80 ! rtph265pay name=pay0 pt=96;
  # 文本数据流分支(需配合脚本向appsrc推送气温数据)
  appsrc is-live=true block=true format=GST_FORMAT_TIME ! text/plain ! 
  rtptextpay name=pay1 pt=97 
)'

用脚本实时向appsrc推送气温数据,客户端可同时订阅两个流分别获取视频和气温信息。

结论:需要编写简单脚本(用来获取并传递气温数据),用命令行结合脚本就能实现,无需复杂开发。

2. x265enc的bitrate单位及实际值偏差问题

x265enc的bitrate单位是千比特每秒(kbps),设置bitrate=80即目标80kbps。

实际测得97kbps是正常现象,原因包括:

  • x265是动态比特率编码(即使CBR模式也有波动),画面复杂度变化时会自动调整比特率保证画质
  • zerolatency调优模式优先降低延迟,允许比特率有更大波动
  • 实际传输比特率包含RTP头部、H.265的NALU头部等额外开销,这些不计入x265enc的bitrate设置值

如果需要更严格的比特率控制,可添加参数限制峰值:

x265enc tune="zerolatency" byte-stream=true bitrate=80 vbv-maxrate=80 vbv-bufsize=80

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 22:05:27