nikolaos_ Δημοσ. 10 Αυγούστου 2011 Δημοσ. 10 Αυγούστου 2011 Θέλω να κάνω 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. Οπότε ανοίγω αυτή τη συζήτηση για το τι πρέπει να γράψω, πώς πρέπει να πειραματιστώ.
TheELF Δημοσ. 10 Αυγούστου 2011 Δημοσ. 10 Αυγούστου 2011 Θα βοηθούσε να έλεγες αν δουλεύει καν αυτό που κάνεις τώρα και τη προβλήματα έχεις.. Π.χ. τώρα τα 100 FPS καρέ ανά δευτερόλεπτα εμένα μου φαίνονται κάπως αλλά ενδέχεται να είναι όντως τόσο το αρχικό.Επίσης το scale=0.1 φαντάζομαι θα το κάνει πάρα πολύ μικρό εκτός και αν είναι τεράστιο το αρχικό δοκίμασε 0.5 δηλαδή μισό μέγεθος ή ακόμα και μεγαλύτερο.Θα βοηθούσε να έβαζες και κάποιο προκαθορισμένο bitrate για ήχο και εικόνα για να μπορείς να ελέγξεις καλύτερα το μέγεθος π.χ. vb=800.
nikolaos_ Δημοσ. 11 Αυγούστου 2011 Μέλος Δημοσ. 11 Αυγούστου 2011 Έχω φτιάξει ένα 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, για να μην πελαγώσω. Διότι αν κάνω δοκιμές με ό,τι βρίσκω και νομίζω πως μου κάνει, θα τα κάνω σαλάτα. Εννοείται πως αν ζητήσετε κάποια επιπλέον πληροφορία, θα την παρέξω.
TheELF Δημοσ. 11 Αυγούστου 2011 Δημοσ. 11 Αυγούστου 2011 Εγώ λέω να ξεχάσεις αρχικά το 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
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.