2009-11-19 28 views
6

Chỉnh sửa
Tôi đã ngừng sử dụng VLC và chuyển sang GMax FLV Encoder. Nó làm một công việc tốt hơn IMO.VLC máy tính để bàn phát trực tuyến

bài gốc
Tôi gửi máy tính để bàn của tôi (màn hình) như một dòng video H264 sang một máy mà lưu nó vào một tập tin bằng cách sử dụng dòng lệnh follwoing:

Người gửi của các dòng:

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

Receiver của con suối:

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

này hoạt động, nhưng t đây là một vài vấn đề:

  • Không thể phát tệp với hầu hết người chơi.
  • VLC có thể phát lại tệp nhưng với một số điều kỳ lạ:
  • => mất khoảng 10 giây trước khi phát lại thực sự bắt đầu.
  • => tìm kiếm không hoạt động.

Ai đó có thể chỉ cho tôi đúng hướng về cách khắc phục các sự cố này không?

EDIT: Tôi đã thực hiện một chút tiến bộ.

Độ trễ ban đầu khi phát lại là do trình phát đang chờ khung hình chính. Bằng cách buộc người gửi luồng đó tạo khung hình mới sau mỗi 4 giây, tôi có thể giảm độ trễ:

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

Vấn đề tìm kiếm vẫn chưa được giải quyết nhưng tôi hiểu rõ hơn một chút. Luồng RTP được lưu dưới dạng tệp ở định dạng phát trực tuyến gốc, thường không thể phát dưới dạng tệp video thông thường. VLC quản lý để chơi tập tin này, nhưng hầu hết người chơi khác không. Vì vậy, tôi cần phải chuyển đổi nó thành một tập tin video thông thường. Tôi hiện đang điều tra xem tôi có thể làm điều này với ffmpeg không nếu tôi cung cấp tệp SDP cho luồng đã ghi.

Tất cả trợ giúp đều được chào đón!

+0

tôi không có đầu mối làm thế nào để trả lời câu hỏi này, nhưng có bạn đã cố gắng sử dụng một trình biên tập video và lưu file dưới dạng khác nhau định dạng? – Mottie

+0

Có, với ffmpeg tôi đã thử sửa chữa, nhưng có vẻ như giảm toàn bộ đầu ra thành một vài khung hình, vì vậy tôi đã kết thúc bằng một video thứ hai. – StackedCrooked

+1

Chương trình này có liên quan như thế nào? –

Trả lời

6

Cập nhật dòng lệnh gửi của bạn với:

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

Và dòng lệnh khách hàng của bạn như:

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

nên khắc phục vấn đề của bạn. Bạn đã thử nghiệm người chơi nào?

+0

Thiết lập mux = mp4 thực sự hữu ích, đó là một sự xấu hổ mà nó không được đề cập đến các tài liệu (http://www.videolan.org/doc/streaming-howto/en/ch03.html). Hôm nay tôi đã tìm ra rằng thiết lập bframes = 0 sẽ dẫn đến một tập tin có thể được sửa với ffmpeg, nhưng bây giờ điều này cũng không còn cần thiết nhờ thiết lập mux = mp4. Tuy nhiên, scenecut = 20 giúp khắc phục sự cố của tôi như thế nào? Hay nó chỉ là một tối ưu hóa? – StackedCrooked

+0

Một câu hỏi khác: tại sao bạn lại bỏ cài đặt keyint = 40 của x264? – StackedCrooked

+0

Btw, tôi đã thử nghiệm với Trình phát phim và Trình phát GNOME trên vbox Mint của tôi. Cả hai đều có thể phát bản ghi âm của tôi nhờ cài đặt bạn đã cung cấp. PS: Trả lời các câu hỏi trên và tiền thưởng là của bạn. – StackedCrooked

0

Tên người gửi:

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

Receiver:

$ 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... 
Các vấn đề liên quan