问题标签 [fmp4]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - Apple 设备上的 HLS/fMP4 (CMAF) 冗余/回退(主要/备份)工作流程不起作用
我正在尝试使用主/备份工作流将我的 HLS/fMP4 (CMAF) 流发布到 Akamai。
当我使用 Shaka 播放器进行测试时,它工作正常:每当停止发布到主入口点时,播放器将正确切换到备份流并继续播放。
但是,不知何故,它不适用于 iOS11 或 macOS High Sierra 上的 safari。我想知道这是否是 Apple 设备的限制,或者我的主播放列表中存在兼容性问题。
这是示例主播放列表文件。
注意:为了便于阅读,我只包含了一对视频和音频。
如果你注意到什么,请告诉我。
ios - 是否可以使用 AVAssetWriter 将广播样本编码为 MPEG-ts 或 fmp4 文件?
我知道这是一个常见问题,没有简单的解决方案。
找到了一个相同的演示 - http://blog.denivip.ru/index.php/2017/01/live-streaming-on-ios/?lang=en,但它不使用 AVAssetWriter。
人们还建议使用bento4 库,但我希望能够以编程方式完成它,而无需创建新进程,也无需创建新文件和使用 AVAssetWriter 的延迟。
如果不可能,为什么 IOS 没有内置支持使用 AVAssetWriter 使用示例创建这些文件?
RTSP 是 Apple 推荐的直播流媒体的唯一选择吗?
video-streaming - 如何在给定分段 MP4 文件的情况下生成 DASH 清单文件(MPD 文件)
所以我有一个碎片化的 MP4 文件。现在我需要将这个碎片化的 MP4 文件流式传输到移动设备上的 DASH 播放器(以便用户可以从移动设备上观看此视频)。但是,我不知道如何为这个碎片化的 MP4 文件生成 DASH 清单文件。任何帮助,将不胜感激!
更多信息:希望它是点播的,而不是直播的。
谢谢!
c - 关于 fmp4 编码,如何用 H264 帧填充 mdat 框?
我使用 C 语言将 H264 帧(只有 I/P 帧)编码为 fmp4 文件。当我填充mdat框时,我不知道如何填充帧数据。
(I/P)帧数据是直接填充的吗?
前 4 个字节是否需要填充帧长度?
我尝试使用FFMPG对fmp4文件进行编码,发现mdat box中的数据与原来的I/P帧数据完全不同。
是不是又打码了?
可以直接将I/P帧的数据填入mdat box吗?
c++ - 碎片化 MP4 - 在浏览器中播放问题
我尝试从原始 H264 视频数据创建分段 MP4,以便我可以在 Internet 浏览器的播放器中播放它。我的目标是创建实时流媒体系统,媒体服务器将碎片化的 MP4 片段发送到浏览器。服务器将缓冲来自 RaspberryPi 摄像头的输入数据,该摄像头将视频作为 H264 帧发送。然后它将混合该视频数据并使其可供客户端使用。浏览器将使用媒体源扩展播放媒体数据(由服务器混合并通过 websocket 发送)。
出于测试目的,我编写了以下代码(使用我在互联网上找到的许多示例):
使用 avcodec 的 C++ 应用程序将原始 H264 视频复用到分段 MP4 并将其保存到文件中:
(我硬编码了一些值,例如视频尺寸或帧速率,但正如我所说,这只是一个测试代码。)
使用 MSE 播放我的碎片化 MP4 的简单 HTML 网页
我的 C++ 应用程序生成的输出 MP4 文件可以在 MPC 中播放,但它不能在我测试过的任何网络浏览器中播放。它也没有任何持续时间(MPC 一直显示 00:00)。
为了比较我从上述 C++ 应用程序获得的输出 MP4 文件,我还使用 FFMPEG 从具有原始 H264 流的相同源文件创建分段 MP4 文件。我使用了以下命令:
这个由 FFMPEG 生成的文件可以被我用于测试的每个网络浏览器正确播放。它也有正确的持续时间(但它也有尾随原子,无论如何它不会出现在我的直播中,而且由于我需要直播,所以它首先不会有任何固定的持续时间)。
两个文件的 MP4 原子看起来非常相似(它们肯定有相同的 avcc 部分)。有趣的是(但不确定它是否重要),这两个文件的 NAL 格式与输入文件不同(RPI 相机产生 Annex-B 格式的视频流,而输出 MP4 文件包含 AVCC 格式的 NAL ......或者至少它当我将 mdat 原子与输入 H264 数据进行比较时,看起来就是这种情况)。
我假设我需要为 avcodec 设置一些字段(或几个字段),以使其生成可以被浏览器播放器正确解码和播放的视频流。但是我需要设置哪些字段?或者问题可能出在其他地方?我没有主意了。
编辑 1: 按照建议,我使用十六进制编辑器调查了两个 MP4 文件(由我的应用程序和 FFMPEG 工具生成)的二进制内容。我可以确认的:
- 两个文件都有相同的 avcc 部分(它们完全匹配并且是 AVCC 格式,我逐字节分析它,没有错误)
- 两个文件都有 AVCC 格式的 NAL(我仔细查看了 mdat 原子,它们在两个 MP4 文件之间没有区别)
所以我想在我的代码中创建额外数据没有任何问题 - avcodec 会妥善处理它,即使我只是用 SPS 和 PPS NAL 提供它。它自己转换它们,所以我不需要手动做。尽管如此,我原来的问题仍然存在。
编辑 2:我取得了部分成功 - 我的应用程序生成的 MP4 现在可以在 Firefox 中播放。我将这一行添加到代码中(以及其余的流初始化):
所以现在我的这部分代码看起来像这样:
mp4 - Where is the detailed description of the esds box of the mp4 file
In which document does the esds box of mp4 file have a detailed description? Why is it not found in the ISO/ IEC 14496-12 document