Как уменьшить отсечку при воспроизведении аудио через airplay?

При воспроизведении звука с устройства iOS, подключенного к Apple TV через AirPlay (используя iOS9.2), первая секунда воспроизведения звука обрывается. Это нежелательное поведение характерно не для конкретного приложения, а для всей системы (например, в официальных приложениях Apple тоже есть эта ошибка).

См. https://forums.developer.apple.com/thread/28086.

Есть ли обходной путь, позволяющий воспроизвести полную версию audio file? Например, добавить blank sounds перед воспроизведением файла? Или изменить то, как называется API? Или мне ждать официального исправления Apple?


person echo    schedule 11.12.2015    source источник
comment
В любом случае следует дождаться исправления. Но рассмотрим этот хак. Если ваш звук не звучит в течение первых двух секунд, то есть добавьте пустой звук длиной две секунды к исходному звуку, чтобы можно было обмануть икоту синхронизации между приложением и телевизором. Используйте для этого гаражную ленту. Или используйте многопоточность в своем приложении, например GCD. dispatch_async для асинхронных операций.   -  person Kumar Utsav    schedule 30.12.2015
comment
Я только что выполнил тест, используя последнюю версию (по состоянию на 20160217) iOS 9.3 beta 3 (13E5200d). Отсечка появляется только в первый раз, а не при последующем воспроизведении звука. Это контрастирует с iOS 9.2, которая происходит при каждом воспроизведении аудио.   -  person chubao    schedule 17.02.2016


Ответы (1)


  1. Эта проблема не возникает ни в одном из текущих выпусков iOS, поэтому мое первое предложение — обновиться.
  2. Если вы должны использовать iOS 9.2, я бы посоветовал воспроизвести пустой аудиофайл в течение 2 секунд, а затем запустить полный аудиофайл.

Образец кода:

audioPlayer.actionAtItemEnd = AVPlayerActionAtItemEndNone; 

[[NSNotificationCenter defaultCenter] addObserver:self
                                               selector:@selector(playEnded:)
                                                   name:AVPlayerItemDidPlayToEndTimeNotification
                                                 object:[audioPlayer currentItem]];

- (void)playEnded:(NSNotification *)notification
{
    // Start the full audio file here
}
person Mark McCorkle    schedule 25.12.2016