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!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2013-11-09 13:26:39

  Huk - Smoleńsk BULWA!

Huk
Smoleńsk BULWA!
Zarejestrowany: 2006-11-08

FFSERVER - problem ze streamowaniem najprostrzych rzeczy...

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:

Kod:

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:

Kod:

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:

Kod:

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:

Kod:

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:

Kod:

<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

 

#2  2013-11-09 14:11:04

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: FFSERVER - problem ze streamowaniem najprostrzych rzeczy...

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)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#3  2013-11-09 14:17:01

  ilin - Palacz

ilin
Palacz
Skąd: PRLu
Zarejestrowany: 2006-05-03

Re: FFSERVER - problem ze streamowaniem najprostrzych rzeczy...

Ty chcesz stereamowac dvb ?
Zapodaj tvheadend i będzie dzialać bez żadnego kombinowania.


Problemy rozwiązujemy na forum nie na PW -> Niech inni na tym skorzystają.
Polski portal Debiana

Offline

 

#4  2013-11-09 14:39:24

  Huk - Smoleńsk BULWA!

Huk
Smoleńsk BULWA!
Zarejestrowany: 2006-11-08

Re: FFSERVER - problem ze streamowaniem najprostrzych rzeczy...

@Jacekalex:

Zmianiłem plik konfiguracyjny na coś takiego:

Kod:

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:

Kod:

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

 

#5  2013-11-09 14:41:23

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: FFSERVER - problem ze streamowaniem najprostrzych rzeczy...

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)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#6  2013-11-09 14:54:56

  ilin - Palacz

ilin
Palacz
Skąd: PRLu
Zarejestrowany: 2006-05-03

Re: FFSERVER - problem ze streamowaniem najprostrzych rzeczy...

tvheadend można nagrywać do pliku.

Nie dało by sie podpiąc bezposrednio na adres streamu tvheadend ?


Problemy rozwiązujemy na forum nie na PW -> Niech inni na tym skorzystają.
Polski portal Debiana

Offline

 

#7  2013-11-09 15:37:48

  Huk - Smoleńsk BULWA!

Huk
Smoleńsk BULWA!
Zarejestrowany: 2006-11-08

Re: FFSERVER - problem ze streamowaniem najprostrzych rzeczy...

@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ę:

Kod:

curl http://127.0.0.1:8080/test1.avi

Jej wynik podobny do powyższego czyli kilka Kb, na header:

Kod:

}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

 

#8  2013-11-11 15:54:33

  Huk - Smoleńsk BULWA!

Huk
Smoleńsk BULWA!
Zarejestrowany: 2006-11-08

Re: FFSERVER - problem ze streamowaniem najprostrzych rzeczy...

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ć:

Kod:

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:

Kod:

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:

Kod:

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

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)