Слишком долгая потоковая передача AVPlayer, когда сервер находится далеко - PullRequest
1 голос
/ 11 апреля 2019

Я использую проигрыватель для iOS, используя AVPlayer. Я использую ссылку на бэкэнд-сервис, который возвращает 301 и перенаправляет на ссылку на песню в 7Digital.

Задержки в Испании (где я нахожусь): пинг до бэкэнда: 40 мс ping to 7Digital: 20 мс

Когда я играю песню в Испании, для начала воспроизведения требуется 2 секунды.

По какой-то причине, если я проигрываю эту песню из Сингапура, для начала воспроизведения требуется 8 секунд. В эти 8 секунд AVPlayer.reasonForWaitingToPlay равен AVPlayerWaitingWhileEvaluatingBufferingRateReason, пока не начнет играть.

Задержки в Сингапуре:

пинг до бэкэнда: 360 мс. ping to 7Digital: 300 мс.

Я пробовал с разными игроками, такими как VLCKit и StreamingKit, с одинаковыми результатами.

Также я пробовал с [player playImmediatelyAtRate:1] и player.automaticallyWaitsToMinimizeStalling=false; с такими же результатами.

Если я использую эту песню: [http://techslides.com/demos/samples/sample.mp3][1],, это займет 4 секунды, чтобы начать играть в Сингапуре, и 2,5 секунды в Испании.

ping для techslides.com из Сингапура: 500 мс. ping для techslides.com из Испании: 150 мс.

Если я проигрываю эту песню из браузера, она не задерживается как в Испании, так и в Сингапуре.

Есть идеи, что здесь происходит? Это действительно сбивает с толку.

Редактировать:

Это код, который я использую:

    NSURL *url = [[NSURL alloc] initWithString:urlString];
    AVAsset *asset = [AVURLAsset URLAssetWithURL:url options:nil];
    AVPlayerItem *anItem = [AVPlayerItem playerItemWithAsset:asset];
    player.automaticallyWaitsToMinimizeStalling=false;
    player = [AVPlayer playerWithPlayerItem:anItem];
    [player addObserver:self forKeyPath:@"status" options:0 context:nil];
    [player addObserver:self forKeyPath:@"timeControlStatus" options:0 context:nil];

    //[player play];
    [player playImmediatelyAtRate:1];

...