Я пытаюсь воспроизвести транспортный поток из файла m3u8. Мое требование состоит в том, чтобы обработать загруженные данные, прежде чем передавать их в AVPlayer. Для этого я использую прокси-сервер [GCDWebserver] для перехвата всех запросов. На прокси-сервере я буду загружать данные, обрабатывать их и возвращать обратно.
Мне удалось загрузить медиафайл, а также попытаться вернуть данные с помощью GCDWebServerDataResponse(data: apiData, contentType: apiResponse.mimeType ?? ""). Но плеер не воспроизводит медиаконтент.
Я использую GCDWebserver в качестве прокси-сервера.
Я создал экземпляр AVPlayerItem со следующим URL-адресом http://34.55.7.151:8080/, который на самом деле мои локальные серверы IP и номер порта.
/// Инициализировать элемент AVPlayer
let url = URL(string: "http://10.155.177.151:8080/")! let playerItem = AVPlayerItem(url: url) player = AVPlayer(playerItem: playerItem) player.automaticallyWaitsToMinimizeStalling = false let playerViewController = AVPlayerViewController() playerViewController.player = player DispatchQueue.main.async { self.present(playerViewController, animated: true) { playerViewController.player!.play() } }
/// Обработчик HTTP-прокси
webServer.addDefaultHandler(forMethod: "GET", request: GCDWebServerRequest.self) { (request, completion) in
let mediaUrl = URL(string: "http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4")!
if self.session == nil {
self.session = URLSession(configuration: URLSessionConfiguration.default)
}
let dataTask = self.session?.dataTask(with: mediaUrl, completionHandler: { (data, response, error) in
if let apiData = data, let apiResponse = response {
completion(GCDWebServerDataResponse(data: apiData, contentType: apiResponse.mimeType ?? ""))
} else {
completion(GCDWebServerDataResponse(text: "Error"))
}
})
dataTask!.resume()
}