2012-06-19 7 views
4

Я использую AVPlayer для воспроизведения в прямом эфире (файл m3U8). Он отлично работает с AVPlayer, но я не могу отключить его.Отключить звуковые дорожки в прямом эфире с помощью AVPlayer

Я использую следующий код для отключения звука.

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]; 

С тем же кодом я способный отключить локальные видео файлы, а также прогрессивные ссылки на видео, которые я играю в одном коде AVPlayer.

(может быть для живого потокового видео, треки доступны в случае AVPlayer можно установить громкость ZERO, но следующие буферные дорожки свежие с объемом, я прав или какие-либо другие причины?)

Кто-нибудь есть какие-либо идеи по этому вопросу вопрос. Любая помощь в этом очень заметна.

+0

У кого-то есть указатели .. возможно ли это или невозможно? Я прошел через все источники, согласно моей информации, которую я получил, это невозможно в iOS. Верно? – macpandit

+0

Я захлопнул мою голову в свой рабочий стол полтора дня и не придумал решение. Я проверил каждую релевантную документацию по объектам, о которой я могу думать. Я попробовал решение, упомянутое выше (как рекомендовано Apple), а также попытался установить для AVPlayerItemTrack значение NO. Ничто не работает. Если у кого-нибудь есть предложения, я бы с удовольствием узнал. –

ответ

3

Ваше предположение верно. Вы не можете отключить плеер, который воспроизводит потоки HTTP Live. Я написал об этом РАДАР.

В моем приложении мы управляем потоками, поэтому мы создали поток без звука и идентичный поток со звуком и переключаемся между 2 для включения и выключения звука. Это лучшее, что вы можете сделать.

Решение AVAudioMix не работает в режиме реального времени. Я пытался. Посмотрите на записку на дно, что говорит, что это работает только на активы файлов на основе: http://developer.apple.com/library/ios/#qa/qa1716/_index.html

Это выглядит как Mac Разработчики получают немую собственность на их AVPlayer, но IOS не имеет еще.

На данный момент вам придется обойти проблему в своих потоках, если сможете.

+0

Да. Верно. Мне не удавалось делать то же самое с клиентской стороны. Мы должны работать вокруг потока, чтобы достичь того же. – macpandit

+0

@ComPuff мы используем ту же технику в наших потоках. то есть с аудиопотоком и потоком без звука, с которым мы меняем звуковые дорожки между ними. Однако проблема, с которой мы сталкиваемся, заключается в том, что при изменении звуковых дорожек мы получаем все видео для загрузки в течение нескольких секунд - что прерывает видео в реальном времени! Это тот же случай, который вы получаете? – GameDev

+1

Да, буферизация видео при переключении потоков является проблемой. Хорошая новость: Apple добавила «объем» и «отключила» в качестве свойств на AVPlayer для iOS 7. – CornPuff

1

В качестве обходного пути вы можете использовать класс MPVolumeView для регулировки громкости любого видео. Это позволит пользователю отключить видео, если захочет. Но вряд ли вы не сможете настроить внешний вид этого слайдера, не используя недокументированный 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];