Hi,
Original von duc
reicht es, wenn ich ffmpeg nach dem patch neu übersetze und installiere oder muss ich xine-lib und xine-ui auch neu backen?
Wenn durch den Patch die von xine-lib verwendeten Datenstrukturen und Schnittstellen nicht betroffen sind (vgl. ABI und API in Wikipedia), dann reicht es aus, nur FFmpeg neu zu bauen.
Im allgemeinen ist es wohl schwierig, diese Eigenschaft in den Änderungen erkennen zu können, und von daher ist es sinnvoll, zumindest xine-lib neu zu bauen, um etwaigen Abstürzen aufgrund geänderter ABI aus dem Weg zu gehen.
Im konkreten Fall wurde die ABI nicht angetastet. Somit reichte es aus, nur FFmpeg zu übersetzen (weder "make clean" noch "configure" waren notwendig).
Original von duc
das bildruckeln ist zwar besser geworden, aber der ton geht immer noch nach wenigen sekunden weg.
ich häng mal noch das xine log /2 teile, weil einer zu gross war)mit dran. es geht vom start bis zu dem punkt, an dem der ton weg geht.
Mir ist klar, dass sich dieses Verhalten auf meiner Maschine zeigt, weil mein P4 2.8 GHz HT definitiv zu langsam ist, aber deine Maschine sollte doch eigentlich schnell genug dafür sein.
Der erste Teil des Logs zeigt kurz vor Ende ein "set_speed 125000", d. h. die Abspielgeschwindigkeit wird auf 1/8 der normalen Geschwindigkeit gesetzt. Ab diesem Zeitpunkt ist der Ton natürlich stumm, sonst würde er stark verzerrt.
Sinn und Zweck dieser Geschwindigkeitsänderung ist folgender: da der Stream mit 8/8 (also normaler Geschwindigkeit) vom Satelliten kommt, baut sich so ein Puffer auf, der benötigt wird, um später Latenzzeiten in der Verarbeitungskette von SAT-Karte bis Grafikkarte ausgleichen zu können. Wenn der Puffer groß genug ist, wird dann die Wiedergabegeschwindigkeit wieder auf normal gesetzt. Ab dann sollte eigentlich wieder der Ton zu hören sein.
Im zweiten Teil des Logs tauchen z. B. folgende Zeilen auf:
|
Source code
|
1
2
|
buffer usage: 1, 0, 0, 17, 0x8585988
set_speed 1000000
|
Hier wird also auf normale Geschwindigkeit geschaltet, doch leider liegen zu diesem Zeitpunkt nur Audiodaten vor. Die Ausgabe "buffer usage:" ist dabei wie folgt zu interpretieren: InVid, InAud, OutVid, OutAud, stream. Die ersten beiden Felder geben also darüber Auskunft, wieviele gefüllte Datenpuffer darauf warten, dekodiert zu werden. Folglich handelt es sich bei den nächsten beiden Feldern um die Anzahl an dekodierten Frames, welche auf die Wiedergabe warten.
Dass man den Ton jedoch nicht hört, liegt wohl daran, dass xine bereits jede Menge "bad (video) frames" mitbekommen hat und diese gegen die "audio frames" synchronisieren möchte. Dass es zu diesem Zeitpunkt bad frames gibt, ist normal -- schließlich steigen wir mitten in den Videostream ein, und die erfolgreiche Dekodierung kann erst mit einem I-Frame beginnen.
Dann folgt eine Stelle mit folgenden Zeilen:
|
Source code
|
1
2
3
|
set_speed 125000
set_speed 1000000
audio_out: inserting 14484 0-frames to fill a gap of 27166 pts
|
und danach sieht man, dass die Anzahl dekodierter Videoframes zunimmt. Für eine flüssige Wiedergabe müssen durchgehend mindestens 3 Frames vorliegen. Doch leider fallen nun die Zahlen der dekodierten Frames wieder ab, bis schließlich Zeilen wie
|
Source code
|
1
2
3
|
buffer usage: 498, 0, 0, 0, 0x8585988
video_out: Verwerfe Bild mit pts 1088051, weil es zu alt ist (Unterschied: 3696).
buffer usage: 498, 0, 0, 0, 0x8585988
|
auftauchen.
Das ist ein Indiz dafür, dass der Rechner wohl zu langsam ist. Laut Aufruf von xine ist der Deinterlacer eingeschaltet. Kannst du ihn mal durch Drücken der Taste "i" deaktivieren und das Szenario nochmals durchspielen?
Was auch noch was bringen dürfte: man sollte für die eingesetzte CPU optimieren lassen. Im Falle von FFmpeg schaut das für meinen P4 so aus:
|
Source code
|
1
|
configure ... --arch=i686 --cpu=pentium4 ...
|
. Was für "--arch" möglich ist, steht in configure:
|
Source code
|
1
2
3
4
5
6
|
case "$arch" in
i386|i486|i586|i686|i86pc|BePC)
arch="x86_32"
enable fast_unaligned
;;
x86_64|amd64)
|
Für "--cpu" muss man in "man gcc" nachschauen (suche nach "pentium4"):
|
Source code
|
1
2
3
4
5
6
7
8
|
pentium4, pentium4m
Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set support.
prescott
Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2 and SSE3 instruction set support.
nocona
Improved version of Intel Pentium4 CPU with 64-bit extensions, MMX, SSE, SSE2 and SSE3 instruction set support.
|
Mitunter macht es auch Sinn, xine-lib (und weil wir schon dabei sind, auch xine-ui) ebenfalls zu optimieren. Hier lautet die Vorgehensweise (wieder am Beispiel für meinen P4):
|
Source code
|
1
|
CFLAGS='-g3 -O3 -march=pentium4' /path/to/configure ...
|
wobei für "-march" der Wert verwendet werden kann, welcher bei FFmpeg für "--cpu" angegeben wurde.
Bye.