将 H.264 Annex B 转换为 MPEG-TS

Lan*_*ane 5 ffmpeg javafx h.264 http-live-streaming mpeg2-ts

所以...

我在本地文件中有通过 RTSP 捕获的 RAW H.264 视频数据,我正在尝试在 Java FX 应用程序中播放视频。为此,我需要使用 Http Live Streaming。

我已经成功地设计了一个 Java FX 架构原型,该架构可以使用包含 .m3u8(HLS 索引)文件和 .ts(MPEG-TS)文件集合的本地文件夹通过 HLS 与本地服务器一起播放视频。我的最后一部分是用 .264 / .h264 文件替换 .ts 文件,并在本地服务器中,将 H.264 Annex B 数据转换/包装为 MPEG-TS。

我无法弄清楚将 H.264 Annex B 转换为 MPEG-TS 所需的条件。我找到了以下信息...

“附件B通常用于直播和流媒体格式,例如传输流......”

szatmary.org/blog/25

“该文件的附录 B 指定了一种这样的格式,它以类似于传统 MPEG 视频基本流的格式包装 NAL 单元,从而使其适用于像 MPEG PS/TS 这样无法提供所需帧的容器......”

wiki.multimedia.cx/?title=H.264

“Java FX 支持多种不同的媒体类型。媒体类型被认为是容器格式和一种或多种编码的组合。在某些情况下,容器格式可能只是包含编码数据的基本流。”

docs.oracle.com/javafx/2/api/javafx/scene/media/package-summary.html

“使用 EXT-X-STREAM-INF 标签的 CODECS 属性。当此属性存在时,它必须包括播放流所需的所有编解码器和配置文件......”

developer.apple.com/library/ios/documentation/networkinginternet/conceptual/streamingmediaguide/FrequentlyAskedQuestions/FrequentlyAskedQuestions.html

似乎我在基本流和传输流方面缺少一些简单的东西。我已经使用 ffmpeg 将我的 H.264 文件转换为 TS 文件并尝试了解差异。我知道大致的格式差异,但我仍然缺乏细节。有没有人有一个链接来展示这个或知道一些关于如何通过 MPEG-TS 提供 H.264 Annex B 数据的简单信息?

我不想使用工具,我需要在本地有一个自定义文件格式,我可以在其中解析 H.264 Annex B 数据并在内存中即时执行格式更改。我知道一种将 ffmpeg 与管道一起使用的方法来实现这一点,但我不想有任何依赖关系,性能很重要。

sza*_*ary 5

它不是格式更改。它是一个容器。不需要解析出附件b写入TS文件。TS 包装 PES,PES 包装附件 b 流。mpegts 格式非常复杂,尤其是没有第三方库的情况下。我在工作中编写和使用的ts代码大约有1000行C++。

要编写 TS 代码,首先尝试使用十六进制编辑器读取 TS 文件,并参考维基百科文档。《Video Demystified》一书也有相当好的文档。