Προς το περιεχόμενο

VLC - stream - επιλογές transcode video


nikolaos_

Προτεινόμενες αναρτήσεις

Δημοσ.

Θέλω να κάνω streaming διάφορων αρχείων βίντεο μέσω Internet και με το vlc, από το ubuntu 10.04 που έχω.

 

Η μέχρι τώρα εντολή που δίνω είναι:

>cvlc video.wmv --sout '#std{access=http,mux=ts,dst=:23456}'

 

και η οποία λειτουργεί κατ' αρχήν σωστά. Ωστόσο επειδή το uploading όσο και το downloading, γίνονται σχετικά αργά, θέλω να ρίξω την ποιότητα και τις διαστάσεις του βίντεο, προκειμένου να υπάρχει πιο ικανοποιητική μεταφορά.

 

Διαβάζοντας όσο μπορούσα καλύτερα τα wiki του videolan, έκανα μια πρώτη προσπάθεια αποτυχημένη:

>cvlc video.wmv --sout '#transcode{venc=ffmpeg,vcodec=mp2v,fps=100,scale=0.1}:std{access=http,mux=ts,dst=:23456}'

 

Δεν μπορώ να βγάλω άκρη ποια είναι τα λάθη μου για να βελτιώσω το transcode. Οπότε ανοίγω αυτή τη συζήτηση για το τι πρέπει να γράψω, πώς πρέπει να πειραματιστώ.

Δημοσ.

Θα βοηθούσε να έλεγες αν δουλεύει καν αυτό που κάνεις τώρα και τη προβλήματα έχεις..

Π.χ. τώρα τα 100 FPS καρέ ανά δευτερόλεπτα εμένα μου φαίνονται κάπως αλλά ενδέχεται να είναι όντως τόσο το αρχικό.Επίσης το scale=0.1 φαντάζομαι θα το κάνει πάρα πολύ μικρό εκτός και αν είναι τεράστιο το αρχικό δοκίμασε 0.5 δηλαδή μισό μέγεθος ή ακόμα και μεγαλύτερο.Θα βοηθούσε να έβαζες και κάποιο προκαθορισμένο bitrate για ήχο και εικόνα για να μπορείς να ελέγξεις καλύτερα το μέγεθος π.χ. vb=800.

Δημοσ.

Έχω φτιάξει ένα bash script για να μπορώ να πειραματίζομαι με το streaming, το οποίο ονόμασα stream

 

>$ cat ~/bin/stream
#!/bin/bash
#cvlc "$1" --sout '#std{access=http,mux=ts,dst=:12345}'
#cvlc "$1" --sout '#std{access=http,mux=ts,dst=:12345}:#transcode{venc=ffmpeg,vcodec=mp2v,scale=0.1}'
#cvlc "$1" --sout '#transcode{venc=ffmpeg{hurry-up},deinterlace}:std{access=http,mux=ts,dst=:12345}'
cvlc "$1" --sout '#transcode{venc=ffmpeg,vcodec=mp2v,fps=100,scale=0.1}:std{access=http,mux=ts,dst=:12345}'

 

Είναι φανερό ότι η τελευταία γραμμή είναι αυτή που λειτουργεί.

 

Η πρώτη δοκιμή έγινε με ένα βίντεο mp4:

 

>stream M1.mp4
VLC media player 1.0.6 Goldeneye
[0x8eb2ce8] dummy interface: using the dummy interface module...
[0x8ebd578] main access out: creating httpd
Missing reference picture
MPEG1/2 does not support 100/1 fps
[0xb6f026d8] avcodec encoder error: cannot open encoder
[0xb6f026d8] main encoder error: Streaming / Transcoding failed
[0xb6f026d8] main encoder error: VLC could not open the encoder.
[0xb6f03968] stream_out_transcode stream out error: cannot find video encoder (module:ffmpeg fourcc:mp2v)

 

Για το τι και πώς είναι το αρχείο M1.mp4 έκανα το εξής

>$ ffmpeg -i M1.mp4
FFmpeg version SVN-r0.5.1-4:0.5.1-1ubuntu1.1, Copyright (c) 2000-2009 Fabrice Bellard, et al.
 configuration: --extra-version=4:0.5.1-1ubuntu1.1 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --disable-stripping --disable-vhook --enable-runtime-cpudetect --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --enable-shared --disable-static
 libavutil     49.15. 0 / 49.15. 0
 libavcodec    52.20. 1 / 52.20. 1
 libavformat   52.31. 0 / 52.31. 0
 libavdevice   52. 1. 0 / 52. 1. 0
 libavfilter    0. 4. 0 /  0. 4. 0
 libswscale     0. 7. 1 /  0. 7. 1
 libpostproc   51. 2. 0 / 51. 2. 0
 built on Mar 31 2011 18:53:20, gcc: 4.4.3

Seems stream 0 codec frame rate differs from container frame rate: 50.00 (50/1) -> 25.00 (25/1)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'Μ1.mp4':
 Duration: 00:45:24.04, start: 0.000000, bitrate: 1028 kb/s
   Stream #0.0(und): Video: h264, yuv420p, 512x384, 25 tbr, 25 tbn, 50 tbc
   Stream #0.1(und): Audio: aac, 44100 Hz, stereo, s16
