1

我正在开发一个应用程序,它一次在屏幕上显示 3 个实时视频源。为此,我在 AVFoundation 框架中使用 AVPlayer。

但是,要求视频仅在单击并选择后才输出音频。目前,我可以同时播放视频和音频。

因此,我试图创建一种方法来使每个 AVPlayer 上的音频静音。

我已经搜索了各种线程来寻找答案,但到目前为止还没有找到任何答案。

我最接近创建它的是通过 AVAssestTrack 获取提要中的音轨,并通过 AVMutableAudioMix 更改音量。

但是,我在我的音轨数组中取回了 0 个项目!

请有人看看我的代码,看看我在哪里犯了错误,或者是否有更好的方法来做到这一点?

谢谢你的帮助!

- (IBAction)touchVolumeButton:(id)sender {

float volume = 0.0f;

AVPlayerItem *currentItem = self.player.currentItem;
NSArray *audioTracks = [currentItem.asset tracksWithMediaType:AVMediaTypeAudio];

NSMutableArray *allAudioParams = [NSMutableArray array];

for (AVAssetTrack *track in audioTracks) {
    AVMutableAudioMixInputParameters *audioInputParams =
    [AVMutableAudioMixInputParameters audioMixInputParameters];
    [audioInputParams setVolume:volume atTime:kCMTimeZero];
    [audioInputParams setTrackID:[track trackID]];
    [allAudioParams addObject:audioInputParams];
}

if ([allAudioParams count] > 0) {
    AVMutableAudioMix *audioMix = [AVMutableAudioMix audioMix];
    [audioMix setInputParameters:[NSArray arrayWithObject:allAudioParams]];
    [currentItem setAudioMix:audioMix];

    AVAssetExportSession *session = [AVAssetExportSession exportSessionWithAsset:currentItem.asset presetName:@"current"];
    session.audioMix = audioMix;
}
}
4

1 回答 1

0

请注意,根据 Apple,您只能使用基于文件的资产AVMutableAudioMix以这种方式控制音量。这不适用于流媒体。

请参阅以下技术说明:

https://developer.apple.com/library/content/qa/qa1716/_index.html

我已经在 iOS 11 上确认这不适用于流媒体,结果相同(返回一个空的轨道数组)。

于 2017-12-14T23:13:00.037 回答