2009-11-19 23 views
6

Editar
Dejé de usar VLC y cambié a GMax FLV Encoder. Hace un trabajo mucho mejor IMO.VLC desktop streaming

Post original
Yo envío a mi escritorio (pantalla) como una secuencia de vídeo H264 a otra máquina que lo guarda en un archivo con las líneas de comandos follwoing:

remitente de la corriente:

vlc -I dummy 
    --sout='#transcode{vcodec=h264,vb=512,scale=0.5} 
      :rtp{mux=ts,dst=192.168.0.1,port=4444}' 

receptor de la corriente:

vlc -I rc 
    rtp://@:4444 
    --sout='#std{access=file,mux=ps,dst=/home/user/output.mp4}' 
    --ipv4 

Esto funciona, pero t aquí hay algunas cuestiones:

  • El archivo no se puede reproducir con la mayoría de los reproductores.
  • VLC puede reproducir el archivo pero con algunas rarezas:
  • => tardan unos 10 segundos antes de que comience realmente la reproducción.
  • => buscando no funciona.

¿Puede alguien señalarme en la dirección correcta sobre cómo solucionar estos problemas?

EDIT: Hice un pequeño progreso.

El retraso inicial en la reproducción se debe a que el reproductor está esperando un fotograma clave. Al obligar al emisor de la corriente para crear una nueva clave-marco cada 4 segundos pude reducir el retardo:

:screen-fps=10 
--sout='#transcode{vcodec=h264,venc=x264{keyint=40},vb=512,scale=0.5} 
     :rtp{mux=ts,dst=192.168.0.1,port=4444}' 

El problema no se resuelve la búsqueda sin embargo, pero entiendo un poco mejor. La secuencia RTP se guarda como un archivo en su formato de transmisión original, que normalmente no se puede reproducir como un archivo de video normal. VLC logra reproducir este archivo, pero la mayoría de los otros jugadores no. Entonces necesito convertirlo a un archivo de video normal. Actualmente estoy investigando si puedo hacer esto con ffmpeg si le proporciono un archivo SDP para la transmisión grabada.

¡Toda la ayuda es bienvenida!

+0

no tengo ni idea de cómo responder a esta pregunta, pero ¿ha intentado utilizar un editor de vídeo y guardar el archivo como un diferente ¿formato? – Mottie

+0

Sí, con ffmpeg intenté repararlo, pero parece reducir toda la salida a unos pocos cuadros, así que terminé con un video de 1 segundo. – StackedCrooked

+1

¿Cómo se relaciona esta programación? –

Respuesta

6

La actualización de su línea de comandos con el remitente:

venc=x264{scenecut=20,bframes=0} 

Y su línea de comandos del cliente como:

vlc -I rc rtp://@:4444 --sout='#std{access=file,mux=mp4,dst=/tmp/output.mp4}' --ipv4 

debería solucionar sus problemas. ¿Qué jugadores probaron?

+0