At least one output file must be specified

 

Η δεύτερη απόπειρα με ένα αρχείο .avi :

 

>
$ stream M2.avi
VLC media player 1.0.6 Goldeneye
[0x8d227e8] dummy interface: using the dummy interface module...
[0x8d2fa20] main access out: creating httpd
MPEG1/2 does not support 100/1 fps
[0xb6f04418] avcodec encoder error: cannot open encoder
[0xb6f04418] main encoder error: Streaming / Transcoding failed
[0xb6f04418] main encoder error: VLC could not open the encoder.
[0x8d23e48] stream_out_transcode stream out error: cannot find video encoder (module:ffmpeg fourcc:mp2v)

 

Έχω και μια τρίτη προσπάθεια με ένα .wmv αρχείο, αλλά δε παραθέτω τι βγάζει για συντομία, μιας που τα ίδια περίπου εξάγει και αυτό.

 

Το αποτέλεσμα είναι να μου στέλνει το stream χωρίς να έχει περάσει επεξεργασία, δηλαδή να το λαμβάνω μεν αλλά με τις ανεπιθύμητες καθυστερήσεις και τα "παγώματα" της εικόνας. Επίτηδες βάζω scale=0.1 για να έχω μια στοιχειώδη αψεγάδιαστη ροή, εννοείται πως αν αρχίσει να γίνεται σωστά, θα βρω κατόπιν μια ιδανική τιμή για την κλίμακα της εικόνας που να εξυπηρετεί την ομαλή ροή. Μέχρι στιγμής όμως το scale=0.1 μπορεί να το έβαλα αλλά δεν συμβαίνει, το βίντεο έρχεται στις αρχικές του διαστάσεις.

 

Από ό,τι αντιλαμβάνομαι, δε βρίσκει τον ffmpeg κωδικοποιητή, αλλά αυτό είναι λίγο παράδοξο, διότι το έχω ήδη εγκατεστημένο. Από ένα ψάξιμο στο internet, από αυτά που διαβάζω, αλλού υποθέτω ότι πρέπει να ξανακάνω compilation του VLC, αλλού υποθέτω ότι πρέπει να εγκαταστήσω βιβλιοθήκες, γενικά δεν έχω καταλήξει οριστικά σε κάτι που πρέπει να κάνω. Επιπλέον, μπορεί εγώ να μη συντάσσω κάτι σωστά και να μη βρίσκει για άλλο λόγο τον ffmpeg. Υπενθυμίζω ότι όλα αυτά τα έχω σε ubuntu 10.04.

 

Γι' αυτό και ρωτάω το insomnia forum, για να μην πελαγώσω. Διότι αν κάνω δοκιμές με ό,τι βρίσκω και νομίζω πως μου κάνει, θα τα κάνω σαλάτα.

 

Εννοείται πως αν ζητήσετε κάποια επιπλέον πληροφορία, θα την παρέξω.

Δημοσ.

Εγώ λέω να ξεχάσεις αρχικά το streaming και να συγκεντρωθείς στο τομέα της μετατροπής για να δεις τα προβλήματά σου τοπικά και μετά για το stream το προσαρμόζεις.

 

Για να γλιτώσεις το εγκεφαλικό:

Δεν χρειάζεται να δουλέψεις με το ffmpeg το VLC έχει δικά του codec,αν προτιμάς το ff άλλο αυτό.

Μπορείς να τρέξεις την κανονική έκδοση του vlc να σετάρεις κανονικά το transcode/stream και να πάρεις της παραμέτρους για το commandline με αυτών των τρόπο δες εδώ είναι λίγο διαφορετικά σε ποιο καινούργιες εκδόσεις αλλά βασικά είναι το ίδιο κάποια στιγμή βλέπεις το παράθυρο με έτοιμες ρυθμίσεις.

 

Το να μετατρέπεις ένα βίντεο σε πραγματικό χρόνο δεν είναι εύκολο χρειάζεται πάρα πολύ δυνατός CPU ενδέχεται δηλαδή οι ανεπιθύμητες καθυστερήσεις και τα "παγώματα" της εικόνας να προέρχονται από αυτό.

Το scale είναι μόνο για τοπική προβολή δεν περνάει στο τελικό αποτέλεσμα,και αφού δεν ορίζεις bitrate παραμένει το ίδιο μεγάλο σε όγκο δεδομένων.

Οι παρακάτω εντολές είναι για windows οπότε ίσως θέλουν αλλαγές.

Σημαντικό είναι να ξέρεις πόσο είναι το upload σου για να υπολογίσεις πόσο max μπορεί να είναι το bitrate για βίντεο και ήχο στο σύνολο.

 

:sout=#transcode{vcodec=mp4v,vb=500,fps=25,scale=0,width=800,height=600,acodec=mp4a,ab=68,channels=2,samplerate=22050}:display :no-sout-rtp-sap :no-sout-standard-sap :ttl=1 :sout-keep

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...