2016-12-24 3 views
0

Le patron m'a remis un peu un défi qui sort un peu de mon état d'esprit habituel et j'ai de la difficulté à identifier les technologies/projets que je devrais utiliser. (Je ne me dérange pas, j'ai demandé quelque chose de 'nouveau' :)Quelles technologies dois-je utiliser pour produire un flux WebM en direct à partir d'une série de bitmaps en mémoire?

Travail: Construire un processus serveur .NET qui peut prendre un bitmap à partir d'un tampon 10 fois par seconde et produire/servir une vidéo 10fps flux pour affichage dans un navigateur HTML5 compatible HTML5.

Quels blocs de Lego dois-je rechercher ici?

Dave

Répondre

2

Vous aurez envie d'utiliser FFmpeg. Voici le flux de base:

Your App -> FFmpeg STDIN -> VP8 or VP9 video wrapped in WebM 

Si vous diffusez dans ces images, sans doute la meilleure chose à faire est de décoder le bitmap en RVB brutes ou bitmap RGBA, puis écrire chaque image à STDIN de FFmpeg. Vous devrez d'abord lire le premier bitmap pour déterminer les informations de taille et de couleur, puis exécuter le processus fils FFmpeg avec les paramètres corrects. Lorsque vous avez terminé, fermez le tube et FFmpeg finira votre fichier de sortie. Si vous le souhaitez, vous pouvez même rediriger le STDOUT de FFmpeg vers un stockage blob sur S3 ou autre.

Si toutes les images sont téléchargées à la fois et puis vous créez la vidéo, c'est encore plus facile. Faites juste une liste des fichiers dans l'ordre et exécutez FFmpeg. Lorsque FFmpeg est terminé, vous devriez avoir une vidéo. Un bit d'information supplémentaire qui vous aidera à comprendre comment créer une ligne de commande FFmpeg: WebM est un format de conteneur. Il ne fait que suivre le nombre de flux vidéo, le nombre de flux audio, les codecs à utiliser pour ces flux, les sous-titres, les métadonnées (comme les vignettes), etc. WebM est essentiellement Matroska (.mkv), mais avec certaines fonctionnalités sont désactivées pour faciliter l'adoption de la norme WebM par les concepteurs de navigateurs. Au sein de WebM, vous aurez besoin d'au moins un flux vidéo. VP8 et VP9 sont des codecs très compatibles. Si vous voulez ajouter de l'audio, Opus est un codec standard que vous pouvez utiliser.

Quelques ressources pour vous aider à démarrer:

+0

Un indice sur comment je vais de ST ffmpeg DOUT à un navigateur? – davecove

+0

@davecove Vous souhaitez diffuser la sortie directement dans un navigateur? Il suffit de diriger le flux vers le flux client. Cela fait plusieurs années que j'ai utilisé .NET, mais c'est quelque chose comme ça. Assurez-vous que l'en-tête de votre type de contenu est correct et que vous utilisez un codage de transfert en bloc. – Brad