Configurar mux = mp4 es realmente útil, es una pena que no se mencionen los documentos (http://www.videolan.org/doc/streaming-howto/en/ch03.html). Hoy descubrí que configurar bframes = 0 daría como resultado un archivo que se puede arreglar con ffmpeg, pero ahora esto ya no es necesario gracias a la configuración mux = mp4. Sin embargo, ¿cómo ayuda scenecut = 20 a solucionar mi problema? ¿O es solo una optimización? – StackedCrooked

+0

Una pregunta más: ¿por qué omitió la configuración keyint = 40 de x264? – StackedCrooked

+0

Por cierto, probé con Movie Player y GNOME Player en mi vbox de Mint. Ambos ahora pueden reproducir mis grabaciones gracias a la configuración proporcionada. PD: Responda las preguntas anteriores y la recompensa es suya. – StackedCrooked

0

remitente:

$ vlc screen:// :screen-fps=5 :screen-caching=100 --sout='#transcode{vcodec=h264,venc=x264{scenecut=20,bframes=0},vb=512,scale=0.5}:rtp{mux=ts,dst=127.0.0.1,port=1234}' 
VLC media player 1.1.11 The Luggage (revision exported) 
Blocked: call to unsetenv("DBUS_ACTIVATION_ADDRESS") 
Blocked: call to unsetenv("DBUS_ACTIVATION_BUS_TYPE") 
[0x9caf8fc] main libvlc: Running vlc with the default interface. Use 'cvlc' to use vlc without interface. 
Blocked: call to setlocale(6, "") 
Warning: call to srand(1314435080) 
Warning: call to rand() 
Blocked: call to setlocale(6, "") 

(process:11597): Gtk-WARNING **: Locale not supported by C library. 
    Using the fallback 'C' locale. 
x264 [info]: using cpu capabilities: MMX2 Cache64 
x264 [info]: profile High, level 3.2 
x264 [info]: using SAR=1/1 
x264 [info]: using cpu capabilities: MMX2 Cache64 
x264 [info]: profile High, level 4.0 
x264 [info]: frame I:1  Avg QP:16.44 size: 57235 
x264 [info]: frame P:152 Avg QP:10.01 size: 2747 
x264 [info]: mb I I16..4: 33.8% 2.7% 63.5% 
x264 [info]: mb P I16..4: 0.9% 0.0% 0.9% P16..4: 2.1% 0.4% 0.3% 0.0% 0.0% skip:95.4% 
x264 [info]: 8x8 transform intra:1.8% inter:44.3% 
x264 [info]: coded y,uvDC,uvAC intra: 45.5% 42.9% 40.5% inter: 1.5% 1.5% 1.4% 
x264 [info]: i16 v,h,dc,p: 45% 54% 0% 0% 
x264 [info]: i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 24% 41% 22% 2% 2% 2% 4% 1% 3% 
x264 [info]: i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 16% 49% 13% 2% 3% 3% 5% 2% 7% 
x264 [info]: i8c dc,h,v,p: 43% 49% 7% 2% 
x264 [info]: Weighted P-Frames: Y:0.0% UV:0.0% 
x264 [info]: ref P L0: 85.8% 4.5% 9.1% 0.7% 
x264 [info]: kb/s:124.12 
^C[0x9d4ee6c] signals interface error: Caught Interrupt signal, exiting... 

receptor:

$ vlc udp://:1234 
VLC media player 1.1.11 The Luggage (revision exported) 
Blocked: call to unsetenv("DBUS_ACTIVATION_ADDRESS") 
Blocked: call to unsetenv("DBUS_ACTIVATION_BUS_TYPE") 
[0x8c728fc] main libvlc: Running vlc with the default interface. Use 'cvlc' to use vlc without interface. 
Blocked: call to setlocale(6, "") 
Warning: call to srand(1314469032) 
Warning: call to rand() 
Blocked: call to setlocale(6, "") 

(process:11707): Gtk-WARNING **: Locale not supported by C library. 
    Using the fallback 'C' locale. 
libdvbpsi error (PSI decoder): TS discontinuity (received 1, expected 0) for PID 0 
libdvbpsi error (PSI decoder): TS discontinuity (received 1, expected 0) for PID 66 
libdvbpsi error (PSI decoder): TS discontinuity (received 6, expected 5) for PID 0 
libdvbpsi error (PSI decoder): TS discontinuity (received 8, expected 7) for PID 0 
libdvbpsi error (PSI decoder): TS discontinuity (received 10, expected 9) for PID 0 
libdvbpsi error (PSI decoder): TS discontinuity (received 14, expected 13) for PID 0 
libdvbpsi error (PSI decoder): TS discontinuity (received 0, expected 15) for PID 66 
libdvbpsi error (PSI decoder): TS discontinuity (received 2, expected 1) for PID 66 
libdvbpsi error (PSI decoder): TS discontinuity (received 12, expected 11) for PID 66 
libdvbpsi error (PSI decoder): TS discontinuity (received 14, expected 13) for PID 66 
libdvbpsi error (PSI decoder): TS discontinuity (received 0, expected 15) for PID 66 
libdvbpsi error (PSI decoder): TS discontinuity (received 2, expected 1) for PID 66 
libdvbpsi error (PSI decoder): TS discontinuity (received 7, expected 6) for PID 0 
libdvbpsi error (PSI decoder): TS discontinuity (received 9, expected 8) for PID 0 
libdvbpsi error (PSI decoder): TS discontinuity (received 11, expected 10) for PID 0 
libdvbpsi error (PSI decoder): TS discontinuity (received 13, expected 12) for PID 66 
libdvbpsi error (PSI decoder): TS discontinuity (received 15, expected 14) for PID 66 
libdvbpsi error (PSI decoder): TS discontinuity (received 1, expected 0) for PID 0 
libdvbpsi error (PSI decoder): TS discontinuity (received 8, expected 7) for PID 66 
libdvbpsi error (PSI decoder): TS discontinuity (received 11, expected 10) for PID 0 
libdvbpsi error (PSI decoder): TS discontinuity (received 13, expected 12) for PID 66 
libdvbpsi error (PSI decoder): TS discontinuity (received 4, expected 3) for PID 0 
libdvbpsi error (PSI decoder): TS discontinuity (received 8, expected 7) for PID 66 
[0xb740070c] main input error: ES_OUT_SET_(GROUP_)PCR is called too late (pts_delay increased to 300 ms) 
^C[0x8d11cec] signals interface error: Caught Interrupt signal, exiting...