2009-04-04 16 views
2

Je suis la mise en œuvre d'un scénario similaire à Youtube pour mon site web - le téléchargement de vidéos et de sorte que tout le monde puisse regarder. Ma question est, je pense que nous devons encoder la vidéo après le téléchargement avant que d'autres personnes puissent jouer à distance, mais encoder le processus est très lent (j'ai essayé avec Microsoft Expression Encoder et mplayer, encoder une vidéo de 20 minutes prend environ 10 minutes). À ma grande surprise, même si nous mettons en ligne une très grosse vidéo sur Youtube, il semble que d'autres personnes puissent la sélectionner et la jouer immédiatement, cela ressemble à un processus d'encodage qui prend presque du temps.problème de téléchargement de fichier

Quelqu'un a-t-il des idées s'il vous plaît? Comment Youtube a-t-il encodé le processus aussi rapidement que par magie? Ou Youtube ignore totalement le processus d'encodage - mais si le processus d'encodage est ignoré, comment Youtube peut-il s'assurer que toutes les vidéos téléchargées sont lisibles (les vidéos suivent certains paramètres, comme le débit binaire, la taille de l'image)?

merci à l'avance, George

+0

Où utilisez-vous ce codeur? Sur votre petit bureau ou sur un serveur approprié? –

+0

@ S.Lott, je l'exécute sur un serveur. Il a 2 processeurs, Windows Server 2003 et x64, 4G RAM. La vidéo que je code est d'environ 80M d'entrée, il faut environ 40-50 minutes pour encoder la vidéo (la durée totale de la vidéo est d'environ 90 minutes). Des idées pour améliorer la performance? – George2

Répondre

3

Ne pas oublier que YouTube est la propriété de Google, afin d'avoir 450,000 serveurs disponibles peut aide!

(un peu facétieuse, réponse, je l'avoue. Et, évidemment, YouTube ne pas avoir accès à tous ceux-ci. Mais il reste que les ils ont des quantités phénoménales de ressources à jeter sur cette question)

+0

@Brian, même si encoder la vidéo devrait prendre un certain temps. Je ne pense pas que YouTube va diviser ma vidéo 20M en centaines de morceaux, distribuer à des centaines de machines, encoder sur chaque machine individuelle, et combiner le tout? – George2

+0

(suite) peut-être que Youtube n'encode pas du tout? Je n'ai pas trouvé une telle information. Des idées ou des commentaires? – George2

+0

J'avoue que je ne sais pas comment YouTube utiliserait ces ressources, mais Google est expert dans la subdivision et la parallélisation du travail, donc je serais surpris si une certaine parallélisation ne se produisait pas. Des conjectures complètes, cependant –

1

Avant toute chose, obtenez un meilleur encodeur. Il y a beaucoup d'encodeurs disponibles. Certains sont open source, d'autres sont propriétaires. Apple a de très, très bons encodeurs qui sont rapides, mais chers.

Regardez http://www.ffmpegx.com/ pour l'état de l'art dans la technologie de codeur open-source. Ils intègrent un ensemble diversifié de technologies.

+0

@ S.Lott, j'ai essayé avec ffmpegx, je pense que mplayer l'utilise en interne. Sur mon ordinateur encoder 20 minutes vidéo prend 10 minutes. Donc, je pense que Google n'utilise pas quelque chose de similaire. Etes-vous sûr que Youtube va encoder la vidéo ou ne pas encoder du tout (juste lire ce qui est téléchargé)? – George2

+0

Je recommande fortement x264. Il peut encoder la vidéo MPEG4 plus rapidement que le temps réel, avec les paramètres appropriés. –

1

De plus, l'encodeur matériel est probablement utilisé par youtube.

Et, est-il possible de jouer en codant seulement si l'encodage est rapide que de le jouer.

+0

@arsane, 1. toute référence à l'encodeur H/W qui est plus rapide? 2. "Est-il possible de jouer en codant seulement si l'encodage est rapide puis de le jouer" - Je n'ai aucune expérience, pourriez-vous me montrer une référence qui montre comment lire une vidéo alors qu'il est encore en cours d'encodage? – George2

+0

(suite) Je veux également apprendre quelques lignes directrices sur le moment où nous devrions encoder et quand nous ne devrions pas coder. En fait, je ne vois aucun avantage de l'encodage - sans codage, la vidéo téléchargée peut encore être lue. :-) – George2

+0

Pour l'encodeur H/W, vous pouvez en avoir un google. Mais je n'ai aucune idée quel codeur H/W est le meilleur. comme: http://www.streetwise.com.au/product_info.php?products_id=7061 peut encoder youtube vedio. Pour la deuxième façon de jouer/coder, je ne suis pas un expert en codage, mais je pense que cela devrait être possible. –

1

Comment Youtube a-t-il procédé si rapidement à l'encodage?

Sans connaissance particulière d'initié, je me attends (1) à découper la vidéo d'entrée en segments plus courts pour envoyer à plusieurs codeurs, et (2) codant pour le flux en même temps que vous téléchargez, plutôt que attendre jusqu'à ce que vous avez téléchargé le fichier entier pour commencer.

Ou Youtube totalement sauter le processus de encode

Non, tout doit être converti en FLV pour la lecture.

+0

@bobince, 1. existe-t-il un code de référence ou des documents sur la façon de mettre en œuvre l'encodage en même temps lors du téléchargement? Je suis très intéressé d'en savoir plus sur cette idée géniale. – George2

+0

(suite) 2. avez-vous des documents ou des exemples sur la façon de diviser la vidéo en petites parties, de les encoder et de les réassembler? Je suis très confus sur la façon de diviser et comment assembler, parce que je pense que nous devons analyser et comprendre le format vidéo interne afin de diviser/réassembler? – George2

+0

Vous devrez gérer l'analyse de corps de requête vous-même au lieu de la laisser à l'analyseur de formulaires dans n'importe quel framework/langage de niveau supérieur que vous utilisez. Ensuite, vous utiliserez quelque chose comme libavformat de ffmpeg pour démultiplexer les flux et diviser sur des paquets indépendants où le format le permet. – bobince