FFmpeg iOS->;输出文件无效

FFmpeg iOS->;输出文件无效,ios,objective-c,ffmpeg,mp4,aac,Ios,Objective C,Ffmpeg,Mp4,Aac,我正在使用以下库将mkv转换为mp4: 以下是LLDB中有关自动检测的编解码器类型的值: (lldb) po inputStream.codecName aac (lldb) po outputStream.codecName aac 我应该在这里提到,最初该文件是在Linux上使用以下编解码器生成的:vaapincode_h264用于视频,而faac用于声音 问题是这个文件根本不起作用。我在控制台中获得大量日志,其中最重要的是: [aac @ 0x7f7f65019200] Format

我正在使用以下库将mkv转换为mp4:

以下是LLDB中有关自动检测的编解码器类型的值:

(lldb) po inputStream.codecName
aac

(lldb) po outputStream.codecName
aac
我应该在这里提到,最初该文件是在Linux上使用以下编解码器生成的:
vaapincode_h264
用于视频,而
faac
用于声音

问题是这个文件根本不起作用。我在控制台中获得大量日志,其中最重要的是:

[aac @ 0x7f7f65019200] Format aac detected only with low score of 1, misdetection possible!
在库内部,使用以下功能:

int streamInfoValue = avformat_find_stream_info(inputFormatContext, NULL);
这条线确实把原木弄得一团糟。显然,如果没有这一行,我会收到一个参数无效的错误

当该行打开时,将生成.mp4文件。持续时间>5分钟,而输入文件长度为11秒。它不能在我的mac上使用VLC播放(似乎已损坏)。我发现以下错误(我粘贴了其中的一些错误,可以找到完整的轨迹,这里太长,无法引用):


知道如何简单地将mkv转换成mp4吗?我不知道为什么会发生错误。我声明该文件不是aac,但linux使用这种编码,因此它应该是有效的。

我已经检查了您的文件。我看到的主要问题是:

  • 没有音频比特率(即:应设置128kbps)
  • 不知怎的,元数据将AAC版本列为4(这是什么意思??)
  • 编解码器ID应该是
    40
    ,但在MKV的元数据中,它被列为
    A_AAC/MPEG4/LC
  • 字节中没有通道位置的标志(即:前L+R)
总之,ffmpeg(命令行)转换了您的MKV,没有任何错误。
请告知此新的版本是否适合您

ffmpeg设置很简单:
ffmpeg-i mkv_demo.mkv-c:v copy demo_new.mp4


不幸的是,我没有在iOS中编码,所以我无法向您显示“固定”代码。也许以后有人可以帮忙。查看另一个以获得额外提示(使其像上面显示的命令行代码片段一样工作)

所有错误都来自一个东西,即所谓的AAC音频。是否可以将临时链接放到MKV文件以进行分析?@VC.One当然可以,谢谢!:)这里是小(4MB)mkv文件的链接:@Vive我只是想知道你是如何集成这个库的,因为我也需要集成这个库。我无法集成这个库。你能帮帮我吗?谢谢你advance@AkshaykumarMaldhure我使用过私有CoCoapod,但为了方便起见,您可以将安装步骤放在项目自述文件的顶部。@Vive是的,我也这么做了,但没有成功,您能帮我安装吗,就像我遵循的第一步一样,git submodule add Submodules/FFmpegWrapper没有添加include和lib文件夹。这对我来说是非常重要的得到这个集成。嗨VC。首先,感谢你的深入帮助!您是如何检查以下所有信息的?您使用了哪个程序?最好是知道如何钓鱼,而不是得到一条鱼:)。再一次,我真的很感谢你的帮助,因为我对音频格式知之甚少,这给了我一个深刻的教训。重新编码的MP4工作正常。我将尝试更新元数据,然后进行转换。此外,我还尝试检查codecID信息,
A_AAC/MPEG5/LC
似乎根据以下条件有效:。为什么它是无效的?虽然你的答案是有效的,但我刚刚结束了使用C实现,它成功了。看来我试着用的包装纸是无效的。很高兴为你修好了。鱼的比喻是明智的。。对于未来的媒体分析,您可以尝试MediaInfo(免费软件工具)。还可以选择FFprobe(FFmpeg的一部分)。我还碰巧熟悉MP4和AAC字节,所以我可以在一些十六进制编辑器中直接检查文件字节。
int streamInfoValue = avformat_find_stream_info(inputFormatContext, NULL);
[aac @ 0x7ff07c00b000] More than one AAC RDB per ADTS frame is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
[aac @ 0x7ff07c00b000] channel element 0.0 is not allocated
[aac @ 0x7ff07c00b000] Sample rate index in program config element does not match the sample rate index configured by the container.
[aac @ 0x7ff07c00b000] Inconsistent channel configuration.
[aac @ 0x7ff07c00b000] get_buffer() failed
[aac @ 0x7ff07c00b000] channel element 3.10 is not allocated
[aac @ 0x7ff07c00b000] Reserved bit set.
[aac @ 0x7ff07c00b000] invalid band type
[aac @ 0x7ff07c00b000] Number of scalefactor bands in group (50) exceeds limit (41).
[aac @ 0x7ff07c00b000] Reserved bit set.
[aac @ 0x7ff07c00b000] Number of bands (7) exceeds limit (4).
[aac @ 0x7ff07c00b000] Reserved bit set.
[aac @ 0x7ff07c00b000] Dependent coupling is not supported together with LTP