web-dev-qa-db-fra.com

Insertion de métadonnées dans un flux vidéo en direct

Je veux réaliser ce qui suit, mais on ne sait toujours pas si cela est possible.


Le scénario actuel:

Quelqu'un diffuse une vidéo avec audio via OBS vers un serveur multimédia, les clients se connectent via un site Web.

[Flux OBS/Flux vidéo] -> [AWS/Service de diffusion externe] -> Clients


Le scénario recherché:

capturez ce flux via un serveur multimédia personnalisé et manipulez-le en injectant certaines métadonnées à certains moments pendant le livestream . Notez l'importance de live .

[OBS Stream/Video Stream] -> [My Custom Node.js Server to insert metadata] -> [AWS/External Streaming Service] -> Clients


L'idée:

L'idée est que je veux synchroniser le flux avec une fenêtre contextuelle par exemple. Le flux de protocole par défaut semble être RTMP d'OBS, mais peut-être que cela peut être changé. À un moment donné pendant le livestream, un lecteur vidéo html5 sur le site Web peut lire ces balises à partir du livestream (via une bibliothèque supplémentaire telle que video.js) et dire à l'application JS d'afficher du texte. Au final, cela se résume à synchroniser le flux vidéo sur un flux texte (par exemple à partir d'une connexion websocket)

Solutions potentielles:

  • Balises ID3. J'ai lu sur les balises ID3 dans les fichiers MP3, mais cela ne semble pas être ce que je cherche car il a besoin d'un fichier .mp3 complet à l'avance et est non utilisé pour les flux ( Injecter dynamiquement ID3 dans FFMPEG Live Stream ). Ce que je veux, c'est injecter dynamiquement des métadonnées dans ce flux. Par exemple, injectez à tout moment un identifiant (choisi dynamiquement) dont les références à une base de données par exemple devraient suffire.

  • LTC/Linear Time Code/SMPTE est-il possible d'intégrer cela dans un flux vidéo avec node.js? cela me permettrait de faire correspondre les horaires avec un identifiant sur le client.

Est-ce possible de le faire étant donné un flux vidéo entrant avec audio? et si oui, quel est le format du flux et comment injecter des métadonnées?


[~ # ~] edit [~ # ~] : il semble que RTMP n'est pas pris en charge sans flash dans le navigateur. Ceci est interdit, je devrai donc utiliser un autre format de flux tel que HLS/FLV?

6
Captain Obvious

On dirait utiliser quelque chose comme Liquidsoap car votre serveur de streaming ferait l'affaire pour insérer les métadonnées dans le flux. De nombreuses options pour manipuler les métadonnées à explorer.

En ce qui concerne le décodage côté client, vous pouvez peut-être utiliser un flux lisible en javascript dans un service worker pour diviser la sortie du serveur en métadonnées/vidéo et traiter comme bon vous semble.

J'ai fait une chose similaire pour le traitement des métadonnées intrabande sur un flux mp3 infini qui pourrait vous donner des idées sur par où commencer. Vous pouvez trouver le code pour cela ici

4
miknik