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

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全标准编解码,操作步骤如下:
    1. 安装依赖:pip install threefive
    2. 解码现有cue:将<scte35:binary>标签内的base64字符串直接传入threefive.Cue实例,即可得到结构化的SpliceInfoSection字典,和你解码得到的JSON结构完全对应
    3. 直接修改字典内的目标字段,比如事件ID、PTS时间、分段描述符内容等
    4. 调用实例的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 18:15:02