【问题标题】:AVAssetReader Crash: tracks must all have media type AVMediaTypeAudio'AVAssetReader Crash:轨道必须都具有媒体类型 AVMediaTypeAudio'
【发布时间】:2013-03-13 22:12:24
【问题描述】:

我正在阅读 AVURLAsset 并通过以下调用初始化阅读器

AVAssetReaderOutput *assetReaderOutput =
[AVAssetReaderAudioMixOutput
 assetReaderAudioMixOutputWithAudioTracks:songAsset.tracks
 audioSettings: nil];

songAsset (AVURLAsset) 使用 MPMediaItems URLAsset 属性初始化。

我在某些资产上因此崩溃。

[AVAssetReaderAudioMixOutput initWithAudioTracks:audioSettings:] tracks must all have media type AVMediaTypeAudio'

如果 MPMediaItem 是音频资产并在 iTunes 中播放,为什么会这样?

【问题讨论】:

  • 这个文件是本地可用还是iTunes匹配歌曲?如果是后者,则需要先下载文件。 iTunes 流式传输这些文件,这就是为什么它在那里可以正常工作,但不能在您的代码中。
  • 我把这些文件都添加到本地了。
  • 我刚刚看到它是 .mov 文件。如何检查 AVMediaTypeAudio?
  • 只要做 AVURLAsset* 资产 = [[AVURLAsset alloc]initWithURL:url options:nil]; if ([[asset trackingWithMediaType:AVMediaTypeAudio] count] == 0) NSLog(@"这个文件没有音频");

标签: ios avassetreader


【解决方案1】:

使用[songAsset tracksWithMediaType:AVMediaTypeAudio] 代替songAsset.tracks。某些资产具有视频和音频轨道,例如 iTunes 音乐视频。

试试这个

NSArray <AVassetTrack *> *audioTracks = [songAsset tracksWithMediaType: AVMediaTypeAudio];
assetReaderOutput = [AVAssetReaderAudioMixOutput assetReaderAudioMixOutputWithAudioTracks: audioTracks
                                                                            audioSettings: nil];

【讨论】:

    猜你喜欢
    • 2022-08-21
    • 2023-03-24
    • 1970-01-01
    • 2011-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多