2012-03-16 25 views
16

Estoy implementando una aplicación que contiene un reproductor de video. Por alguna razón, los archivos de video están encriptados con AES, y el tamaño de estos archivos puede ser bastante grande para evitar cargarlo en la RAM como una sola pieza. Estoy buscando alguna forma de jugarlo con AVPlayer.Reproducir video cifrado con AVPlayer

intentado:

1) NSURLProtocol personalizado como se sugiere aquí http://aptogo.co.uk/2010/07/protecting-resources/ No funcionó, sugiero que AVPlayer utiliza su propio y el mío no se consiga llamar.

2) Use AVAsset para cortar video en trozos pequeños y luego alimentarlos a AVPlayer - error porque no hay API en AVPlayer para eso.

Cualquier solución sería muy apreciada :)

+0

Si tiene archivos encriptados, debemos ** al menos ** conocer el formato, etc. ¿Ha buscado crear un proxy que realice el descifrado? ¿Cuáles son sus expectativas/casos de uso (búsqueda, etc.)? –

+0

No puedo entender exactamente, ¿qué quieres decir? Usted ofrece crear un proxy, pero ¿para qué? En mi opinión, existe el siguiente algoritmo: 1. Captura datos encriptados, que AVPlayer intenta cargar por url. 2. Descifrarlo. 3. Ponga datos descifrados en AVPlayer. Es posible que sea incorrecto, porque AVPlayer no tiene ningún proveedor de datos. Pero no sé de otra manera. – Asya

+0

Puede crear un proxy web que se conecte con el contenido real y dirigir una URL a un servicio local que descifra los datos. De esta forma, puede desacoplar el cifrado/descifrado y reproducir el video. –

Respuesta

4

Tienes 2 opciones:

  1. Si IOS dirigidas a 7 y más nuevo es el registro de salida AVAssetResourceLoaderDelegate. Le permite hacer lo que haría con un NSURLProtocol personalizado pero específicamente para AVPlayer.

  2. Emule un servidor HTTP con soporte para el encabezado Range y apunte el AVURLAsset al localhost.

Implementé # 2 antes y puedo proporcionar más información si es necesario.

+0

¿Podría dar más detalles sobre 2. ? –

+0

Tengo el mismo problema. ¿Te importaría abrir tu solución, por favor? – Sauvage

+0

@JerneyStrasner ¿Podría proporcionar más información sobre el n. ° 2. He estado tratando de implementar esto usando 'CocoaHTTPServer' por años, pero mis videos que intento reproducir se vuelven un desastre después de 3 segundos de reproducción. – vaughan

3

Acabo de descargar el proyecto de muestra de Apple https://developer.apple.com/library/ios/samplecode/sc1791/Listings/ReadMe_txt.html y parece hacer exactamente lo que quiere.

El delegado capta las llamadas de AVAssetResourceLoader y crea un nuevo archivo .m3a8 con una clave de descifrado personalizada en él.
Luego alimenta al reproductor con todas las URL de archivo .ts en el m3a8.

El proyecto es una buena descripción de lo que se puede hacer con las fuentes HLS.

Cuestiones relacionadas