Para implementar FairPlay Streaming en su aplicación TVSDK, debe escribir un Resource Loader, que enviará una solicitud de adquisición de licencia a su servidor FairPlay Streaming.
El código del cargador de recursos es responsable de las siguientes tareas:
Por ejemplo, si utiliza la DRM de Adobe de Primetime Cloud con tecnología ExpressPlay, el cargador de recursos envía la solicitud a:
https://fp-gen.service.expressplay.com
El cargador de recursos da formato a la solicitud y adjunta un token de ExpressPlay que autoriza la reproducción en la dirección URL. Al adquirir el token de ExpressPlay, hay varias opciones que se deben tener en cuenta. Estas opciones están determinadas por la forma en que empaquetó el contenido.
Al empaquetar el contenido, el empaquetador inserta lo siguiente skd:
URL en su manifiesto M3U8. Después del skd:
, puede colocar cualquier dato en el manifiesto. Puede utilizar estos datos en el código de la aplicación para completar las tareas enumeradas anteriormente. Por ejemplo, puede utilizar skd:{content_id}
para que la aplicación pueda determinar el ID del contenido que se está reproduciendo y solicitar un token para ese contenido específico. También puede, por ejemplo, utilizar skd:{entitlement_server_url}?cid={content_id}
, de modo que la aplicación no necesite tener codificada la URL del servidor de autorizaciones.
Es posible que no necesite ninguna información en su skd:
URL si, al iniciarse la reproducción, ya conoce el ID de contenido a través de otros canales. El segundo ejemplo es una solución ideal para probar la configuración, pero también puede utilizarlo en un entorno de producción.
Usted determina el formato de skd:
.
El contenido se obtiene mediante las skd:
protocolo, pero la solicitud de licencia utiliza https:
. Las opciones más comunes para hacer frente a estos protocolos son:
Prueba inicial de reproducción de extremo a extremo Al empaquetar el contenido, seleccione una skd:
URL. Al probar la aplicación, adquiera manualmente una licencia de ExpressPlay y codifique la licencia (un https:
URL) y URL de contenido en el cargador.
Por ejemplo:
NSString* const PLAYLIST_URL =
@"https://{your_content_URL}/{your_manifest}.m3u8";
NSString* const EXPRESSPLAY_TOKEN =
@"https://fp.service.expressplay.com:80/hms/fp/rights/?
ExpressPlayToken={copy_your_token_to_here}";
La mayoría de los otros casos Al empaquetar el contenido, seleccione una skd:
URL que representa de forma exclusiva el ID del contenido. En el cargador, analice skd:
URL, envíela al servidor para adquirir un token y utilice el token resultante como URL.
Por ejemplo:
- (BOOL)resourceLoader:(AVAssetResourceLoader *)resourceLoader
shouldWaitForLoadingOfRequestedResource:(AVAssetResourceLoadingRequest *)loadingRequest {
NSURL *url = [[loadingRequest request] URL];
if (![[url scheme] isEqual:@"skd"])
return NO;
NSString *strUrl = [url absoluteString];
NSLog(@"url is: %@", strUrl);
strUrl = [strUrl stringByReplacingOccurrencesOfString:@"skd://" withString:@"https://"];
NSData *assetId;
NSData *requestBytes;
NSError* error = nil;
BOOL handled = NO;
NSData *responseData = nil;
assetId = getMyAssetIdentifierFromURL(url);
/* Usecase 1: "On Premise Fairplay Server"
* Set the strUrl to the OnPremise Fairplay Server Url. The OnPremise Fairplay
* Server Url is either hardcoded in the App or derived from strUrl.
*/
#if 0
// Insert your use case 1 codes here:
// strUrl = getOnPremiseServerUrl(strUrl, assetId);
#endif //
/* Usecase 2: The strUrl is the entitlement server.
* Send assetId to the entitlement server; if the user is allowed to playback
* the content, the entitlement server will send back an ExpressPlay Token Url.
*/
#if 0
// The hardcoded SEES server:
strUrl = @"https://10.0.248.85:8080/sees/SEESServlet";
// You can use the following code to simulate a device binding entitlement
// request:
// First, invoke getExpressPlayTokenUrlFromEntilementServer with
// bEnforceDeviceID set to false. When you play the content, the device_id
// will be registered on the ExpressPlay Server. Now change code to set
// bEnforceDeviceID to true, and rerun the program. The ExpressPlay token
// sent back by the SEES server will be device bound.
// The strUrl returned below is the ExpressPlay Token URL.
strUrl = getExpressPlayTokenUrlFromEntilementServer(strUrl, assetId, true, &error);
#endif
/* Usecase 3: The strUrl is already the ExpressPlay Token Url.
*/
// Read in the certificate
NSLog(@"Get Application Certificate");
NSString* certPath = [[NSBundle mainBundle] pathForResource:@"my_certificate.cer"
ofType:nil];
NSData *appCert = [NSData dataWithContentsOfFile:certPath];
// To create the request blob for the server:
requestBytes = [loadingRequest streamingContentKeyRequestDataForApp: appCert
contentIdentifier:assetId
options:nil
error:&error];
if (requestBytes == nil) {
NSLog(@"Error creating server request: %@", error);
return false;
}
// Per the specification, send requestBytes along with the assetId to the Key
// Server and obtain the response.
NSError *err;
responseData = getCKCFromExpressPlayService( strUrl, requestBytes, assetId, &err);
if (responseData != nil) {
NSLog(@"Get response data: ");
[loadingRequest finishLoadingWithResponse:nil
data:(NSData *)responseData
redirect:nil];
}
else {
[loadingRequest finishLoadingWithError:err];
NSLog(@"bad key response");
}
handled = YES;
bail:
return handled;
}
Puede implementar Apple FairPlay Streaming, que es la solución DRM de Apple, en sus aplicaciones TVSDK.
Cree su cargador de recursos para clientes de FairPlay implementando PTAVAssetResourceLoaderDelegate
.
Para obtener más información, consulte Apple FairPlay en aplicaciones TVSDK.
Asegúrese de seguir las instrucciones de la Guía del programa de transmisión FairPlay ( FairPlayStreaming_PG.pdf), que se incluye en SDK de FairPlay Server para desarrollar una aplicación compatible con FPS).
El resourceLoader:shouldWaitForLoadingOfRequestedResource
es equivalente a lo que hay en AVAssetResourceLoaderDelegate
.
En el escenario del servidor de licencias ExpressPlay, para reproducir contenido, cambie el esquema URL en la URL de la solicitud de licencia del servidor ExpressPlay FairPlay desde skd://
hasta https://
(o https://
).
Registre el FairPlay Cargador de recursos del cliente con registerPTAVAssetResourceLoader
.
PTFairPlayResourceLoader *resourceLoader =
[[PTFairPlayResourceLoader new] autorelease];
[[PTDefaultMediaPlayerClientFactory defaultFactory]
registerPTAVAssetResourceLoader:resourceLoader];
Si ha escrito su propio servidor de licencias FairPlay o está utilizando un servidor de licencias FairPlay de terceros, consulte al proveedor del servidor de licencias para determinar la URL del servidor de licencias, el formato y cualquier otro requisito.