Quel est le meilleur protocole pour la transmission audio en direct (radio) en streaming pour mobile et sur le web?
Je suis en train de construire un site web et une application mobile (iOS, Android) pour la station de radio internet.
Les utilisateurs du site web de diffusion de leur musique ou de la radio mobile et les utilisateurs il suffit d'écouter les stations de radio et de discuter avec d'autres auditeurs.
J'ai cherché une semaine et de faire un prototype avec Wowza moteur (à l'aide de TLS et RTMP) et le serveur SHOUTcast sur Amazon EC2.
À l'aide de HLS a un retard de 5 secondes, mais RTMP et SHOUTcast a 2 seconde de retard.
Avec ce résultat, je pense que je devrais choisir RTMP ou SHOUTcast.
Mais je ne suis pas sûr RTMP et SHOUTcast sont le meilleur protocole. 🙁
Ce protocole devrais-je choisir?
Dois-je fournir un divers protocole de couvrir toutes les plate-forme?
OriginalL'auteur Paul | 2015-05-12
Vous devez vous connecter pour publier un commentaire.
C'est une très vaste question. Commençons par le protocole de distribution.
Protocole De Streaming
HLS a l'avantage de permettre aux utilisateurs d'obtenir le flux dans le débit qui est le mieux pour leur connexion. Les Clients peuvent échelle vers le haut/vers le bas de manière transparente, sans arrêt de la lecture. Ceci est particulièrement important pour la vidéo, mais pour l'audio, même les clients mobiles sont capables de jouer 128kbit flux dans la plupart des régions. Si vous avez l'intention d'avoir une variété de débits disponibles et que vous souhaitez modifier la qualité de la mi-flot, puis HLS est un bon protocole pour vous.
La baisse de la HLS est la compatibilité. iOS prend en charge, mais c'est tout. Android a HLS, mais il est encore buggé. (Peut-être dans un an ou deux une fois que tous les sous Android 3.0, les gens sont partis, ce ne sera pas pour autant une question.) JWPlayer a quelques bidouilles à faire HLS travail en Flash pour les utilisateurs de pc de bureau.
Je ne vous embêtez pas avec RTMP, sauf si vous êtes concernés par les utilisateurs de Flash.
Pure progressive streaming avec HTTP est le chemin que j'ai presque toujours choisir d'aller. Tout peut la jouer. (Même mon Palm Pilot par défaut du lecteur multimédia à partir de 12 ans.) C'est simple à mettre en œuvre et bien compris.
SHOUTcast est effectivement HTTP, mais mal mis en œuvre la version qui a des problèmes de compatibilité, en particulier sur les appareils mobiles. Il a une non-standard de la ligne d'état dans sa réponse qui brise beaucoup de clients. Icecast est une bonne alternative, et est ce que je recommande pour une utilisation en production aujourd'hui. Comme autre option, j'ai créé mon propre service de streaming appelé AudioPump qui est HTTP, et a été spécifiquement conçue pour fixer la compatibilité avec les excentriques de clients mobiles, tels que natif Android joueurs sur du matériel ancien. Il n'est en général pas encore disponible, mais vous pouvez me contacter à [email protected] si vous voulez l'essayer.
Latence
Vous avez mentionné un temps de latence de 2 secondes est souhaitable. Si vous avez 2 secondes de latence avec SHOUTcast, quelque chose est faux. Vous ne pas voulez une latence faible, en particulier si vous êtes en streaming pour les clients mobiles. J'ai l'habitude de commencer avec un 20-deuxième tampon à un minimum, ce qui est vidé pour le client aussi vite qu'il le peut recevoir. Cette mesure immédiate de départ du flux de lecture (comme il se remplit le côté client de la mémoire tampon afin de pouvoir commencer le décodage), tout en offrant une certaine protection contre les ruptures de flux en raison des conditions de réseau. Il n'est pas rare pour les utilisateurs mobiles à marcher dans le coin d'un bâtiment et de perdre leur belle qualité du signal. Vous souhaitez que votre flux de survivre du mieux que possible, donc si vous avez déjà envoyé les données pour couvrir la baisse, l'utilisateur ne doit pas savoir ou de soins que leur connexion est devenu médiocre pour une courte période de temps.
Si vous avez besoin d'une latence faible, vous êtes à la recherche à la mauvaise technologie entièrement. Pour une faible latence, découvrez WebRTC.
Très certainement, vous pouvez affiner votre internet traditionnel de la radio de l'installation pour réduire la latence, mais est rarement une bonne idée.
Codec
Codec choix est ce que vous dictera votre compatibilité plus qu'autre chose. MP3 est facilement le plus compatible, et l'AAC n'est pas loin derrière. Si vous allez avec AAC, vous obtenez la meilleure qualité audio pour un même débit. La plupart des gens l'utiliser pour réduire leur facture de bande passante.
Il y a des frais de licence avec MP3, et il peut y avoir de l'AAC selon ce que vous utilisez pour un codec. Vérifier avec un avocat. Je n'en suis pas un, et la licence est extrêmement compliqué.
Autres codecs sont Vorbis et Opus. Si vous pouvez utiliser Opus, le faire tant que la licence est grande ouverte, et vous obtenez la bonne qualité de la bande passante. Client de compatibilité ici est bien le tueur de l'Opus. (Peut-être que dans quelques années ça sera mieux). Vorbis est un médiocre codec, mais est libre et claire.
À l'extrême fin, j'ai certaines stations font leur streaming en FLAC. C'est l'audio sans perte de qualité, mais vous payez pour 8x la bande passante comme vous le feriez avec une qualité moyenne pour le MP3 de la station. FLAC sur streaming HTTP compatibilité n'est pas de code pour le moment, mais il fonctionne bien dans VLC.
Il est très commun pour prendre en charge plusieurs codecs pour votre flux. En fonction de votre budget, si vous ne pouvez pas faire cela, vous êtes mieux de avec MP3.
Enfin sur le codage de la, ne va pas d'un codec avec perte pour un autre codec avec perte si vous pouvez l'aider. Essayez d'obtenir le flux de sortie aussi proche de l'entrée que possible. Si vous ré-encodage de l'audio, vous perdez la qualité de tous les temps.
Enregistrement à partir d'un Navigateur
Vous avez mentionné les utilisateurs en streaming à partir d'un navigateur. J'ai construit quelque chose de ce genre il y a quelques années avec l'API Web Audio si le son est capturé puis codées et envoyées à l'arrêt de Icecast/serveurs SHOUTcast. Découvrez-le ici: http://demo.audiopump.co:3000/ Une brève explication de la façon dont il fonctionne, c'est ici: https://stackoverflow.com/a/20850467/362536
De toute façon, j'espère que cela vous aide à obtenir commencé.
Il fonctionne très bien. Tout simplement du flux, les trames sont codées. SHOUTcast/Icecast ce faire.
vous devez également mentionner que WebRTC n'est pas largement pris en charge ( en particulier pour les utilisateurs d'IOS .. )
WebRTC est très largement pris en charge. Heureusement, la plupart du monde ne fonctionne pas iOS. Si une très faible temps de latence est nécessaire (ce qui nécessite WebRTC ou similaire), et vous avez besoin de prise en charge d'iOS, puis une application native est nécessaire sur iOS. Le reste du monde peut utiliser un navigateur classique.
Nice, nous pouvons donc écrire Webrtc app sur les appareils iOS 🙂
OriginalL'auteur Brad
Streaming directement
audio/mpeg
(mp3 paquets) a travaillé partout dans le monde j'ai essayé.OriginalL'auteur Rhythmic Fistman
Si vous développez une APPLICATION, puis aller de l'AAC, si vous êtes simplement le jeu via navigateur web, alors vous avez besoin d'une Implémentation de HTML5 qui est MP3. Tous les protocoles RTMP ou SHOUTcast nécessite l'ajout de l'INTERFACE utilisateur à être construit. Il y a quelques joueurs tiers disponibles dans le monde open source. Vous pouvez les utiliser ou s'en tenir à HTML5 MP3/OGG comme la plupart des gens de nos jours sont en utilisant le navigateur google chrome ou d'autres HTML5 plainte navigateurs.
<audio>
élément.Élément Audio à qui vous parlez est d'avoir un fichier dans le format?? @brad
OriginalL'auteur vibs2006