2009-04-04 14 views
2

Ich implementiere ein ähnliches Szenario wie Youtube für meine Website - Hochladen von Videos und damit alle Menschen sehen können. Meine Frage ist, ich denke, wir müssen das Video nach dem Upload codieren, bevor andere Leute remote spielen können, aber Prozess Codierung ist sehr langsam (Ich habe mit Microsoft Expression Encoder versucht und auch mplayer, codieren ein 20 Minuten Video dauert etwa 10 Minuten). Zu meiner Überraschung, auch wenn wir ein sehr großes Video auf Youtube hochladen, scheinen andere Leute sofort auswählen und spielen zu können, sieht so aus, als würde der Kodierungsprozess fast Null Zeit dauern.Datei-Upload-Problem

Hat jemand irgendwelche Ideen, bitte? Wie hat Youtube den Prozess so schnell magisch verschlüsselt? Oder Youtube überspringt den Kodierungsprozess vollständig - aber wenn der Kodierungsvorgang übersprungen wird, wie könnte Youtube sicherstellen, dass alle hochgeladenen Videos abspielbar sind (d. H. Videos folgen bestimmten Parametern wie Bitrate, Bildgröße oder etwas)?

Vielen Dank im Voraus, George

+0

Wohin führen Sie diesen Encoder? Auf Ihrem kleinen Desktop oder auf einem richtigen Server? –

+0

@ S.Lott, ich betreibe es auf einem Server. Es hat 2 CPUs, Windows Server 2003 und X 64 Computer, 4 G RAM. Das Video, das ich kodiere, ist ungefähr 80M Eingang, es dauert ungefähr 40-50 Minuten, um das Video zu kodieren (die gesamte Länge des Videos beträgt ungefähr 90 Minuten). Irgendwelche Ideen, um die Leistung zu verbessern? – George2

Antwort

3

Vergessen Sie nicht, dass YouTube im Besitz von Google, so 450,000-Server zur Verfügung, die kann Hilfe!

(eine leicht spöttische, Antwort, bekenne ich. Und natürlich wird YouTube hat keinen Zugriff auf alle von ihnen. Aber der Punkt bleibt, dass sie phänomenale Mengen an Ressourcen zu diesem Thema zu werfen haben werden)

+0

@Brian, obwohl codieren Video sollte einige Zeit dauern. Ich glaube nicht, dass youtube mein 20M Video in hunderte von Teilen aufteilen, auf Hunderte von Maschinen verteilen, auf jeder einzelnen Maschine kodieren und das Ganze kombinieren wird? – George2

+0

(Fortsetzung) vielleicht codiert Youtube überhaupt nicht? Ich habe solche Informationen nicht gefunden. Irgendwelche Ideen oder Kommentare? – George2

+0

Ich gestehe, ich weiß nicht, wie YouTube solche Ressourcen nutzen würde, aber Google ist Experte für die Unterteilung und Parallelisierung der Arbeit, also wäre ich überrascht, wenn eine Parallelisierung nicht stattfinden würde. Komplettes Rätselraten, jedoch –

1

Bevor Sie etwas anderes tun, erhalten Sie einen besseren Encoder. Es sind viele Encoder verfügbar. Einige sind Open Source, andere sind proprietär. Apple hat einige sehr, sehr schöne Encoder, die schnell, aber teuer sind.

Betrachten Sie http://www.ffmpegx.com/ für den Stand der Technik in der Open-Source-Encoder-Technologie. Sie integrieren eine Vielzahl von Technologien.

+0

@ S.Lott, ich habe es mit ffmpegx probiert, ich denke mplayer benutzt es intern. Auf meinem Computer encode 20 Minuten dauert Video 10 Minuten. Also, ich denke, Google verwendet nicht etwas ähnliches. Bist du sicher, ob Youtube das Video kodiert oder überhaupt nicht codiert (nur was hochgeladen wird)? – George2

+0

Ich würde x264 dringend empfehlen. Es kann MPEG4-Video schneller als in Echtzeit mit entsprechenden Einstellungen kodieren. –

1

Auch Hardware-Encoder wird wahrscheinlich von youtube verwendet.

Und, ist es möglich, während der Codierung nur zu spielen, wenn encode schnell ist, als es abzuspielen.

+0

@arsane, 1. jede Referenz auf H/W-Encoder, die schneller ist? 2. "Ist es möglich, während der Kodierung nur zu spielen, wenn die Kodierung schnell ist, dann spiele sie" - Ich habe keine Erfahrung, könntest du mir eine Referenz zeigen, die zeigt, wie man ein Video spielt, während es noch im Kodierungsprozess ist? – George2

+0

(Fortsetzung) Ich möchte auch einige Richtlinien darüber, wann wir kodieren sollten und wann wir nicht kodieren sollten. Tatsächlich sehe ich keine Vorteile der Kodierung - ohne Kodierung könnte das hochgeladene Video noch abgespielt werden. :-) – George2

+0

Für den H/W-Encoder können Sie ein Google davon haben. Aber ich habe keine Ahnung, welcher H/W-Encoder der Beste ist. mögen: http://www.streetwise.com.au/product_info.php?products_id=7061 kann youtube vedio kodieren. Für den zweiten Play/Encode-Weg bin ich kein Encoding-Experte, aber ich denke, es sollte möglich sein. –

1

Wie hat Youtube den Prozess so schnell magisch verschlüsselt?

ohne besonderes Insider-Wissen, würde ich (1) erwartet, dass das Eingangsvideo in kürzere Segmente hacken, um mehrere Encoder zu senden, und (2), die für den Strom zur gleichen Zeit, wie Sie es hochladen, anstatt warten, bis Sie die gesamte Datei hochgeladen haben, um zu starten.

Oder Youtube überspringen völlig den Kodierungsprozess

Nein, alles für die Wiedergabe FLV konvertiert werden müssen.

+0

@bobince, 1. Gibt es einen Referenzcode oder Dokumente darüber, wie die Kodierung beim Hochladen gleichzeitig implementiert wird? Ich bin sehr daran interessiert, mehr über diese coole Idee zu erfahren. – George2

+0

(Fortsetzung) 2. Haben Sie Dokumente oder Beispiele darüber, wie Sie Videos in kleine Teile aufteilen, kodieren und wieder zusammensetzen? Ich bin sehr verwirrt darüber, wie man Teile teilt und wie man sich zusammenfügt, weil ich denke, dass wir das interne Videoformat analysieren und verstehen müssen, um es zu teilen/wieder zusammenzusetzen? – George2

+0

Sie müßten die Anfrage selbst analysieren, anstatt sie dem Formular-Parser in dem übergeordneten Framework/der Sprache, die Sie benutzen, zu überlassen. Dann würden Sie etwas wie ffmpegs libavformat verwenden, um die Streams zu demuxen und auf unabhängige Pakete aufzuteilen, wenn das Format dies erlaubt. – bobince