IOS «Картинка в картинке» неожиданно останавливается, несмотря на использование AVPlayerLooper. Как обеспечить непрерывнIOS

Программируем под IOS
Ответить
Anonymous
 IOS «Картинка в картинке» неожиданно останавливается, несмотря на использование AVPlayerLooper. Как обеспечить непрерывн

Сообщение Anonymous »

Я создаю приложение-телесуфлер, которое использует iOS «картинка в картинке» (PiP) для отображения прокручиваемого текста, пока пользователи записывают видео с помощью приложения камеры. Текст преобразуется в видео, которое воспроизводится в режиме PiP.
Проблема
Мое окно PiP неожиданно останавливается и закрывается через короткое время, хотя я реализовал AVPlayerLooper для плавного зацикливания. Консоль показывает:

Код: Выделить всё

> signalled err=-12860
⚠️ PiP stopped
Моя реализация
Я создаю 10-секундное видео с текстом, преобразованным в кадры, а затем воспроизвожу его с помощью AVQueuePlayer и AVPlayerLooper.
Настройка проигрывателя:

Код: Выделить всё

let asset = AVAsset(url: videoURL)
let playerItem = AVPlayerItem(asset: asset)
let player = AVQueuePlayer(playerItem: playerItem)

player.isMuted = false
player.volume = 0.01  // Keep audio session active
player.allowsExternalPlayback = false

// Use AVPlayerLooper for seamless looping
let templateItem = AVPlayerItem(asset: asset)
let playerLooper = AVPlayerLooper(player: player, templateItem: templateItem)

Аудиосессия:

Код: Выделить всё

let audioSession = AVAudioSession.sharedInstance()
try audioSession.setCategory(.playback, mode: .default,
options: [.mixWithOthers, .duckOthers, .allowAirPlay])
try audioSession.setActive(true)
Контроллер PiP:

Код: Выделить всё

let pipController = try AVPictureInPictureController(playerLayer: playerLayer)
pipController.delegate = self
pipController.requiresLinearPlayback = true
pipController.startPictureInPicture()

Что происходит
PiP успешно запускается и работает некоторое время после свертывания приложения.
Он внезапно завершается с ошибкой -12860.
Похоже, что видео завершается, несмотря на наличие AVPlayerLooper.
Вопросы
Почему PiP останавливается даже при использовании AVPlayerLooper?
Должен ли я делать четкую ссылку на playerLooper?
Не слишком ли мало 10 секунд? Будет ли 30–60 секунд более стабильным?
Бонус
Как приложения конкурентов динамически выделяют текст в PiP?
Используют ли они AVSampleBufferDisplayLayer?
Среда
iOS 16.2+ / iPhone 15 Pro Max
Swift 5 / SwiftUI
AVFoundation, AVKit
Будем благодарны за любую помощь!

Подробнее здесь: https://stackoverflow.com/questions/798 ... per-how-to
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»