实时消息协议流的所有可能容器

Posted

技术标签:

【中文标题】实时消息协议流的所有可能容器【英文标题】:All possible containers for a Real Time Messaging Protocol stream 【发布时间】:2016-09-30 06:35:27 【问题描述】:

我正在参与构建实时消息传递协议解析器。我正在从 RTMP 数据包中收集视频/音频数据。现在要在任何播放器中播放视频,我需要知道容器格式以及使用的编解码器。在我从 RTMP 数据包获取的视频数据中,我知道使用的编解码器(例如 On2 VP6)。但我不知道如何知道我正在接收的音频/视频流的容器。所以我应该假设 RTMP 只支持 FLV 容器吗???或者我是否可以从任何其他容器格式获取音频/视频数据包?如果是,那么如何从 RTMP 数据包中存在的信息中了解 RTMP 数据中使用的容器类型?Adobe 的 RTMP 规范不提供有关音频/视频数据容器的任何信息。有什么帮助吗???我被困在这里很长一段时间了。

【问题讨论】:

【参考方案1】:

这是一个有点错误的问题。

RTMP 是一种传输协议,其中包含容器。

技术上说RTMP承载FLV是不正确的,因为FLV有两层封装,RTMP只承载底层。

所以说RTMP只能传输FLV可以传输的编解码器是对的,不能说RTMP传输FLV是100%正确的。

Adobe 的 RTMP 规范不是为开发人员创建的,而是针对针对 Wowza 的法律问题创建的,因此它不是为了让您了解正在发生的事情而编写的。阅读red5、crtmp或其他rtmp服务器的源码,比较容易理解。

【讨论】:

以上是关于实时消息协议流的所有可能容器的主要内容,如果未能解决你的问题,请参考以下文章

从 Android 设备到 Wowza 服务器的实时流传输协议?

编写流协议:消息大小字段或消息分隔符?

RTSP 媒体协议流的录制方案及其覆盖策略详解

阿里云直播 笔记

解析来自 TCP 流的 HTTP 响应

粘包问题