
Aujourd'hui, on ne peut surprendre personne avec la vitesse d'Internet à 100 Mbit / s, mais il y a un problème pour l'utiliser. Toutes les opérations de base ne chargent pas complètement le réseau. Dans le même temps, les formats audio et vidéo lourds 4k-8k que vous souhaitez regarder en ligne sont plus populaires. Et en regardant la vitesse élevée d'Internet, une question logique se pose - pourquoi pas? Comment maîtriser la pleine vitesse fournie par le fournisseur? Tant du côté client que du côté service. Considérez tous ces problèmes dans l'article.
J'ai fait un très bon produit logiciel et je veux dire plus en détail comment tout y est organisé. Il existe de nombreuses nouvelles technologies. Peut-être parce que personne n'a rien inventé dans cette industrie depuis longtemps, et le moment est venu. Cet article n'est pas seulement destiné aux développeurs, mais aussi aux gens ordinaires. J'ai essayé de tout expliquer le plus simplement possible.
1. Commençons par les bases de base des technologies de transfert de données d'aujourd'hui.
Il y a une grande lacune dans la connaissance de nombreuses personnes sur les algorithmes de transfert de données à haut débit - plus de 10 Mbit / s ... Comblons ces lacunes:
Espace # 1. Le problème est que la totalité des technologies de transmission radio se concentre désormais sur la transmission continue de données, comme le meilleur scénario.
Tout ce qui est transmis via wi-fi \ 3G \ 4G et même par fil sera transmis plus rapidement si la transmission est constante, même à une vitesse inférieure au maximum. Ce sera beaucoup plus rapide que la transmission intermittente, mais à la vitesse maximale.
Raisons:
- pour reprendre la communication, plus d'informations de service sont ajoutées au trafic;
- lors de la reprise de la communication, le serveur peut abaisser la note du client et fournir des données à une vitesse inférieure (peut-être en raison de l'apparition d'autres clients), ou pas du tout. Même dans un réseau wi-fi domestique, le routeur peut abaisser la cote, par exemple, en raison d'un aspirateur wi-fi. C'est-à -dire cela s'applique à tous les réseaux où il y a plus de 2 clients. En général, presque à tout le monde :-)
Espace # 2. Lors de la copie de données, tout programme utilise une sorte de «compartiment» qui extrait les données de la source et les transfère vers la destination. Ainsi, ce compartiment, en fonction du taux de transfert de données,
doit être de tailles différentes . C'est facile à comprendre: si vous prenez un seau d'eau avec une cuillère à café, cela prendra beaucoup plus de temps que de ramasser une tasse.
Espace # 3. Pour augmenter la vitesse de téléchargement des données sur le réseau, la RAM doit être utilisée. Les moindres millisecondes de retard lors de l'enregistrement des données entrantes sont ensuite versées en secondes, minutes et heures. Pour éviter que cela ne se produise, vous devez d'abord écrire des données dans la RAM, puis dans un «compartiment» plus volumineux sur un support permanent (disque dur). Sinon, la vitesse de transfert de données diminuera considérablement.
Cela suffit pour copier le fichier.2. Ces lacunes ne sont que la pointe de l'iceberg. Avec un transfert de fichier normal, cela suffit, mais que se passe-t-il si notre fichier est multimédia, et nous devons commencer à le lire en ligne. Un fichier multimédia moderne ne peut pas s'intégrer complètement dans la RAM, vous devez donc envisager de l'enregistrer sur le disque.
La meilleure stratégie est construite à partir de ce qui précède sur les espaces:
- le chargement des données doit se produire indépendamment de la lecture, en continu;
- pour assurer le rembobinage, il est nécessaire de créer un autre flux de chargement de données;
- pour surmonter la frise au démarrage, du fait de la réception des données techniques (codecs, etc.), un préchargement est nécessaire. Empiriquement, j'ai trouvé la formule: la taille du fichier entier est de * 0,002 ou 0,2%.
Cela suffit pour lire des fichiers Flac.3. Il s'avère que pour le streaming en ligne, qui utilisera rationnellement et pleinement notre canal de communication, vous avez besoin de RAM et d'espace disque. Sans cela, le canal ne sera pas pleinement utilisé.
Et ici commence la ramification des algorithmes de chargement de données! Sans détails techniques, je les donnerai dans un volume approximatif:
- pour que les données ne soient pas téléchargées deux fois, il est nécessaire de faire une collision de flux. C'est-à -dire si nous avons commencé la piste et rembobiné rapidement au milieu, alors le premier flux, atteignant le milieu, devrait interrompre son travail.
- pour que les données ne soient pas téléchargées deux fois, un flux ne doit pas être créé si les données sont déjà chargées.
- Pour une lecture normale, une logique complexe d'interaction entre le flux du lecteur et les flux qui téléchargent les données est nécessaire.
J'ai fait tout cela et un peu plus. Cela s'est avéré absolument fabuleux. Les données volent et la lecture n'est pas interrompue. Les fichiers Flac ont été téléchargés complètement à 1-3 secondes de lecture.
Et c'était suffisant pour lire une vidéo Full HD.4. Le problème est que nos fichiers multimédias sont de tailles très différentes. Et avec les films Blu-ray 4K, qui pèsent entre 80 et 120 Go, rien n'a fonctionné. Le joueur a créé 15 threads au début, et ils ont tous partagé la vitesse, ce qui, bien sûr, n'était pas suffisant pour le thread principal, que le joueur attendait. Les données ont été chargées à la vitesse maximale, oui ... ils ont téléchargé la chaîne complète, mais la vidéo 4k a été suspendue et jouée plus lentement que le diaporama. Il s'avère que beaucoup de flux sont nocifs pour la vidéo 4k, mais où est la frontière après laquelle les avantages en Full HD se sont transformés en dommages en 4k?!
En conséquence, tout reposait sur la vitesse de la chaîne. Afin d'optimiser les threads, vous devez savoir deux choses:
a) La vitesse requise pour la lecture, qui est calculée: (taille / durée du fichier en secondes) * 8.
b) La vitesse de chargement des données par le flux principal avec lequel le joueur travaille actuellement.
Si nous gérons le chargement des données, nous avons définitivement la possibilité de mesurer la vitesse de téléchargement. Désormais, chaque thread connaissait sa vitesse (en Mbps) et cela n'impose pas de coûts supplémentaires sur les performances. Assurez-vous d'identifier le flux sur lequel le lecteur travaille actuellement. Tout commence dans le mode multithread habituel. Mais dès que le lecteur calcule la durée du fichier multimédia en secondes et transmet ces données, tous les flux obtiennent une vitesse fixe et nécessaire pour la lecture. Immédiatement après cela, tous les flux (sauf le principal) comparent la vitesse nécessaire avec la vitesse du flux principal et si sa vitesse est inférieure, ils s'arrêtent. De plus, le thread principal augmente lentement sa vitesse, et dès qu'il dépasse deux fois la vitesse nécessaire (comme je l'ai fait), il suspend tous les flux secondaires de la pause.
Selon les observations, puis, après un certain temps, la vitesse du flux principal diminue à nouveau et tous les flux secondaires se mettent à nouveau en pause, et ainsi jusqu'à ce que les données soient téléchargées ou la lecture terminée. Une telle stratégie flexible, lorsque le chargement des données est parallélisé et, si nécessaire, compressé en un seul flux, télécharge entièrement le canal de communication et garantit en même temps le téléchargement le plus rapide possible des données nécessaires à la lecture des données. Cette stratégie fonctionne aussi bien sur les fichiers de 10 Mo que sur 100 Go. Pour jouer sur le réseau sans perte, il est impossible de trouver quelque chose de mieux. Si vous avez des suggestions, je serai heureux d'en discuter dans les commentaires.
Convient pour la lecture de fichiers multimédias de tout volume 4k-8k.Le streaming progressif est le type de streaming le plus rapide lors de la transmission de données dans leur qualité d'origine. Pour augmenter le taux de transfert de données, il utilise la RAM et le multi-threading. Les données sont chargées de manière asynchrone dans le flux de lecture, mais avec une interaction active avec celui-ci. Pendant la lecture, la vitesse d'acquisition des données est mesurée et le nombre de flux actifs est adapté au canal de données disponible.
Actuellement, dans le monde, il y a une grande tendance à augmenter le nombre de vidéos haute résolution, et la popularité des appareils pour les lire augmente.
Source www.vox.comLa vidéo Bitrate 4k est volumineuse, mais pas exorbitante. Le codec VP9 le plus efficace compresse aujourd'hui la vidéo 4k à 15 Mbps. avec audio sort environ 15,5. Un film Blu-ray de 100 Go a un débit d'environ 60 Mb / s ...
Quiconque dans le monde veut regarder des vidéos 4K a ces vitesses Internet. Cela signifie que les vidéos 4K peuvent être regardées en ligne maintenant!
Malgré la simplicité de l'algorithme décrit ci-dessus, la mise en œuvre semble très compliquée. Les technologies de streaming avec détérioration de la qualité de la vidéo et de l'audio sont obligées de gâcher le contenu en raison de l'absence de mise en œuvre de l'algorithme de transfert de données correct. Je suppose que de nombreuses personnes et entreprises ont (ci-dessus) des lacunes dans les connaissances et, bien sûr, des difficultés à mettre en œuvre cet algorithme. Par conséquent, il a écrit un article pour simplifier la compréhension de cette méthode de streaming.
Il sera un peu plus difficile de rendre cet algorithme en utilisant le droit d'auteur, mais en général c'est aussi possible. Lors de l'enregistrement sur le disque et de la lecture, il est nécessaire de crypter les données. Cela ressemble à une action ennemie contre l'utilisateur, mais que faire. Certaines entreprises le font.
Voyons maintenant les inconvénients du streaming conventionnel, par rapport au progressif:
- il est impossible de précharger le fichier suivant \ pour prévoir et préparer la prochaine action;
- même avec une déconnexion temporaire d'Internet / des interruptions de vitesse, une frise notable de son / image apparaîtra;
- le canal de communication n'est pas pleinement utilisé et la moitié du temps de lecture est inactif, à un moment où il y a encore beaucoup de données à charger;
- l'incapacité de lire des vidéos 4k-8k, même via wi-fi sans frises. Des rafales de communication constantes et des sauts de vitesse au maximum ne peuvent pas le supporter, même le Wi-Fi à domicile tout au long du film est de 2 heures ou plus;
- cela impose une charge encore plus importante lors de la lecture de contenu 4k, car le lecteur doit conserver dans la RAM de 200 à 300 Mo de données vidéo (à la vitesse requise de 60 Mo / s). Lors de la lecture via un algorithme de streaming progressif, cela n'est plus nécessaire, car la lecture s'effectue à partir d'un disque, et non via un réseau.
Selon ces points, il est clair que le streaming, comme auparavant, n'est plus possible. Bien sûr, vous pouvez augmenter la vitesse \ mémoire \ cache dix fois, mais pourquoi, si les vitesses d'aujourd'hui sont déjà suffisantes et que le problème réside dans les algorithmes. Tôt ou tard, les mauvais algorithmes s'arrêtent. Aujourd'hui, le streaming progressif est la seule technologie qui vous permet de regarder de manière stable et confortable des films 4k 100 Gigabyte en ligne.
Pour illustrer le fonctionnement de la technologie, j'ai écrit une application multimédia - le
lecteur de bibliothèque multimédia . Il prend en charge tous les formats. Pour démontrer les capacités dont vous avez besoin pour l'exécuter. Ouvrez le site de démonstration et accédez à l'arborescence du répertoire "Films (TOP) / Films 4k". Là , vous pouvez sélectionner n'importe quel film et le regarder. Pour prendre en charge tous les formats, vous devez basculer le module lecteur d'ExoPlayer vers VlcPlayer.
Dans ce scénario, tous les algorithmes d'acquisition de données ci-dessus seront utilisés. Mon application prend en charge les protocoles suivants: nmdc \ http \ ftp \ samba, ainsi que le cloud Mega.nz.
Les fichiers vidéo 4K de 100 Go sont lus avec un minimum de délais et téléchargés en mémoire à la vitesse la plus élevée possible. Vous pouvez précharger plus de données en faisant simplement une pause, mais cela n'est généralement pas nécessaire. La lecture est toujours stable, sinon stable, la vitesse du canal est proche de la vitesse nécessaire pour la lecture.
En raison des lacunes décrites ci-dessus, les politiques des plus grandes entreprises ne se développent pas correctement, ce qui ralentit les progrès et empêche souvent l'utilisation complète des appareils et des canaux de communication disponibles.
L'application prévoit d'enregistrer le cache sur des supports externes, mais en raison de l'étrange complication de l'accès aux supports externes de Google, il est actuellement pris en charge principalement par les appareils Samsung et la version Android 5.0+. À l'avenir, une prise en charge complète des supports USB externes apparaîtra.
En général, l'algorithme améliore considérablement la qualité et la vitesse de téléchargement des données lors de la diffusion, à la fois de petits fichiers de 30 à 50 Mo et de gros 50 à 120 Go.
En perspective, il peut être utilisé:
- pour une lecture de haute qualité du contenu multimédia 4k-8k sur les téléphones mobiles, téléviseurs et autres appareils;
- en réalité virtuelle pour afficher des scènes volumétriques en haute résolution;
- en combinaison avec des protocoles peer-to-peer de type torrent ;
- pour une lecture de musique de haute qualité en haute résolution sur n'importe quel appareil. Des tests expérimentaux ont montré que 2 Mbps d'un canal de communication instable suffisent pour cela.