Propre plate-forme vidéo ou comment utiliser beaucoup de ressources informatiques. Partie 1

Sur la photo - le premier vélo volant à quatre roues. Source

Aujourd'hui, en raison de la disponibilité des services nécessaires, publier des vidéos sur le réseau n'est pas une tùche difficile. Cependant, il n'y a pas tant de documents sur la structure interne de ces systÚmes, en particulier dans le segment de langue russe.

Je participe depuis un certain temps Ă  la conception et au dĂ©veloppement d'une plateforme vidĂ©o de haute qualitĂ©. Dans cet article, je veux dĂ©crire ces moments que j'aimerais moi-mĂȘme connaĂźtre au dĂ©but du dĂ©veloppement.

L'article ne revendique pas le statut de leader, j'essaierai de décrire uniquement les points intéressants ou non évidents affectant le traitement et la diffusion de contenu vidéo basé sur HTML5.
Le matĂ©riel est conçu pour ceux qui sont dĂ©jĂ  dans le sujet, ou est prĂȘt Ă  rechercher une ventilation des abrĂ©viations, des termes et des concepts.

La deuxiĂšme partie.

Format


H264 High-profile, malgrĂ© sa popularitĂ©, il s'avĂšre que cela ne fonctionne pas partout - certains navigateurs n'incluent pas son support. Heureusement, sur les appareils modernes, presque partout oĂč H264 n'est pas pris en charge, VP8 / 9 fonctionne. VP9 est prĂ©fĂ©rable d'utiliser, car Je n'ai pas vu d'anciennes versions de dĂ©codeurs pouvant VP8, mais pas VP9 ou H264. VP9 donne une qualitĂ© d'image comparable Ă  H264 lorsque le dĂ©bit binaire est ~ 30% infĂ©rieur - ceci est important pour rĂ©duire la charge sur les canaux. De plus, si l'utilisation du codec MPEG peut potentiellement avoir des prĂ©tentions lĂ©gales (une histoire trĂšs compliquĂ©e), alors VP9 est d'accord. Certes, la vitesse d'encodage de VP9 est environ un ordre de grandeur infĂ©rieur, par consĂ©quent, plus de ressources devraient ĂȘtre allouĂ©es pour son traitement.

S'il est nécessaire de prendre en charge d'anciens équipements qui ne peuvent pas faire face à H264 High, vous pouvez ajouter 480p H264 Main avec un débit binaire inférieur comme troisiÚme format.

Hi10P est massivement préférable de ne pas l'utiliser en raison de la mauvaise prise en charge du décodage matériel.
Le H265 nécessitera évidemment des frais de licence, ce qui n'est pas pour tout le monde.

Doux contre dur


Les encodeurs matĂ©riels n'utilisent pas la plupart des fonctionnalitĂ©s avancĂ©es des codecs (Ă©conomiser de l'espace sur les puces), donnant des fichiers encodĂ©s de maniĂšre non optimale. Le choix du format est limitĂ©, tous ne peuvent pas ĂȘtre configurĂ©s avec des paramĂštres d'encodage - souvent, des valeurs qui affectent vraiment le rĂ©sultat, il n'y a qu'un dĂ©bit binaire, et mĂȘme cela est perçu de maniĂšre trĂšs particuliĂšre. Si tout est fait comme il se doit, sur les puces normales, vous pouvez obtenir un rĂ©sultat complĂštement sain avec un linĂ©aire (effet dans les scĂšnes dynamiques) et un dĂ©bit binaire un peu plus Ă©levĂ©.

Et, bien sûr, pour que l'encodeur matériel fonctionne, vous avez besoin d'un appareil - une carte vidéo ou un processeur avec un noyau vidéo, que tous les serveurs n'ont pas.

Mais ils sont rapides. TrĂšs. Par rapport au traitement logiciel, la vitesse peut augmenter de quelques centaines de fois, Ă  un niveau auquel les E / S disque peuvent ne pas ĂȘtre suffisantes.

Le traitement par les méthodes matérielles dépend fortement du fournisseur de la solution - chaque fournisseur a son propre ensemble de bibliothÚques et d'utilitaires pour cela, et il y a beaucoup de choix: Intel Quick Sync, NVenc, AMD VCE.

Avec le traitement logiciel, il n'y a pas de telles restrictions, et avec un débit binaire équivalent, le résultat est meilleur. Pour travailler avec différents formats et codecs, il y a ffmpeg; Les «apparatchiks» n'ont pas ce luxe (avec des réserves).

CritÚres de qualité vidéo


