Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1
Witam.
Próbuję już kilka dni znaleźć rozwiązanie ale nic z tego nie wychodzi :/
Próbuję zrobić - wydawało by się, najprostszą rzecz - streamować plik avi BEZ rekompresji.
W tym celu ustawiam sobie taki config do ffservera:
Port 8080 BindAddress 0.0.0.0 NoDaemon CustomLog - <Feed feed1.ffm> </Feed> <Stream test1.avi> Feed feed1.ffm Format avi </Stream> <Stream status.html> Format status # Only allow local people to get the status # ACL allow localhost # ACL allow 192.168.0.0 192.168.255.255 </Stream>
a następnie po załączeniu serwera odpalam ffmpeg na zasadzie:
ffmpeg -i /home/james/1.avi -f avi http://0.0.0.0:8080/feed1.ffm
Co skutkuje tym że ffmpeg wypluwa coś w stylu:
ffmpeg version 2.1 Copyright (c) 2000-2013 the FFmpeg developers built on Nov 9 2013 11:40:40 with gcc 4.7 (Debian 4.7.2-5) configuration: libavutil 52. 48.100 / 52. 48.100 libavcodec 55. 39.100 / 55. 39.100 libavformat 55. 19.104 / 55. 19.104 libavdevice 55. 5.100 / 55. 5.100 libavfilter 3. 90.100 / 3. 90.100 libswscale 2. 5.101 / 2. 5.101 libswresample 0. 17.104 / 0. 17.104 Input #0, avi, from '/home/james/1.avi': Duration: 00:07:46.60, start: 0.000000, bitrate: 931 kb/s Stream #0:0: Video: mpeg4 (DX50 / 0x30355844), yuv420p, 480x368 [SAR 1:1 DAR 30:23], 25 fps, 25 tbr, 25 tbn, 30k tbc Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, s16p, 128 kb/s Output #0, avi, to 'http://0.0.0.0:8080/feed1.ffm': Metadata: ISFT : Lavf55.19.104 Stream #0:0: Video: mpeg4 (FMP4 / 0x34504D46), yuv420p, 480x368 [SAR 1:1 DAR 30:23], q=2-31, 200 kb/s, 25 tbn, 25 tbc Stream #0:1: Audio: ac3 ([0] [0][0] / 0x2000), 48000 Hz, stereo, fltp, 192 kb/s Stream mapping: Stream #0:0 -> #0:0 (mpeg4 -> mpeg4) Stream #0:1 -> #0:1 (mp3 -> ac3) Press [q] to stop, [?] for help
i... tyle, koniec, nic więcej się nie ukazuje a ffmpeg się wyłącza - server niby rejestruje że feed zostaje dodany komunikatem:
Sat Nov 9 13:09:43 2013 127.0.0.1 - - [POST] "/feed1.ffm HTTP/1.1" 200 1460
ale próba wejśie za pomocą vlc/mplayera/czy czegokolwiek kończy się bufforowaniem w nieskończoność (ponownie - server widzi klienta co widać w logach, tyle że nic mu nie przesyła poza kilkoma KB najpewniej nagłówka danych).
Próbowałem dodawać opcje typu bitrate, width height, codec itp w konfigu servera, ale nic nie dają. Te same opcjie w konfigu ffmpeg również nic nie dają - chyba że na wyjściu zamiast http dam plik - wtedy dochodzi do rekompresji filmu i zapisania w nowym pliku.
Wiem że można zastosować format w stylu:
<Stream 1.avi> Format AVI File "Scieżka/do/Pliku.avi" </Stream>
Ale u mnie to nie zadziała, potrzebuję streamować ciąg danych otrzymywanych z enkodera h264 na RaspberryPI tak jakby to był ciąg z kamery w /dev/video0.
Generalnie próbuję streamować sobie DVB-T za pomocą PI - udało mi się już załączyć tuner, zapisywać strumień do pipe'a, transkodować go i zapisywać na karcie sieciowej raspberry i wszystko - o dziwo działa. Nawet jakość jest całkiem spoko. Natomiast tak zapisany plik za cholerę nie chce się niczym wysłać, wcześniej walczyłem przez parę dni z VLC (tam w zależności od kodera i mux'a - miałem albo obraz albo dźwięk, albo jedno i drugie ale z rwącymi się klatkami - bynajmniej nie ze względu na zbyt małą wydajność Raspberry PI), teraz z ffmpeg - i o ilę vlc chociaż coś słało, to ffmpeg - mimo setek tutoriali na necie nie chce w ogóle nic wysłać :/
Będę wdzięczny za sugestie, lub ewentualne alternatywy, być może jest jakaś opcja żeby ffserver czytał z pipe'a zamiast z pliku (dodam tylko że próbowałem tworzyć pipe'a ale zawsze coś mu nie pasowało - niezależnie od formatu).
Z góry dzięki za info.
Pozdrawiam.
Offline
Na innym adresie IP to samo?
B na adres 0.0.0.0 może ffmpeg (klient) reagować dziwnie.
Poza tym ACL, chyba nie pozwoliłeś tam na żande adresy.
Spróbuj na serwerze otworzyć ACL allow localhost i klienta posłać na 127.0.0.1.
Ostatnio edytowany przez Jacekalex (2013-11-09 14:12:39)
Offline
Ty chcesz stereamowac dvb ?
Zapodaj tvheadend i będzie dzialać bez żadnego kombinowania.
Offline
@Jacekalex:
Zmianiłem plik konfiguracyjny na coś takiego:
Port 8080 BindAddress 0.0.0.0 NoDaemon CustomLog - <Feed feed1.ffm> ACL allow localhost </Feed> <Stream test1.avi> ACL allow localhost Feed feed1.ffm Format avi </Stream> <Stream status.html> Format status # Only allow local people to get the status ACL allow localhost # ACL allow 192.168.0.0 192.168.255.255 </Stream>
ale nic to nie dało - dodam tylko że jak na mój gust to chyba działało tak samo bez tego gdyż podczas próby podłączania klienta, serwer wypluwa komunikat:
Sat Nov 9 14:29:38 2013 127.0.0.1 - - [POST] "/feed1.ffm HTTP/1.1" 200 1460 Sat Nov 9 14:30:34 2013 127.0.0.1 - - [GET] "/test1.avi HTTP/1.0" 200 1452
a dokładniej ten pierwszy po wpisaniy wcześniejszej komendy ffmpeg -i plik -f avi http://127.0.0.1:8080/feed1.ffm, a drugi przy próbie podłączania klienta (dziwne tylko że dopiero kiedy klient zgłosi błąd że nie może odtworzyć pliku - pewnie czeka na jakąś zwrotkę z jego strony).
Poza tym reszta po staremu - jak nie działało tak nie działa :(
@ilin:
Chodzi o streming po necie, nie w sieci wewnętrznej - tak więc tvheadend odpada... however - jako że obecnie dumpuję stream programów mplayerem (mplayer dvb:// - dumpstream -dumpfile tutajNazwaJakiegośPipe'a.ts), to pytanko - czy za pomocą tvheadendu da się jakoś bez specjalnego softu dumpować strumienie TV (np. nie wiem... wget http://adresProgramu > pipe) ? Czy raczej trzeba by pisać klienta?
Offline
Spróbuj się podłączyć do FFserwera Curlem, zobacz, co leci?
Albo polącz się Firefoxem, ciekawe, co wypisze.
Ostatnio edytowany przez Jacekalex (2013-11-09 14:42:23)
Offline
tvheadend można nagrywać do pliku.
Nie dało by sie podpiąc bezposrednio na adres streamu tvheadend ?
Offline
@Jacekalex:
Firefox po podaniu ścieżki niby widzi plik test1.avi (czyli ten co powinien) ale pobieranie kończy się po paru kilobajtach - potem mam komunikat "Starting..." i nic się nie dzieje (czeka na dane z tego co widzę), curl - jako że nie wiem jak tego używać zapodałem taką komendę:
curl http://127.0.0.1:8080/test1.avi
Jej wynik podobny do powyższego czyli kilka Kb, na header:
}FFAVI ��LIST^strlstrh8auds[@0����strf "V�>LISTtstrlstrh8vidsFMP4@������strf((��FMP4�LISTINFOISFTLavf55.19.104JUNK�^C
A potem wieczna pausa i oczekiwanie na dane
@ilin:
Jakbym posiadał kilka Mb zwrotnego to bym tak zrobił ;] ale muszę się zmieścić w 1 Mb - a to za mało na DVBT bez rekodowania. Jak znajdę jakiś sposób streamingu to sprawdzę tego headenda, może byłby lepszym rozwiązaniem niż obecny mplayer.
Jeszcze w tym momencie dodam - jak zamiast mplayera używałem mencodera do zrzutów, to VLC był w stanie takie pliki odczytać i streamować, ale z jakichś dziwnych względów mencoder widzi zdulowane klatki w strumieniu DVBT i robi dziury i desynchronizację w zrzucie - nawet jak ma opcję copy... może ktoś wie jak to naprawić? Wtedy pewnie VLC by dał radę...
Ostatnio edytowany przez Huk (2013-11-09 20:58:43)
Offline
Update:
Kurde, już wiem czemu powyższe nie działało - wygląda na to że panowie od ffserver/avserver przyjeli założenie że wszystkie dane przekazujemy w konfigu strumienia, i to z niego ffmpeg je sobie pobierze, czyli po ustawieniu strumienia i załączeniu serwera wystarczy dać:
ffmpeg -i jakiśPlik.avi http://0.0.0.0:8080/feed1.ffm
a resztę parametrów ffmpeg pobierze z ustawień serwera. Niestety nikt nie pomyślał żeby w razie niezgodności ustawień przekazywanych do strumienia dać jakikolwiek komunikat (nawet w trybie maksymalnego debugowania nie ma ŻADNEJ INFORMACJI)!!! Przez co nie wiadomo co się dzieje i czemu nie działa :/ chyba muszę do kogoś o to napisać w czasie późniejszym bo straciłem praktycznie dwa tygodnie na taką pierdołę :/
Wracając do sprawy - wygląda na to że kiedy wpiszę sobie do ustawień strumienia kodeki zgodnie z tym co wypluwa encoder na RaspberryPI to mogę w ten sposób zacząć streamowanie na zasadzie:
ffmpeg -i pipeDoKtóregoPiszeEncoderNaRaspberry.avi -vcodec copy -acodec copy http://0.0.0.0:8080/feed1.ffm
acodec copy i vcodec copy są potrzebne o ile nie chcemy aby ffmpeg na nowo kodowało stumień (a nie da się tych opcji dać w ustawieniach strumienia). Teraz DVB-T leci - niestety tak że nadal nic z tego nie wynika - w zależności od muxera, mam w najlepszym wypadku audio bez obrazu, a zwykle nawet tyle nie działa.
Najpewniej chodzi o to że omxtx (programik do kodowania za pomocą sprzętowego encodera h264 na RaspberryPi) nie wstawia globalnych nagłówków strumieni per pakiet tylko czeka do zakończenia enkodowania - tak jakby kodował skończony plik avi (na niektórych mux'ach widzę komunikaty w stylu:
Stream 0 does not use global headers but format require global headers Stream 1 does not use global headers but format require global headers
omxtx z tego co widzę został napisany w oparciu o przykłady z avconv i jest tam włączona opcja do tworzenia globalnych nagłówków, ale chyba nie działa skoro otrzymuję taki komunikat... kurde tak blisko i tak daleko zarazem ;] na razie będę walczyć dalej, ale moje doświadczenie z ffmpeg jest bardzo niewielkie...
Offline
Strony: 1