当前位置: 首页 > 知识库问答 >
问题:

使用FFmpeg在iOS上写入时将fMP4转换为HLS

乐寒
2023-03-14

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

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

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

2)由于视频帧长33.33ms,音频帧长0.022ms,所以它们可能不在文件末尾排队。

3)在Mac OS上缺乏帧精确编码,但在iOS上没有详细信息

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

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

共有1个答案

方河
2023-03-14

严格地说,如果fmp4包含H264+AAC,您不需要对其进行代码转换,只需要将示例数据重新打包为TS即可。(使用ffmpeg-codec copy或gpac)

WRT.对齐(1.2)我想这都取决于你的编码器设置(帧率,采样率和GOP大小)。当然可以确保音频和视频在片段边界上完全对齐(例如,请参见此表)。如果您的目标是iOS,我建议使用HLS协议版本3(或4),允许更准确地表示时间。这也允许您分别流音频和视频(非多路复用)。

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

 类似资料:
  • 我试图转换一个实时的rtmp流到hls流。 我看了之后有了一些想法 提前谢谢...

  • 问题内容: 我必须对ffmpeg使用以下命令 我已经在Mac上成功安装了ffmpeg。我尝试使用FFMPEGWrapper,但是使用“ map”似乎没有任何此类参数。 我需要知道如何从视频中提取流。我已经可以访问流了,因为服务器端在端使用ffprobe向我提供了这些流。 问题答案: 将FFMpeg用于IOS的最佳方法是MobileFFMpeg库。 这是来源:https : //github.com

  • 我有关于在JTextField打字的问题。我的程序搜索通过几个csv文件和寻找指定的JTextField字符串。我有添加到readLine函数". toLowerCase"读取所有字符串作为小写。在写入JTextField时,是否可以将JTextField设置为自动将大写转换为小写? if(line.toLowerCase()。包含(searchedString))

  • 1. Gradle 2.代码 3、Logcat: 采用gcc 4.9构建。x(GCC)20150123(预发布)配置:---目标操作系统=linux--交叉前缀=/root/bravobit/ffmpeg-android/toolschain-android/bin/arm-linux-androideabi---arch=arm--cpu=cortex-a8--启用运行时cpudetec--sy

  • 我正在尝试用FFMPEG将MP3音频文件转换为AAC文件,我需要将音频包装在MPEG-2容器中。生成的AAC文件需要是AAC-LC(低复杂度)、1通道、CBR模式、44100采样率和48kb/s比特率,所以我使用此命令: 但是当我检查ADTS头时,音频文件总是被包装在MPEG-4容器中。我已经尝试了这里列出的所有编解码器,但我最终还是得到了一个包装在音频周围的mpeg-4容器:http://tra

  • 问题内容: 我正在尝试遵循代码 我得到的输出是因为Unicode未定义ß的大写版本,而我希望输出为。 有什么办法可以实现? 问题答案: 的文档明确指出将要发生的情况: 由于案例映射并不总是1:1字符映射,因此生成的String的长度可能与原始String的长度不同。 小写字母s->两个字母:SS