gpt4 book ai didi

ios - 使用 FFmpeg 在 iOS 上编写时将 fMP4 转码为 HLS

转载 作者:IT王子 更新时间:2023-10-29 07:35:03 25 4
gpt4 key购买 nike

长话短说

我想将 fMP4 片段转换为 TS 片段(用于 HLS),因为片段是在 iOS 设备上使用 FFmpeg 编写的。

为什么?

我正在尝试在 iOS 上实现实时上传,同时在本地保持无缝的高清副本。

我尝试过的

  1. 滚动 AVAssetWriter,每个写入 8 秒,然后通过 FFmpeg 将 MP4 连接在一起。

    出了什么问题 - 音频和视频中有时会出现 Blob 。我确定了 3 个原因。

    1) AAC 编码器写入的音频的启动帧产生间隙。

    2) 由于视频帧长 33.33 毫秒,音频帧长 0.022 毫秒,因此它们可能不会在文件末尾对齐。

    3) Mac OS 上缺少帧精确编码,但不适用于 iOS Details Here

  2. FFmpeg 将带有原始音频的大型纯视频 MP4 文件混合成 TS 片段。这项工作是基于 Kickflip SDK

    出了什么问题 - 每隔一段时间就会上传一个只有音频的文件,没有任何视频。无法在内部复制它,但是当我们的用户没有记录他们认为他们所做的事情时,这让我们的用户感到非常沮丧。在最后的片段上也存在准确搜索的问题,几乎就像 TS 片段的时间戳不正确一样。

我现在在想什么

Apple 在今年(2016 年)的 WWDC 上推出了 fMP4,而在那之前我根本没有仔细研究过它。由于可以读取 fMP4 文件并在写入时播放 ,我认为 FFmpeg 也可以在文件写入时对其进行转码,只要我们推迟发送字节到 FFmpeg,直到文件中的每个片段完成。

但是,我对 FFmpeg C API 还不够熟悉,我只是在尝试 #2 中简单地使用了它。

我需要你做什么

  1. 这是一个可行的解决方案吗?是否有人对 fMP4 足够熟悉,知道我是否真的能做到这一点?
  2. 我如何知道 AVFoundation 已完成在文件中编写片段,以便我可以将其通过管道传输到 FFmpeg?
  3. 我如何从磁盘上的文件中获取数据,一次分 block ,将其传递到 FFmpeg 并让它吐出 TS 段?

最佳答案

严格来说fmp4如果是h264+aac就不需要转码,只需要将sample数据重新打包成TS即可。 (使用 ffmpeg -codec copygpac )

写信。 alignment (1.2) 我想这完全取决于你的编码器设置(帧速率、采样率和 GOP 大小)。当然可以确保音频和视频在片段边界处准确对齐(参见示例:this table)。如果您的目标是 iOS,我建议您使用 HLS protocol版本 3(或 4)允许更准确地表示时序。这还允许您单独流式传输音频和视频(非多路复用)。

我相信 ffmpeg 应该能够推送实时 fmp4 流(即使用长时间运行的 HTTP POST),但播放需要 origin software用它做一些有意义的事情(即流式传输到 HLS)。

关于ios - 使用 FFmpeg 在 iOS 上编写时将 fMP4 转码为 HLS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38227301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com