Реализация медиапроигрывателя с использованием AVPLayer для воспроизведения звука с удаленного URL-адреса во всплывающем окне в контроллере модального представления в Swift 4 - PullRequest
0 голосов
/ 05 сентября 2018

Извините, я сделал заголовок слишком долго, так как я пытаюсь добиться многого, пытаясь воспроизвести аудиофайл с URL-адреса, используя AVPlayer в контроллере модального представления. Я использовал базовый пример Apple - AVFoundationSimplePlayer , подправил его и добавил несколько вещей. Плеер работает нормально, но я решил несколько проблем, как описано ниже:

Вот полный исходный код Исходный код моего проекта

1) См. Скриншот ниже, я хочу, чтобы фон модального vc был прозрачным, чтобы я мог видеть представление, которое запустило это модальное представление. Refer to screenshot below

2) Задержка после загрузки модального vc и до появления всплывающего окна с выделенными элементами управления. Я не уверен, если это нормально, чтобы иметь задержку? Если это нормально, и мы ничего не можем с этим поделать, тогда я хочу добавить контроль активности в течение этого периода загрузки. Я не уверен, когда прекратить этот контроль активности.

3) Отображаются ошибки до того, как игрок загрузит элемент управления. Не уверены, что они?

2018-09-05 13: 32: 56.519014 + 0100 AVFoundationSimplePlayer-Swift [44042: 2403222] Задача . <2> завершено с кодом ошибки: -999 2018-09-05 13: 32: 57.607560 + 0100 AVFoundationSimplePlayer-Swift [44042: 2403221] Задача . <3> завершено с кодом ошибки: -999

1 Ответ

0 голосов
/ 05 сентября 2018

Я только что проверил ваш прикрепленный пример кода. Вы используете функцию play перед тем, как присвоить AVPlayerItem своему player. Вы загружаете asset асинхронно и до загрузки asset player не можете играть. Итак, что вы должны сделать

asset = AVURLAsset(url: movieURL, options: nil)

/// Just after making an asset and remove the code written in asset's setter
let item = AVPlayerItem(asset: asset!)
player = AVPlayer(playerItem: item)

/// This extra line is to playing the live url. It will play what it downloads in chunks.
if #available(iOS 10.0, *) {
    player.automaticallyWaitsToMinimizeStalling = false
} else {
    // Fallback on earlier versions
}

/// Now your player is ready to play
player.play()

РЕДАКТИРОВАТЬ 1
Если вы все еще боретесь с приведенным выше фрагментом кода, я внес изменения в файл PlayerViewController.m, чтобы исправить ваши проблемы. Вот ссылка gist этого файла. Поиск /// TheTiger Change, чтобы найти то, что я сделал изменения. Теперь я могу воспроизводить аудиофайл с правильным временем и значением ползунка.

РЕДАКТИРОВАТЬ 2
Я думал, что вы сможете увидеть разницу, но никаких проблем я объясню более подробно.

# 3. Что касается вашего сообщения об ошибке, это просто сообщение отладки Xcode, и вы можете отключить его. См. этот ответ для более подробной информации.

# 2. Задержка в представлении модального режима задерживается, потому что у вас есть весь код в вашем методе viewWillAppear:, просто переместите этот код в videDidAppear: и дайте представлению появиться первым, прежде чем что-либо делать. Это уберет задержку.

# 1. Фон модального vc должен быть прозрачным. Так что это можно сделать прозрачным. этот ответ .

Этот Пример кода просто отлично работает.

...