播放端标注叠加方案

news/2024/12/24 2:44:14 标签: javascript

方案要求

  1. 标注信息能够随着视频数据一起传输,混合在视频数据中
  2. 数据在解码前,就可以从视频数据中解析出来

传输协议

目前,主流摄像头的数据都是通过RTSP协议进行协商,然后通过RTP传输数据,使用RTCP进行流控。

应用层:RTSP(负责会话管理、控制播放等)
传输层:RTP(传输音视频流) + RTCP(监控传输质量)
网络层:UDP / TCP(底层传输协议)

RTP over TCP

每个 RTP 数据包前面会加上一个固定的 4 字节前导头 (Interleaved Frame Header),格式如下:
在这里插入图片描述

魔术字节 (Magic Byte):固定为 0x24,用于标识 TCP 流中嵌入的 RTP 包。
通道号 (Channel ID):通常有两个通道,一个用于 RTP 数据流(视频/音频数据),另一个用于 RTCP 控制数据。例如,视频的 RTP 数据可能在通道 0,RTCP 控制包可能在通道 1。
长度 (Length):16 位无符号整数,表示后续实际 RTP 数据包的长度(单位为字节)。

RTP协议

RTP数据包由两部分组成,一部分是RTP Heaeder,一部分是RTP body,RTP Header占用最少12个字节,最多72个字节;另一部分是RTP Payload,用来封装实际的数据负载。

RTP Header
参考:手撕RTSP协议系列(12)— RTP包格式

   0               1                 2               3             4
    
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |V=2|P|X|  CC |M|     PT          | sequence number             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | timestamp                                                     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | synchronization source (SSRC) identifier                      |
   +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
   | contributing source (CSRC) identifiers                        |
   | ....                                                          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

NALU

参考:RTP中H264封装NALU格式详细解析

需要注意的是,当 H.264 比特流被封装进 RTP 包时,起始码不会被包含在 RTP 载荷中,RTP负载直接就从NAL Header开始。

RTP 使用其他的机制来标识 NALU 的边界。例如STAP-A、STAP-B、STAP-C、MTAP、FU-A、FU-B。
像使用 STAP - A(Single - Time Aggregation Packet - A)来聚合多个小的 NALU,可以减少头部开销,提高带宽利用率。或者对于大的 NALU 采用 FU - A(Fragmentation Unit - A)进行分片,以适应有限的 MTU。

SEI

参考:SEI补充增强信息(全网最全SEI指南)

SEI(Supplemental Enhancement Information,补充增强信息)是H.264中的一种NAL单元类型,其主要功能是提供对解码过程非必要的额外信息,这些信息可以用来改善或辅助视频的显示、处理或传输,但即使没有这些信息,解码器也能够正确解码视频序列。

通过ffmpeg的BitStream Filter(码流过滤),在不做码流解码的前提下,对已经编码后的SEI做特定的修改。示例命令添加了类型为未注册的用户数据的SEI,其中uuid为"086f3693-b7b3-4f2c-9653-21492feee5b8",payload内容为"hello":
./ffmpeg -I oceans.h264 -c:v copy -bsf:v h264_metadata=sei_user_data='086f3693-b7b3-4f2c-9653-21492feee5b8+hello' oceans.sei.h264


http://www.niftyadmin.cn/n/5797235.html

相关文章

Java中使用四叶天动态代理IP构建ip代理池,实现httpClient和Jsoup代理ip爬虫

在本次爬虫项目中,关于应用IP代理池方面,具体完成以下功能: 从指定API地址提取IP到ip池中(一次提取的IP数量可以自定义更改) 每次开始爬虫前(多条爬虫线程并发执行),从ip池中获取一…

深度学习从入门到精通——图像分割实战DeeplabV3

DeeplabV3算法 参数配置关于数据集的配置训练集参数 数据预处理模块DataSet构建模块测试一下数据集去正则化模型加载模块DeepLABV3 参数配置 关于数据集的配置 parser argparse.ArgumentParser()# Datset Optionsparser.add_argument("--data_root", typestr, defa…

【Java基础面试题029】Java中的hashCode和equals方法之间有什么关系?

回答重点 在Java中,hashCode()和equals方法的关系主要体现在集合类(如HashMap、HashSet)中。 他俩决定了对象的逻辑相等性和哈希存储方式 equals()方法: 用于判断两个对象是否相等,默认实现是使用比较对象的内存地…

文章发稿平台哪个好用?哪个类型的媒体平台比较好过稿?

在做软文推广的过程中,被拒稿是个常见但又让人头疼的问题。尤其在推广节奏比较紧张的时候,拒稿会导致整个进度被持续拖延,在企业公关、新品推广等环节中会产生较为明显的负面影响。 文章发稿平台哪个好用?哪个类型的文章发稿平台比…

HarmonyOS NEXT 技术实践-基于基础视觉服务的多目标识别

在智能手机、平板和其他智能设备日益智能化的今天,视觉识别技术成为提升用户体验和智能交互的重要手段。HarmonyOS NEXT通过基础视觉服务(HMS Core Vision)提供了一套强大的视觉识别功能,其中多目标识别作为其关键技术之一&#x…

sh cmake-linux.sh -- --skip-license --prefix = $MY_INSTALL_DIR

本文来自天工AI --------- 命令用于安装CMake的脚本,其中--skip-license参数表示跳过许可协议的显示,--prefix参数指定了CMake的安装目录。$MYINSTALLDIR是一个环境变量,应该在运行命令之前设置为您想要安装CMake的目录。 -------- sh xx…

git推送本地仓库到远程(Gitee)

目录 一、注册创建库 二、创建仓库 三、推送本地仓库到远程 1.修改本地仓库用户名和邮箱 2.本地库关联远程仓库 3.拉取远程仓库的文件 4.推送本地库的文件 5.查看远程仓库 四、远程分支查看 1.查看远程分支 2.修改test.txt文件 一、注册创建库 Gitee官网&#xff1…

SSH用户认证

SSH用户认证最基本的两种方式是密码认证和密钥认证。密码认证是将自己的用户名和密码发送给服务器进行认证,这种方式比较简单,且每次登录都需要输入用户名和密码。密钥认证使用公钥私钥对进行身份验证,实现安全的免密登录,是一种广…