Mute audio tracks of live streams using AVPlayer

拟墨画扇 提交于 2019-12-19 03:44:05

问题


I am using AVPlayer to play live stream (m3U8 file). It plays perfectly using AVPlayer but I am not able to mute it.

I am using following code to mute the audio.

NSMutableArray *allAudioParams = [NSMutableArray array];
for (AVPlayerItemTrack *track in _player.currentItem.tracks)
{
    if ([track.assetTrack.mediaType isEqual:AVMediaTypeAudio])
    {
        AVMutableAudioMixInputParameters *audioInputParams =    [AVMutableAudioMixInputParameters audioMixInputParameters];
        [audioInputParams setVolume:0.0 atTime:kCMTimeZero];
        [audioInputParams setTrackID:[track.assetTrack trackID]];
        [allAudioParams addObject:audioInputParams];
    }
}

AVMutableAudioMix *audioZeroMix = [AVMutableAudioMix audioMix];
[audioZeroMix setInputParameters:allAudioParams];
[[_player currentItem] setAudioMix:audioZeroMix];

With the same code I able to mute the local video files as well as progressive video urls which I am playing in same AVPlayer code.

(may be for live stream video , tracks available in AVPlayer instance can be set volume ZERO but next buffering tracks are fresh with volume, am i right or any other reasons?)

Anybody have any idea on this issue. Any help on this is highly appreciable.


回答1:


Your assumption is correct. You cannot mute a player that is playing an HTTP Live Stream. I have filed a RADAR on this.

In my app we control the streams, so we produced a stream with no audio, and an identical stream with audio, and switch between the 2 to turn on and off the sound. It's the best you can do.

The AVAudioMix solution doesn't work on live streams. I tried. Look at the note on the bottom that says it only works on file based assets: http://developer.apple.com/library/ios/#qa/qa1716/_index.html

It looks like Mac Developers get a mute property on their AVPlayer, but iOS doesn't have it yet.

For now, you will have to work around the problem in your streams, if you can.




回答2:


As a workaround you may use the MPVolumeView class to adjust the volume of any video. This will allow the user to mute the video if they desire. But unlikely you can't customize this slider's appearance without using the undocumented API.

MPVolumeView *volumeView = [[[MPVolumeView alloc] initWithFrame: CGRectMake(10, 37, 260, 20)] autorelease];

UIAlertView *volumeAlert = [[UIAlertView alloc] initWithTitle:@"Volume" message:@"" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];

[volumeView sizeToFit];
[volumeAlert addSubview:volumeView];
[volumeAlert show];
[volumeAlert release];


来源:https://stackoverflow.com/questions/11095644/mute-audio-tracks-of-live-streams-using-avplayer

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!