MPEG DASH场景下如何将SCTE35 cue marker从JSON转换为二进制?
我正在进行MPEG DASH相关开发工作,目前接触到的SCTE35二进制cue Event格式如下:
<Event id="6" presentationTime="50726727"> <scte35:signal> <scte35:binary>/DBhAAAAAAAA///wBQb+qM1E7QBLAhdDVUVJSAAArX+fCAgAAAAALLLXnTUCAAIXQ1VFSUgAACZ/nwgIAAAAACyy150RAAACF0NVRUlIAAAnf58ICAAAAAAsstezEAAAihiGnw==</scte35:binary> </scte35:signal> </Event>解码后可得到SpliceInfoSection JSON对象,我需要对该JSON做修改后再转换回二进制格式用于测试,请问有什么实现方案?
SCTE35 JSON转二进制编码实现方案
方案1:使用成熟开源库(推荐,开发效率最高)
Python 技术栈
- 直接使用业内通用的
threefive库,完整支持SCTE35全标准编解码,操作步骤如下:- 安装依赖:
pip install threefive - 解码现有cue:将
<scte35:binary>标签内的base64字符串直接传入threefive.Cue实例,即可得到结构化的SpliceInfoSection字典,和你解码得到的JSON结构完全对应 - 直接修改字典内的目标字段,比如事件ID、PTS时间、分段描述符内容等
- 调用实例的
encode_b64()方法即可直接生成符合要求的base64编码二进制字符串,可直接填入DASH Event节点使用
- 安装依赖:
Node.js 技术栈
- 如果你是JS栈开发,可使用npm的
scte35包,同样支持base64字符串到JSON的双向转换,API逻辑和上述流程一致。
方案2:手动实现编解码(无第三方依赖场景)
如果你不想引入外部依赖,可对照ANSI/SCTE35标准的二进制结构规范自行实现序列化逻辑,核心步骤如下:
- 按位填充SpliceInfoSection固定头部:包含table_id、section_length、协议版本、PTS偏移、加扰标识等固定字段
- 序列化splice_command字段:根据你使用的splice命令类型(比如TimeSignal、Splice Insert等)按标准结构填充
- 序列化descriptor循环:每个描述符按「类型+长度+内容」的结构逐段拼接,注意分段描述符的各类标识位、时长、分段ID等字段的长度要严格符合标准
- 计算整个数据段的CRC32校验值,填充到结构末尾
- 把最终生成的字节流做base64编码,即可得到可直接使用的二进制cue内容
注意事项
- 所有时间相关字段单位为90kHz的PTS时间戳,修改时不要换算错误
- 各字段长度、标识位必须严格符合SCTE35标准,否则播放器会直接丢弃该cue
- CRC32校验值必须覆盖整个SpliceInfoSection除CRC本身外的所有字节,校验错误的cue无法正常解析
内容的提问来源于stack exchange,提问作者Shradha Saria
相关产品推荐
相关产品推荐

