【问题标题】:Android: mpeg4/H.264 packetization exampleAndroid:mpeg4/H.264 打包示例
【发布时间】:2011-05-03 12:35:36
【问题描述】:

我需要拆分 mpeg4 视频流(实际上来自 android 摄像机)以通过 RTP 发送。 规格不大,供快速参考。

不知道有没有mpeg4打包的例子/开源代码?

感谢您的帮助!

【问题讨论】:

  • 您可能需要检查FFmpeg,因为它有自己的流媒体服务器并且是开源的,但它是用 C 或 C++ 编写的。

标签: java android h.264 rtp mpeg-4


【解决方案1】:

Mpeg4 文件格式也称为 ISO/IEC 14496-14。谷歌它任何你会发现规格。 但是,由于以下原因,您尝试做的事情(RTP 发布者)会很困难:

  1. Mpeg4 在文件末尾有标题。这意味着只有在视频流完成时才会写出标题。由于您想要进行实时视频流传输,您需要猜测音频和视频数据包的开始/结束位置。这在所有 Android 设备上并不相同,因为它们可能使用不同的视频大小和编解码器参数。因此,您的代码将依赖于设备,并且您需要支持和测试许多不同的设备。

  2. 某些设备不会定期将视频数据刷新到文件中。有些人每分钟左右只冲洗一次。这会破坏您的实时流。

  3. 没有示例代码。我知道,因为我看过。有几家公司做类似的事情,但主要是跳过 RTP。相反,他们逐步将文件上传到他们自己的服务器,然后实现视频/音频流“斩波”,然后将其插入他们的视频/转码器后端。我曾经为其中一家公司工作,我们就是这样做的。 AFAIK 比赛采用了类似的方法。好处是所有复杂性都在服务器上,当出现故障或新设备上市时,您无需更新客户端。

【讨论】:

  • 感谢您的回答!另外我想知道我需要拆分什么? Mpeg4 容器还是 h.264 本身?您也可能知道哪个 h.264 配置文件更容易/更好地用于静态视图的流式传输(例如,像 IP 摄像机 - 拍摄固定点)
  • 不知道配置文件 - 你甚至可以在 Android 设备上设置它吗? Mpeg4 是一个容器,可以包含各种视频和音频流。流被分成交错的数据包。规范说明了一切。
  • 据我从规范中了解到,我需要简单地从 android 流 NAL 中获取并将其包装在 RTP 数据包中。
  • 不能说,因为我不是这方面的专家。但是有一个单独的 RTP 规范将 Mpeg4 流映射到 RTP:rfc-editor.org/rfc/rfc3016.txt
  • 假设您只记录图像数据,那么问题 1 可以通过写出 1 帧的视频来解决。写出的图像必须与要录制的视频大小相同。这样您就可以解析 stsd atom 以获取必要的解码器信息。您仍然需要每个图像的示例时间戳以及获取 AAC 编码帧的方法,以便通过 RTP 正确传输同步视频。无论如何,感谢第 2 点。在将我的 iOS 代码移植到 Android 时,您将我从潜在的噩梦中拯救了出来。
猜你喜欢
  • 2013-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-29
  • 2022-03-24
  • 1970-01-01
  • 2011-12-16
  • 1970-01-01
相关资源
最近更新 更多