SO ......
我在本地文件中通过RTSP捕获了RAW H.264视频数据,我正在尝试在Java FX应用程序中播放视频。为了做到这一点,我需要使用Http Live Streaming。
我已经成功构建了一个Java FX架构的原型,该架构可以通过HLS与本地服务器一起使用包含.m3u8(HLS索引)文件和.ts(MPEG-TS)文件集合的本地文件夹播放视频。最后一部分是用.264 / .h264文件替换.ts文件,在本地服务器中,将H.264附件B数据转换/包装到MPEG-TS中。
我无法确定将H.264附件B纳入MPEG-TS所需的内容。我找到了以下信息......
“附件B通常用于实时和流媒体格式,例如 运输流......“
szatmary.org/blog/25
“文件的附件B指定了一种包装NAL的格式 单位格式类似于传统的MPEG视频基本格式 流,因此使其适用于像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
似乎我在Elementary和Transport Streams周围缺少一些简单的东西。我使用ffmpeg将我的H.264文件转换为TS文件并尝试理解其中的差异。我对大致的格式差异有所了解,但我仍然缺乏细节。有没有人有链接展示这个或知道如何通过MPEG-TS提供H.264附件B数据?
我不打算使用工具,我需要在本地使用自定义文件格式,我会解析H.264附件B数据并在运行中执行内存格式更改。我知道一种使用ffmpeg管道来实现这一目标的方法,但我不希望有任何依赖关系,性能很重要。
答案 0 :(得分:3)
它不是格式更改。这是一个容器。无需解析附件b以将其写入TS文件。 TS包装了一个包含附件b流的PES。 mpegts格式非常复杂,特别是没有第三方库。我在工作中编写和使用的ts代码大约是1000行C ++。
要编写TS代码,首先尝试使用十六进制编辑器读取TS文件,然后引用维基百科文档。这本书视频揭秘也有相当好的文档。