Pour déterminer la qualité cible, il est plus facile de lire en bits par pixel, BPP. Ce paramÚtre est indépendant de la résolution, de la fréquence d'images et de la durée. De là, considérez déjà le bitrate selon la formule
BPP * Framerate * Width * Height 
Les meilleures valeurs BPP sont choisies au mieux par des expĂ©riences indĂ©pendantes pour la vidĂ©o que vous prĂ©voyez de traiter. Une bonne valeur initiale pour H264 est d'environ 0,09 bps. Pour les codecs hautes performances, tels que H265 et VP9, ​​ce paramĂštre peut ĂȘtre rĂ©duit proportionnellement au taux de compression comparatif. De plus, le BPP peut ĂȘtre lĂ©gĂšrement rĂ©duit pour la vidĂ©o haute rĂ©solution, comme l'efficacitĂ© des codecs augmente lĂ©gĂšrement avec la rĂ©solution, mais pour cette correction, vous devez prendre en compte la rĂ©solution de la section d'encodage (tranches, une caractĂ©ristique des codecs qui vous permet d'encoder de la vidĂ©o avec des blocs de rĂ©solution fractionnaire semi-indĂ©pendants).

Pour le débit binaire obtenu par la formule ci-dessus, il est conseillé de prédéterminer les valeurs maximales en fonction de la vitesse Internet attendue du client - peu de gens seront à l'aise de regarder une vidéo de trÚs haute qualité mais constamment tamponnée.

C'est pourquoi il n'est pas pratique d'utiliser les paramÚtres Q des codecs (perroquets de qualité) - des valeurs fixes donnent un débit final imprévisible.

maxRate est mieux fait avec une marge, car les codecs peuvent ne pas conserver avec prĂ©cision les valeurs requises, mĂȘme avec un codage Ă  deux passes.

Pour maintenir la qualité des scÚnes dynamiques, il est préférable d'activer le mode VBR des codecs, cependant, minRate est préférable de définir au moins 90% du débit binaire total afin que les pics de débit ne conduisent pas à des sous-exécutions de tampon.

Des utilitaires comme Intel VPA, ffprobe et Python sont utiles dans le contrÎle de la qualité. En utilisant ce dernier, il est commode de faire des comparaisons de la source et de la vidéo convertie, de lire des métriques arbitraires, telles que l'écart moyen des pixels.

Le calcul du PSNR et du SSIM en pratique est extrĂȘmement inefficace en raison des optimisations psychovisuelles, qui sont incluses dans les codecs par dĂ©faut. Si vous souhaitez calculer ces mĂ©triques de maniĂšre plus ou moins adĂ©quate, vous pouvez dĂ©sactiver les optimisations via
 -tune [psnr|ssim] 
Cependant, le fichier final sera bien sûr différent de celui créé sans ces drapeaux.

Aperçu


Le principal problĂšme de la gĂ©nĂ©ration d'images miniatures est une source floue. La dĂ©finition et la recherche d'images claires est une tĂąche trĂšs simple et gourmande en ressources. Heureusement, la solution Ă  ce problĂšme dans la plupart des codecs est incluse dans le processus de codage vidĂ©o. Vous pouvez prendre l'image clĂ© la plus proche d'une certaine position; de toutes les images qui l'entourent, ce sera la plus claire. Dans ffmpeg, cela peut ĂȘtre fait comme ceci:

 -ss [] -vf \"select='eq(pict_type,PICT_TYPE_I)'\" -vsync vfr 

Les encodeurs standard ne compressent pas de la meilleure façon, donc aprÚs avoir reçu l'image, il est préférable de la compresser avec quelque chose comme optipng - économisant en moyenne 500 Ko sur les aperçus FHD.

Les images haute résolution sont mieux réalisées entrelacées. Ainsi, nous augmenterons légÚrement la taille (de 5 à 10%), mais réduirons sérieusement le temps d'affichage sur la page de chargement.

L'article s'est dĂ©jĂ  rĂ©vĂ©lĂ© dense, et j'ai des doutes sur le fait que toutes les informations doivent ĂȘtre regroupĂ©es dans un seul texte Ă©norme. Si vous ĂȘtes intĂ©ressĂ© Ă  poursuivre sur ce sujet, Ă©crivez dans les commentaires ou marquez dans le sondage.

La plateforme est fermée, mais vous pouvez voir son travail ici .

* Je n'ai aucun lien avec les auteurs des sites respectifs et je ne peux pas partager leurs points de vue et opinions. Je ne peux pas commenter les décisions concernant qui et comment l'accÚs au code est accordé.

PrĂȘt Ă  rĂ©pondre aux questions.

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


All Articles