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

Android端RTP传输MPEG2-TS封装H.264流的实现方案咨询

Android端MPEG2-TS流生成方案(适配Miracast推流场景)

你不需要从零实现完整的MPEG2-TS协议规范,有两类成熟方案可选:

可直接复用的现成库

  • 老牌Android流媒体库libstreaming:内置独立的MPEG2-TS封装模块,直接接收MediaCodec输出的H.264裸码流即可输出标准TS包,自带RTP打包逻辑,完全匹配Miracast单视频流推流的需求,你可以单独抽取TS封装模块使用,不需要依赖库内的采集、编码相关代码,优先选社区维护的AndroidX兼容分支即可。
  • 轻量纯Java库minits:无额外依赖,核心逻辑仅针对实时TS流生成场景设计,代码体量极小,支持直接输入H.264 NAL单元输出符合标准的TS分片,不需要提前做预封装,适合不想引入大型依赖的场景。
  • 裁剪版FFmpeg native依赖:如果可以接受引入小型so库,可以编译仅开启MPEG2-TS复用、H.264流解析功能的裁剪版FFmpeg,最终so体积可以控制在1MB以内,调用libavformat的复用接口喂入编码帧即可输出TS流,兼容性是所有方案里最高的。

轻量自实现方案(适配Miracast场景,复杂度极低)

Miracast接收端对TS流的兼容性极强,仅需要支持单路H.264视频流即可,完全不需要实现多节目、加扰、数据广播等扩展特性,你之前用ByteBuffer手动构造RTP头的经验完全可以复用,只需要实现三个核心逻辑,总代码量在300行Java左右:

不需要啃完整的MPEG2-TS官方规范,仅实现最小必要子集即可正常工作

  1. 预生成固定的PAT、PMT表TS包:因为是单路固定视频流,PAT、PMT的结构完全固定,可以提前写死对应的字节内容,推流过程中每隔100ms在流中插入一次这两个包即可,不需要动态计算表内容。
  2. H.264帧的PES封装:将编码输出的I帧、P帧分别封装为PES包,PES头内填入对应帧的PTS/DTS时间戳即可,视频流的PES包长度可以直接设为0表示无长度限制,省去分片长度计算逻辑。
  3. TS固定长度分片:将PES数据切分为固定188字节长度的TS包,每个包开头填入4字节TS头,设置正确的PID、连续性计数器值,每个PES的第一个TS包需要置位payload unit start indicator标记,不需要用到自适应字段时直接设置适配区控制位为仅含payload,后续直接跟PES数据即可。

*注意:自实现时只需要保证时间戳连续、连续性计数器按包递增、PAT/PMT表定期发送,绝大多数Miracast设备都可以正常解码显示,不需要处理TS规范里的各种边缘场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 17:54:29