使用MPMoviePlayerController播放视频时如何静音/取消静音?

Cam*_*oft 10 mute mpmovieplayercontroller ios avaudiosession ios6

我已经创建了自己的自定义控件来使用MPMoviePlayerController.到目前为止,一切都有效,除了静音按钮控制.

AVAudioSession在创建我的实例之前,我已经使用以下代码进行了配置MPMoviePlayerController.

    NSError *modeError = nil;
    [self.audioSession setMode:AVAudioSessionModeMoviePlayback error:&modeError];
    if (modeError != nil) {
        NSLog(@"Error setting mode for AVAudioSession: %@", modeError);
    }

    NSError *categoryError = nil;
    [self.audioSession setCategory:AVAudioSessionCategoryPlayback error:&categoryError];
    if (categoryError != nil) {
        NSLog(@"Error setting category for AVAudioSession: %@", categoryError);
    }
Run Code Online (Sandbox Code Playgroud)

然后在我的静音按钮回调方法中,我有以下代码:

    NSError *activeError = nil;
    [self.audioSession setActive:NO error:&activeError];
    if (activeError != nil) {
        NSLog(@"Error setting inactive state for AVAudioSession: %@", activeError);
    }
Run Code Online (Sandbox Code Playgroud)

单击"静音"按钮时,出现以下无用错误:

Error Domain=NSOSStatusErrorDomain Code=560030580 "The operation couldn’t be completed. (OSStatus error 560030580.)"
Run Code Online (Sandbox Code Playgroud)

我正在链接到AVFoundation框架.

这真的开始让我烦恼,因为我无法为我的生活找到一种方法来减少或静音我的应用程序的播放音​​频.

我不想仅根据AVAudioSession AVAudioSessionCategoryPlayback类别定义的应用程序级别更改系统全局卷.

看来你可以设置AVAudioPlayer但不是的音量MPMoviePlayerController.我看到这里上的其他职位,说刚刚创建的实例,AVAudioPlayer并定容,但这只是导致我的应用程序崩溃,我希望它我没有使用有事情做与事实initWithContentsOfURL:error:或者initWithData:error:,而是使用`在里面'.

任何帮助,将不胜感激.

Cam*_*oft 10

与Apple技术人员交谈后发现,无法使用控制或静音音频MPMoviePlayerController.

相反,您必须使用AVFoundations AVPlayer类创建自己的控制器.

一旦您使用它,就可以创建自定义音频混合并设置音量.它实际上工作得很好.

示例代码:

    AVURLAsset * asset = [AVURLAsset URLAssetWithURL:[self localMovieURL] options:nil];
    NSArray *audioTracks = [asset tracksWithMediaType:AVMediaTypeAudio];

    // Mute all the audio tracks
    NSMutableArray * allAudioParams = [NSMutableArray array];
    for (AVAssetTrack *track in audioTracks) {
            AVMutableAudioMixInputParameters *audioInputParams =[AVMutableAudioMixInputParameters audioMixInputParameters];
            [audioInputParams setVolume:0.0 atTime:kCMTimeZero ];
            [audioInputParams setTrackID:[track trackID]];
            [allAudioParams addObject:audioInputParams];
    }
    AVMutableAudioMix * audioZeroMix = [AVMutableAudioMix audioMix];
    [audioZeroMix setInputParameters:allAudioParams];

    // Create a player item
    AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:asset];
    [playerItem setAudioMix:audioZeroMix]; // Mute the player item

    // Create a new Player, and set the player to use the player item
    // with the muted audio mix
    AVPlayer *player = [AVPlayer playerWithPlayerItem:playerItem];

    self.mPlayer = player;

    [mPlayer play];
Run Code Online (Sandbox Code Playgroud)

我写了一个MPMoviePlayerController替换类,增加了对音量级别的支持.我将很快上传到github,并在这篇文章中添加链接.