[PYTHON] Prend en charge le streaming compatible iOS en privé (avec restrictions)

Cet article est une suite relative à Video Stream on AWS S3 + CloudFront.

Objectif

Méthode

L'annonce des JAWS Days 2014 explique comment procéder.

Il est décrit à la page 17 de Livraison sécurisée de contenu et suivi des effets réalisé par CloudFront.

Générer une URL signée

L'URL signée génère une URL unique pour chaque URL et annule la navigation pendant un certain temps, mais vous pouvez spécifier l'URL avec un caractère générique et l'utiliser pour signer une signature valide pour le répertoire contenant le fichier .ts. Il semble que vous puissiez l'obtenir.

http://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/private-content-creating-signed-url-custom-policy.html

Dans le cas de boto (module Python), il peut être créé en donnant policy_url (str) à la méthode create_signed_url. http://boto.readthedocs.org/en/latest/ref/cloudfront.html

Réécriture du fichier manifeste

Selon le document JAWS Days présenté précédemment, l'URI du fichier .ts dans le fichier manifeste avec l'extension .m3u8 est réécrit en URL signée en ajoutant un domaine.

Cela est possible si vous faites cela de manière dynamique au moment de regarder la vidéo.

Le fichier manifeste avait le format simple suivant, il semble donc bon de réécrire la ligne qui ne commence pas par "#". (Réalisable avec un analyseur simple)

Exemple de fichier manifeste.m3u8


#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:11
#EXTINF:10.866922,
hls_400_00000.ts
#EXTINF:10.817778,
hls_400_00001.ts
#EXTINF:10.815044,
hls_400_00002.ts
.
.
.
#EXT-X-ENDLIST

Réécriture dynamique du fichier manifeste

Je m'inquiète de savoir où et quand faire cela ...

En tant que méthode à l'étude, le serveur d'applications (en supposant que Plone cette fois) acquiert le manifeste d'origine de S3 (ou CloudFront), le réécrit dans une URL signée et le distribue.

Il semble nécessaire de considérer combien cette réécriture est ajoutée chaque fois que l'URL est accédée. En particulier, dans le cas d'un accès PC, cette conversion n'est pas nécessaire car la navigation se fait avec RTMP au lieu de HLS.

Si cela est fait lors de l'accès au fichier manifeste du serveur d'application, il peut n'y avoir aucun problème car il n'est pas nécessaire de le convertir sans précaution au moment de RTMP. (Video.js sélectionnera deux sources, donc j'ai l'impression que ça va)

Résumé

En intégrant diverses technologies, je pense que nous sommes dans une situation où il semble possible de mettre en œuvre les fonctions souhaitées. En fait, je vais essayer d'expérimenter cette méthode de streaming.

TODO

Recommended Posts

Prend en charge le streaming compatible iOS en privé (avec restrictions)
Restriction IP avec Flask