La technologie de streaming progressif, ou comment regarder des vidéos 4k sur le réseau, sans frises



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.com

La 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.

Source: https://habr.com/ru/post/fr452766/


All Articles