Recherchez plus rapide encodeur vidéo avec moins de lag à flux webcam en streaming sur ipad
Je suis à la recherche de la façon la plus rapide de coder une webcam stream qui sera visible dans une balise vidéo html5. Je suis à l'aide d'une Pandaboard: http://www.digikey.com/product-highlights/us/en/texas-instruments-pandaboard/686#tabs-2 pour le matériel. Pouvez utiliser gstreamer, cvlc, ffmpeg. Je vais l'utiliser pour piloter un robot, donc besoin de moins de décalage dans le flux vidéo. Qualité n'a pas besoin d'être grand et il n'a pas besoin de l'audio. Aussi, ce n'est que pour un client de la bande passante n'est pas un problème. La meilleure solution pour l'instant est à l'aide de ffmpeg avec un mpjpeg me donne environ 1 sec de retard. Rien de mieux?
OriginalL'auteur kelly | 2012-08-18
Vous devez vous connecter pour publier un commentaire.
J'ai été invité à de nombreuses reprises, donc je vais essayer de répondre à cela un peu de façon générique et pas seulement pour le mjpeg. L'obtention de très faibles retards dans le système nécessite un peu de l'ingénierie système de l'effort et aussi la compréhension des composants.
Simple de haut niveau des réglages que je peux penser sont:
Assurer le codec est configuré pour le plus de retard. Codecs (surtout le système intégré de codecs), un peu de retard de configuration. Activer. Si vous êtes en utilisant H. 264 il est le plus utile. La plupart des gens ne réalisent pas que par les exigences de la norme H. 264 décodeurs besoin de tampon d'images avant de les afficher. Cela peut être jusqu'à 16 pour Qcif et jusqu'à 5 images pour 720p. C'est beaucoup de retard dans l'obtention de la première image. Si vous n'utilisez pas le H. 264 toujours vous assurer que vous n'avez pas B photos activé. Cela ajoute un délai pour l'obtention de la première image.
Puisque vous utilisez mjpeg, je ne pense pas que cela s'applique à vous.
Codeurs auront également un contrôle du taux de retard. (Appelé init retard ou vpv buf de taille). Régler à la valeur la plus petite qui vous offre une qualité acceptable. Qui permettra également de réduire le retard. Pensez à ce que le train de bits de zone tampon entre l'encodeur et le décodeur. Si vous utilisez x264 qui serait la taille de mémoire tampon vbv.
Certaines simples, d'autres configurations: comme j'ai quelques photos que possible (grand intra période).
J'ai les photos sont énormes et ajouter le délai d'envoi sur le réseau. Cela peut ne pas être très visible dans les systèmes où la fin à la fin de retard est de l'ordre de 1 seconde ou plus, mais lors de la conception de systèmes à la fin de retard de 100ms ou moins, et plusieurs autres aspects entrent en jeu. Également vous assurer que vous êtes en utilisant une faible latence codec audio aac-lc (et pas heaac).
Dans votre cas, pour obtenir des latences inférieures, je suggère de se déplacer loin de mjpeg et utiliser au moins mpeg4 sans B photos (profil Simple) ou le mieux est H. 264 baseline profile (x264 donne un zerolatency option). La raison en est simple, vous obtiendrez une latence plus faible est que vous obtiendrez un débit inférieur post codant pour envoyer les données et vous pouvez aller à plein framerate. Si vous devez vous en tenir à mjpeg vous avez près de ce que vous pouvez obtenir sans plus de fonctionnalités avancées de support du codec et du système en utilisant les composants open source.
Un autre aspect est la transmission du contenu de l'unité d'affichage. Si vous pouvez utiliser udp elle permettra de réduire le temps de latence beaucoup par rapport à tcp, mais il peut l'être avec perte à la fois selon les conditions du réseau. Vous avez mentionné la vidéo html5. Je suis curieux de savoir comment vous faites en direct streaming à une balise vidéo html5.
Il y a d'autres aspects qui peuvent également être tordu qui, je mettrais dans la catégorie avancé et nécessite le système d'ingénieur à essayer différentes choses
Qu'est-ce que le réseau de la mémoire dans l'OS? Le système d'exploitation également des tampons de données avant de l'envoyer pour des raisons de performances. Ajuster afin d'obtenir un bon équilibre entre les performances et la vitesse.
Êtes-vous à l'aide de CR ou de l'encodage VBR? Alors que la RBC est idéal pour un faible jitter vous pouvez également utiliser plafonné vbr si le codec fournit.
Votre décodeur démarrer le décodage de trames partielles? Si vous n'avez pas à vous soucier de cadrage les données avant de les transmettre au décodeur. Juste continuer à pousser les données du décodeur dès que possible.
Pouvez-vous faire de codage sur le terrain? La moitié du temps à partir de l'image de l'encodage avant d'obtenir la première image.
Pouvez-vous faire des tranches de codage avec des rappels à chaque fois qu'une tranche est disponible à envoyer sur le réseau immédiatement?
En sous 100 ms de latence des systèmes que j'ai travaillé dans tous les ci-dessus sont utilisés. Certaines fonctionnalités peuvent ne pas être disponibles dans des composants open source, mais si vous en avez vraiment besoin et sont enthousiastes, vous pouvez aller de l'avant et de les mettre en œuvre.
EDIT:
Je me rends compte que vous ne peut pas faire beaucoup de la ci-dessus pour un ipad solution de streaming et il y a des limites en raison de la hls aussi pour le temps de latence que vous pouvez obtenir. Mais j'espère qu'il sera utile dans d'autres cas, lorsque vous avez besoin d'un faible temps de latence du système.
AAC-LC semble+ de 100 ms plus lent que AAC-LD (+de 20 ms de latence), et AAC-LD est plus lent que l'Opus (<20 ms)
OriginalL'auteur av501
Nous avons eu un problème similaire, dans notre cas, il était nécessaire de temps d'événements externes et de les synchroniser avec la vidéo. Nous avons essayé plusieurs solutions, mais celle qui est décrite ici a résolu le problème et est extrêmement faible temps de latence:
Github Lien
Il utilise gstreamer transcoder mjpeg, qui est ensuite envoyé à un petit python serveur de streaming. Ceci a l'avantage qu'il utilise la balise au lieu de sorte qu'il peut être considéré par la plupart des navigateurs modernes, y compris l'iPhone.
Que vous voulez que le <video> tag, une solution simple est d'utiliser le protocole http-lancement. Que
a la latence la plus faible de toutes les solutions que nous avons essayé de sorte qu'il pourrait travailler pour vous. Soyez averti que l'ogg/theora ne fonctionne pas sur Safari ou IE, de sorte que ceux qui souhaitent cibler les Mac ou Windows devrez modifier les tuyau à utiliser MP4 ou WebM.
Une autre solution qui a l'air prometteur, tps-streaming-serveur. Nous ne pouvions tout simplement pas trouver suffisamment de documentation pour vous, il vaut la peine de poursuivre. Je serais reconnaissant si quelqu'un pourrait-il poser une question sur stackoverflow comment il doit être utilisé!
avez-vous envisagé de WebRTC?
OriginalL'auteur sgbirch