2009-11-19 19 views
6

Modifica
Ho smesso di utilizzare VLC e passata a GMax FLV Encoder. Fa un lavoro molto migliore IMO.Streaming desktop VLC

Original post
io mando il mio desktop (schermo) come un flusso video H264 a un'altra macchina che salva in un file utilizzando i follwoing righe di comando:

mittente del flusso:

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

Ricevitore del torrente:

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

Questo funziona, ma t Ecco alcuni problemi:

  • Il file non è riproducibile con la maggior parte dei giocatori.
  • VLC è in grado di riprodurre il file ma con qualche stranezza:
  • => ci vogliono circa 10 secondi prima che inizi effettivamente la riproduzione.
  • => la ricerca non funziona.

Qualcuno può indicarmi la giusta direzione su come risolvere questi problemi?

EDIT: ho fatto un piccolo progresso.

Il ritardo iniziale nella riproduzione è dovuto al fatto che il lettore è in attesa di un fotogramma chiave. Forzando il mittente del flusso per creare un nuovo fotogramma chiave ogni 4 secondi ho potuto diminuire il ritardo:

: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}' 

Il problema in cerca non è risolto però, ma capisco un po 'meglio. Il flusso RTP viene salvato come un file nel suo formato di streaming originale, che normalmente non è riproducibile come un normale file video. VLC riesce a riprodurre questo file, ma la maggior parte degli altri giocatori no. Quindi ho bisogno di convertirlo in un normale file video. Attualmente sto studiando se posso farlo con ffmpeg se fornisco un file SDP per il flusso registrato.

Tutti gli aiuti sono benvenuti!

+0

non ho idea di come rispondere a questa domanda, ma hai provato a usare un editor video e salvare il file come un diverso formato? – Mottie

+0

Sì, con ffmpeg ho tentato una riparazione, ma sembra ridurre l'intero output a pochi fotogrammi, quindi ho finito con un video di 1 secondo. – StackedCrooked

+1

Come è correlata questa programmazione? –

risposta

6

Aggiornamento riga di comando mittente con:

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

e la vostra linea di comando cliente come:

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

dovrebbe risolvere i vostri problemi. Quali giocatori hai provato?

+0

Impostare mux = mp4 è davvero utile, è un peccato che non sia menzionato il documento (http://www.videolan.org/doc/streaming-howto/en/ch03.html). Oggi ho capito che impostando bframes = 0 si otterrebbe un file che può essere corretto con ffmpeg, ma ora non è più necessario grazie all'impostazione mux = mp4. Tuttavia, in che modo scenecut = 20 aiuta a risolvere il mio problema? O è solo un'ottimizzazione? – StackedCrooked

+0

Un'altra domanda: perché hai omesso l'impostazione keyint = 40 di x264? – StackedCrooked

+0

Btw, ho provato con Movie Player e GNOME Player sul mio Mint vbox. Entrambi sono ora in grado di riprodurre le mie registrazioni grazie alle impostazioni fornite. PS: Rispondi alle domande precedenti e la taglia è tua. – StackedCrooked

0

mittente:

$ 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... 

Ricevitore:

$ 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...