Temps de latence faible (< 2) vidéo en direct streaming HTML5 solutions?
Avec Chrome désactivation du Flash par défaut très rapidement, j'ai besoin pour commencer à chercher dans flash/rtmp html5 des solutions de remplacement.
Actuellement avec Flash + RTMP j'ai un flux vidéo en direct avec des < 1-2 secondes de retard.
J'ai expérimenté avec MPEG-DASH qui semble être la nouvelle norme de l'industrie pour le streaming, mais qui a tourné court avec 5 secondes de retard étant le meilleur que j'ai pu serrer.
Pour le contexte, je suis en train de permettre à l'utilisateur de contrôler les objets physiques qu'ils peuvent voir sur le stream, donc rien au-dessus d'un couple de secondes de retard conduit à une expérience frustrante.
Existe-il d'autres techniques, ou est-il vraiment pas de temps de latence faible html5 solutions pour la diffusion en direct?
alors que le projet n'est pas venu au bout du compte, nous avions réglé sur wowza.com/products/capabilities/webrtc-streaming-software
Avec MPEG-Dash 5 secondes derrière, Phoboslabs MPEG-1 d'environ 1 seconde, mais en lui donnant chaud combinés, WebRTC est une douleur de côté de serveur de le faire sur votre propre, ce fut probablement une puce et un gain de temps de décision merci de Titan.
MPEG-DASH + H. 264 + 0,5 s GOP longueur = 2-3s de retard
OriginalL'auteur Titan | 2016-05-26
Vous devez vous connecter pour publier un commentaire.
Des Technologies et des Exigences
La seule web-basée sur une technologie vraiment orientée vers une faible latence est WebRTC. Il est construit pour la vidéo conférence. Les Codecs sont à l'écoute pour de faibles temps de latence de plus de qualité. Les débits sont généralement variables, en optant pour une connexion stable sur la qualité.
Cependant, vous n'avez pas nécessairement besoin de ce temps de latence faible optimisation pour tous vos utilisateurs. En fait, d'après ce que j'ai pu rassembler sur vos besoins, à faible latence pour que tout le monde va nuire à l'expérience utilisateur. Alors que vos utilisateurs dans le contrôle du robot certainement besoin d'une faible latence vidéo, de sorte qu'ils peuvent raisonnablement contrôler, les utilisateurs n'ayant pas de contrôle n'ont pas cette exigence et peut, au lieu d'opter pour la fiabilité des vidéos de qualité supérieure.
Comment le configurer
De Contrôle des Utilisateurs de Robot de Connexion
Utilisateurs de contrôler le robot va charger une page qui utilise certaines WebRTC composants pour le raccordement de l'appareil et du serveur de contrôle. Pour faciliter WebRTC connexions, vous avez besoin d'une sorte de serveur STUN. Pour obtenir autour de NAT et d'autres restrictions de pare-feu, vous pouvez avoir besoin d'un serveur TURN. Ces deux sont généralement intégré dans le Nœud.js basé sur WebRTC cadres.
Le cam/serveur de contrôle devra également se connecter via WebRTC. Honnêtement, la meilleure façon de le faire est de rendre votre application de contrôle un peu basé sur le web. Depuis que vous utilisez Node.js déjà, découvrez NW.js ou D'électrons. Tous deux peuvent profiter de WebRTC des capacités déjà construit dans WebKit, tout en vous offrant la souplesse nécessaire pour faire tout ce que vous souhaitez avec Node.js.
Le contrôle des utilisateurs et de la came/serveur de contrôle fera un peer-to-peer connexion via WebRTC (ou ACTIVER serveur si nécessaire). À partir de là, vous aurez envie d'ouvrir un canal de médias ainsi que d'un canal de données. Les données secondaires peut être utilisé pour envoyer des commandes de votre robot. Le canal des médias seront bien sûr être utilisés pour la faible latence du flux vidéo est envoyée au contrôle des utilisateurs.
Encore, il est important de noter que la vidéo qui va être renvoyé sera optimisé pour le temps de latence, pas de qualité. Ce type de connexion assure une réponse rapide à vos commandes.
Vidéo pour l'Affichage des Utilisateurs
Les utilisateurs qui sont tout simplement la visualisation du flux et de ne pas contrôler le robot peut utiliser la vidéo normale méthodes de distribution. Il est effectivement très important pour vous d'utiliser un CDN et des services de transcodage, puisque vous aurez 10k-15k de gens qui regardent le stream. Avec de nombreux utilisateurs, vous allez probablement voulez que votre vidéo en quelques codecs différents, certainement toute une gamme de débits. De Distribution avec TIRET ou HLS est plus facile de travailler en ce moment, et vous libère de Flash exigences.
Vous voudrez probablement envoyer votre flux de services de médias sociaux. C'est une autre raison pourquoi il est important de commencer avec une haute qualité HD stream. Ces services seront de transcoder votre vidéo encore une fois, la réduction de la qualité. Si vous commencez avec une bonne qualité d'abord, vous vous retrouverez avec une meilleure qualité à la fin.
Métadonnées (chat, des signaux de contrôle, etc.)
Il n'est pas clair à partir de vos besoins quel type de métadonnées dont vous avez besoin, mais pour le petit message de base de données, vous pouvez utiliser un site web socket bibliothèque, comme Support.IO. Comme vous l'appliquer à grande échelle pour un petit nombre de cas, vous pouvez utiliser pub/sub, comme Redis, à la distribution de messages dans tout les serveurs.
Pour synchroniser les métadonnées de la vidéo dépend un peu sur ce qui est dans les métadonnées et que la demande de synchronisation est, précisément. Généralement parlant, on peut présumer qu'il y aura une option raisonnable, mais imprévisible délai entre la source vidéo et les clients. Après tout, vous ne pouvez pas contrôler combien de temps ils vont tampon. Chaque appareil est différent, chaque variable de connexion. Ce que vous pouvez supposer, c'est que la lecture commence avec le premier segment télécharge le client. En d'autres termes, si un client commence de mise en mémoire tampon une vidéo et commence à le lire 2 secondes plus tard, la vidéo est de 2 secondes derrière partir du moment où la première demande a été faite.
De détection lorsque la lecture commence en fait côté client est possible. Étant donné que le serveur sait que l'horodatage de la vidéo a été envoyée au client, il peut en informer le client de son décalage par rapport au début de la lecture vidéo. Puisque vous aurez probablement à l'aide de tableau de bord ou HLS et vous avez besoin d'utiliser MCE avec l'AJAX pour obtenir les données de toute façon, vous pouvez utiliser les en-têtes de réponse dans le segment de la réponse pour indiquer l'horodatage de début du segment. Le client peut alors se synchroniser. Permettez-moi de briser cette étape-par-étape:
Date:
en-tête peut indiquer avec exactitude la date/l'heure pour le début du segment.Date:
en-tête (disons2016-06-01 20:31:00
). Client continue de mise en mémoire tampon les segments.00:00:00
sur le lecteur vidéo est actuellement2016-06-01 20:31:00
.Cela devrait répondre à vos besoins et vous donnent la possibilité de faire ce que vous devez avec votre vidéo à aller de l'avant.
Pourquoi ne pas [magie-technologie-ici]?
Il y a des différences dans chaque approche. Je pense que ce que j'ai indiqué ici sépare les préoccupations et vous donne le meilleur compromis dans chaque zone. N'hésitez pas à demander des précisions ou poser des questions dans les commentaires.
Vous allez avoir 1k-10k utilisateurs en contrôlant simultanément les objets physiques dans le même flux? Que les sons déraisonnable. Pouvez-vous décrire plus précisément ce qu'il est spécifiquement que vous essayez de faire? Êtes-vous sûr que vous n'avez pas un petit nombre de personnes, le contrôle physique des objets (les personnes qui ont besoin de temps de latence faible) et un grand nombre de gens à regarder (ce qui pourrait avoir une latence plus élevée)? 1-2 secondes de retard avec un ruisseau qui se passe pour les utilisateurs de 10k est presque impossible. Vous aurez besoin de faire personnalisé tout essentiellement, en utilisant WebRTC sur les clients, mais dont la source est côté serveur.
Seulement 1-2 aura le contrôle simultanément, mais il pourrait y avoir des milliers à regarder. Ayant délai variable dans la nourriture pour ceux qui en contrôle vs ceux qui regardent ne serait pas acceptable car le serveur nodejs le relais des événements pour le navigateur du client pour afficher des commentaires, de la synchronisation. Voici un exemple de ce que nous avons fait dans le passé avec flash (faites défiler vers le bas pour les détails) sidigital.co/sid
Pourriez-vous élaborer un ce retour d'information est? Si tout ce que vous devez faire est de sync out-of-band événements de la vidéo, vous pouvez simplement le retard de ces événements. En fonction de votre encodage vidéo, vous même être en mesure d'utiliser le timestamp, mais je n'ai pas expérimenté de vérifier la compatibilité de navigateur à tirer sur l'horodatage de la vidéo. Côté serveur, vous devriez être en mesure de déterminer dans quelle mesure le client est derrière (dans la mesure où les données que vous lui avez envoyé), côté client et vous pouvez commencer à vous affiche tampon des événements dès que la vidéo a mis en mémoire tampon et commence à jouer.
Avec le bras robot auparavant, lorsque la personne qui contrôle le robot a laissé tomber la balle dans le trou que j'avais créer un points de bulle sur le DOM que des spectacles pour tous les utilisateurs. Les visiteurs ne contrôle pas l'expérience de la même chose que la personne responsable, sauf qu'ils n'ont pas réellement de contrôle. C'est pourquoi il est important que l'ensemble de l'expérience utilisateur en même temps de latence faible, sinon, les modifications à l'INTERFACE utilisateur pour le score, l'événement de la rétroaction, etc. n'ont pas de sens. Je ne peux pas retarder les événements pour les non joueurs, car je ne connais pas leur temps de latence, donc je cherche la latence la plus faible de tous. Il a bien fonctionné Flash + RTMP
OriginalL'auteur
Il n'est pas prêt pour l'instant (j'espère que la deuxième moitié de cette année), mais DASH sur Full Duplex Protocoles HTTP vous permettra d'utiliser MPEG DASH sur les websockets, offrant les avantages du tableau de bord (open-source, ABR, compatibilité...), ainsi que de faibles temps de latence d'autres formats (. e.g WebRTC, ce qui ne fonctionne pas sur safari btw).
Donc toute personne qui envisage un faible temps de latence vidéo format a quelques mois maintenant, essayez de regarder pour cela.
Il est vrai que si vous êtes à la construction d'une application de toutes sortes et, par conséquent, avoir le plein contrôle sur le côté client de décodage, WebRTC est très bien. DASH FDH serait probablement plus important pour quelqu'un qui essaie de construire une base de navigateur vidéo plate-forme de chat.
Laisser à l'ISO pour faire les choses de façon plus compliquées qu'elles ne devraient l'être. À dieu ne plaise que nous utilisons quelque chose qui fonctionne, tout simplement, comme normal l'adresse HTTP Progressive.
OriginalL'auteur
Aller pour WebRTC, Parce que :
WebRTC est une norme qui prend en charge navigateur de base de la communication en temps réel. À l'origine développé par Google, la norme est maintenant géré par le consortium W3C. WebRTC permet de navigateur à navigateur des applications pour la téléphonie, vidéo, chat, partage de fichiers et sans la nécessité pour toutes les plugins externes, autre qu'un navigateur compatible.
Avantages :
WebRTC Les tests.
En fait, ce n'est pas vrai du tout. WebRTC est très bien pris en charge.
Oui, Vous pouvez dire que les gens devraient utilisation des technologies de pointe, Mais le truc, c'est que l'industrie est extrêmement rapide expansion, tout le monde est la recherche et l'OS sont des coups rapides mises à jour. Permettez-moi de dire, WebRTC sera vieux, après une couple de mois 🙂
brad est droit, WebRTC est bien pris en charge.
Vous devriez vraiment citer vos sources. :-/ broadsoft.com/blog/...
OriginalL'auteur
Unreal Media Server v12 est ce que vous avez besoin. Je suis d'observation 200ms de latence sur mon flux vidéo en provenance de la Géovision Caméra IP.
OriginalL'auteur