Skocz do zawartości
Liar

Streaming video w mp4 z avi

Polecane posty

Witam

Mam następujące pytanie chciałbym użytkownikom streamować pliki video, które są w formacie avi, do tego może mi służyć DivX Web Player, jednak trzeba go instalować oraz często pojawiają się opóźnienia dźwięku, obrazu bądź wcale video nie chce się odtwarzać.

Tutaj pojawia się pytanie jak streamować pliki avi dla użytkowników w mp4 ?

 

Wygląda to mniej więcej tak:

 

Serwer 1

pliki avi

Serwer 2

ffmpeg + serwer www

 

Czy dałoby się zrobić to w następujący sposób

 

Użytkownik otrzymuje stream w mp4 w playerze <- Serwer 2 pobiera plik avi i konwertuje go na mp4

Chciałbym aby to działało live, czyli żadne mp4 nie zostają, jak użytkownik chce obejrzeć super.avi to serwer 2 konwertuje super.avi do super.mp4, ale gdy użytkownik przerwie oglądanie, bądź wyłączy stronę konwersja się również wyłączy.

 

 

Jest coś takiego możliwe ?

 

Z góry wielkie dzięki.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Sumie nie łatwiej streamować przy użyciu RTMP? Wszystko możesz trzymać na jednym serwerze i zapewne opóźnienie będzie mniejsze ;) Jako odtwarzacza możesz użyć jwplayer. Jeśli byś miał jakiś problem to pisz śmiało na pw!

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dołączę się do pytania, ale trochę w innym kontekście.

 

Eskimos, piszesz o użyciu protokołu RTMP. Czy mógłbyś polecić jakieś oprogramowanie (najlepiej darmowe) do streamingu właśnie na tym protokole z poziomu Windowsa? Próbowałem do tego wykorzystać VLC media player, lecz niestety chyba nie wspiera tego protokołu (wspiera m.in. RTSP, RTP, czyli nie to czego potrzebuję). Najlepiej chyba jakieś inne oprogramowanie niż VLC. Dodam, że serwer uruchomiony jest na nginx.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

@Eskimos

A nie wiesz w jaki sposób robi to serwis chomikuj ? Oni dają możliwość podglądu video.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Jeżeli masz zamiar podawać pliki .avi z serwera w formacie mp4 to moduł rtmp pozwala na odpalanie ffmpega w momencie gdy user chce odpalić film.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Do stremowania używam popularnego programu o nazwie Open Broadcaster Software, a jako serwera nginx'a z modułem rtmp dostępnego tutaj ;)

 

 

Czesc, mam pytanko, moglbys podac jakis poradnik szczegolowy, jak zbudowac taki serwer? Tj. instalacja oraz konfiguracja na debianie. Moze byc po polsku lub angielsku, pozdrawiam :)

 

Generalnie cos takiego znalazlem, nadaje sie? Jeszcze mam troche czasu, nadaje na zawnetrzne serwery typu ustream przez ffmpeg, ale mam zamiar w najblizszym czasie zaczac nadawac bezposrednio ze swojego.

 

http://www.piotrdyduch.pl/debian-nginx-rtmp-module/

 

Troche wydaje mi sie ubogi poradnik, dodatkowo, wedlug niego nadaje 1 kanal "stream", a jak dodac wiecej streamow? Oraz jak to mialoby wygladac przy wspolpracy z ffmpeg? powinienem nadawac ffmpegiem jako output jakis plik np mp4, po czym link do tego pliku bylby linkiem do streamu? Tylko, wydaje mi sie ze ffmpeg bedzie zapisywal caly plik, wiec jak sie wejdzie w link to nie bedzie na zywo tylko bedzie szlo od samego poczatku, czyli od momentu az ffmpeg rozpoczal zapisywanie pliku mp4.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Do stremowania używam popularnego programu o nazwie Open Broadcaster Software, a jako serwera nginx'a z modułem rtmp dostępnego tutaj ;)

 

 

Dzięki. Szkoda tylko, że niema wersji pod XP, bo nie wspiera jakiegoś DirectX. I działa ten program dopiero od Visty.

 

Znacie może jeszcze jakieś inne programy ze wsparciem RTMP do nadawania z poziomu systemu XP?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

 

Czesc, mam pytanko, moglbys podac jakis poradnik szczegolowy, jak zbudowac taki serwer? Tj. instalacja oraz konfiguracja na debianie. Moze byc po polsku lub angielsku, pozdrawiam :)

 

Nagrałem filmik jakis czas temu niedługo umieszcze kolejne, ze wzgledu na zapytania od ludzi.

 

Proszę

 

Edytowano przez limes (zobacz historię edycji)
  • Upvote 1

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Okej, próbowałem i chyba się poddam, obciążenie serwera jest spore, wręcz ogromne.

Tutaj pojawia się następujące pytanie, w jaki sposób to robi np: catshare

Stream jest w .flv ale po pobraniu danego piku otrzymujemy .mkv bądź avi.

Jakaś pomoc ? Z góry dziękuję.

Tutaj przyklad: catshare.net/test

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość

Witam

 

Dla zainteresowanych, sprzedam poradnik poprawnej konfiguracji nginx oraz panel do zakładania i zarządzania kanałami na danym serwerze .

 

Cena 200zł od sztuki, prosze pisać na PW .

 

29zok7s.jpg

Edytowano przez Gość (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Komendy, które doprowadzą do instalacji "portable" nginx-rtmp:

apt-get update
apt-get upgrade -y
apt-get install -y git screen htop iftop nano curl libpcre3-dev libssl-dev
git clone https://github.com/moezzie/nginx-portable.git
cd nginx-portable
git clone https://github.com/arut/nginx-rtmp-module.git
Do pliku compile, do linijki zaczynającej się od ./configure należy dodać:

 --add-module=/bezwzgledny_adres_do_aktualnego_katalogu/nginx-rtmp-module
Następnie znowu komenda:

./compile
Podstawowa konfiguracja bez zabezpieczeń:

worker_processes  1;

events {
    worker_connections  8192;
}

rtmp {
    server {
        listen 1935;

        application live {
            live on;
        }
    }
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    access_log off;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       3001;
        server_name  localhost;

       root html;

        location / {
            index  index.html index.htm;
        }

        location /statt {
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }

        location /stat.xsl {
            root nginx-rtmp-module;
        }
        location /controlll {
            rtmp_control all;
            allow 127.0.0.1;
            deny all;
        }
    }

}
Uruchomienie:

./nginx-portable start
Jeżeli chodzi o ten panel bardzo prosto go zrobić (wywoływanie komend dla re-streamu + baza streamów, nawet na plikach), ale jak ktoś nie potrafi sam zrobić - to czemu nie.

 

Jeżeli ktoś jest zainteresowany zabezpieczeniami streamu (nie prosty secure_token, ale własne rozwiązanie) to zapraszam do kontaktu.

Edytowano przez Misiek08 (zobacz historię edycji)
  • Upvote 1

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Komendy, które doprowadzą do instalacji "portable" nginx-rtmp:

apt-get update
apt-get upgrade -y
apt-get install -y git screen htop iftop nano curl libpcre3-dev libssl-dev
git clone https://github.com/moezzie/nginx-portable.git
cd nginx-portable
git clone https://github.com/arut/nginx-rtmp-module.git
Do pliku compile, do linijki zaczynającej się od ./configure należy dodać:

 --add-module=/bezwzgledny_adres_do_aktualnego_katalogu/nginx-rtmp-module
Następnie znowu komenda:

./compile
Podstawowa konfiguracja bez zabezpieczeń:

worker_processes  1;

events {
    worker_connections  8192;
}

rtmp {
    server {
        listen 1935;

        application live {
            live on;
        }
    }
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    access_log off;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       3001;
        server_name  localhost;

       root html;

        location / {
            index  index.html index.htm;
        }

        location /statt {
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }

        location /stat.xsl {
            root nginx-rtmp-module;
        }
        location /controlll {
            rtmp_control all;
            allow 127.0.0.1;
            deny all;
        }
    }

}
Uruchomienie:

./nginx-portable start
Jeżeli chodzi o ten panel bardzo prosto go zrobić (wywoływanie komend dla re-streamu + baza streamów, nawet na plikach), ale jak ktoś nie potrafi sam zrobić - to czemu nie.

 

Jeżeli ktoś jest zainteresowany zabezpieczeniami streamu (nie prosty secure_token, ale własne rozwiązanie) to zapraszam do kontaktu.

Dzieki za prosty poradnik, jedno pytanie brzmi, jak teraz nadawac? Gdzie powinienem zapisywac z ffmpeg, oraz jaki adres potem podac np w vlc zeby odtworzyc stream.

 

no i jak moge sprawdzic czy wszystko jest ok? uzywalem wczesniej apache, teraz po usunieciu apache i zainstalowaniu nginxa, moge jakos sprawdzic przez przegladarke czy wszystko jest ok? bo po wpisaniu adresu ip mojego serwera, cos tam laduje ale w efekcie pokazuje blad wczytywania strony.

 

Edytowano przez jasiek07 (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

To co podałem to akurat przykładowa konfiguracja. Nadajesz na <IP>/live/<nazwastreama> i tak samo odtwarzasz.

 

Dzieki za pomoc. A mam pytanko jeszcze, na jakiej zasadzie to dziala? Poniewaz ja np. nadaje z tego samego serwera na ktory wysylam tak jakby, bo adres rtmp servera to ten sam z ktorego wysylam np z ffmpeg. I to dziala na takiej zasadzie ze zapisuje plik na dysku gdzies? Chodzi mi o to, czy ilosc osob, ktora oglada dany stream ma jakies znaczenie w mojej sytuacji? Poniewaz chcialbym zeby to wygladalo mniej wiecej tak, ze ja streamuje, ale tak jakby transfer wychodzacy z mojego serwera odbywa sie dopiero gdy ktos oglada (czyli jakby pobiera) video z mojego serwera, a jesli nikt nie oglada to transfer na zewnatrz mojego serwera sie nie odbywa, a plik jest tylko zapisywany na dysku.. Troche to niezbyt profesjonalnie wyjasnilem, ale mam nadzieje ze wiadomo o co mi chodzi. Pytam, poniewaz wydaje mi sie ze zeby osiagnac to o czym ja mowie, to z ffmpega powinienem jako out nie podawac adres rtmp serwera, a poprostu nazwe pliku, i ten plik by sie zapisywal gdzies i kazdy moglby go odtwarzac gdyby mial do niego adres.

 

Nie nadawalem nigdy bezposrednio z serwera do nikogo, ani nie mialem stycznosci z nginx rtmp stad takie glupie pytanie.

Pozdrawiam

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Nie wiem dlaczego, ale nie moge nic nadawac z mojego serwera, poniewaz kazda transmisja sie zacina, obraz staje np. na kilka sekund po czym przeskakuje dalej a w tle np. dzwiek idzie caly czas, albo tez zdarza sie ze buforuje co 1-2 sek i to wszystko razem sprawia ze nie da sie ogladac kompletnie. Z poziomu ffmpeg wszystko wyglada wporzadku, fps na poziomie 28, time rowniez ok (nie widac zeby byly problemy z nadawaniem, do serwera wszystko idzie wporzadku, natomiast jak juz sie odtwarza stream w jakims playerze np. vlc to nie da sei tego ogladac. Siec jest ok, cos z nginxem?

 

Uzywalem przykladowej konfiguracji ktora podales, moze cos trzeba w niej zmienic?

Sprawdzilem nadajac na inny serwer np. ustream i jest ok, czyli cos z configuracja mojego serwera jest nie tak.

 

probowalem nadajac na

 

rtmp://<IP>:1935/live/<nazwastreama>

oraz

rtmp://127.0.0.1:1935/live/ch1/live/<nazwastreama>

 

bez roznicy

 

Probowalem ze swojego serwera nadawac bezposrednio, jak i z innego, co rowniez nie mialo roznicy.

Edytowano przez jasiek07 (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Ogólnie moduł rtmp do nginx'a ma 1 mankament - jeżeli nadajesz z ffmpega to brakuje dużo informacji w streamie dlatego uruchomienie streama jako oglądający jest problematyczne i trwać może do 15 sekund. Jest oczywiście możliwość naprawienia tego konfiguracją modułu i ffmpega, jednak myślę, że warto czekać przy włączeniu 10-15sekund, ale oszczędzić procesor na serwerze - chyba że masz dużo wolnego procesora to trzeba na ffmpegu wymusić tworzenie klatek całościowych i będzie się ładnie uruchamiać.

 

Fakt, że tnie już w czasie oglądania jest niepokojący i dziwi mnie to trochę, bo nie spotkałem się z problemami (dopóki nie oglądało więcej osób niż ogarniało łącze).

 

Jeżeli nadajesz ffmpegiem na lokalny host to nie ma wtedy problemu z łączem wychodzącym, bo jak nikt nie ogląda to go nie używasz. adres, na który masz nadawać to:

rtmp://<IP>:1935/live/<nazwastreama>

oraz

rtmp://127.0.0.1:1935/live/<nazwastreama>

Konstrukcja rtmp://<IP>:1935/live/<nazwastreama>

oraz

rtmp://127.0.0.1:1935/live/ch1/live/<nazwastreama> ma błąd (/live/ch1/live - powtórzenie/zagnieżdżenie aplikacji).

  • Upvote 1

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Ogólnie moduł rtmp do nginx'a ma 1 mankament - jeżeli nadajesz z ffmpega to brakuje dużo informacji w streamie dlatego uruchomienie streama jako oglądający jest problematyczne i trwać może do 15 sekund. Jest oczywiście możliwość naprawienia tego konfiguracją modułu i ffmpega, jednak myślę, że warto czekać przy włączeniu 10-15sekund, ale oszczędzić procesor na serwerze - chyba że masz dużo wolnego procesora to trzeba na ffmpegu wymusić tworzenie klatek całościowych i będzie się ładnie uruchamiać.

 

Fakt, że tnie już w czasie oglądania jest niepokojący i dziwi mnie to trochę, bo nie spotkałem się z problemami (dopóki nie oglądało więcej osób niż ogarniało łącze).

 

Jeżeli nadajesz ffmpegiem na lokalny host to nie ma wtedy problemu z łączem wychodzącym, bo jak nikt nie ogląda to go nie używasz. adres, na który masz nadawać to:

rtmp://<IP>:1935/live/<nazwastreama>

oraz

rtmp://127.0.0.1:1935/live/<nazwastreama>

Konstrukcja rtmp://<IP>:1935/live/<nazwastreama>

oraz

rtmp://127.0.0.1:1935/live/ch1/live/<nazwastreama> ma błąd (/live/ch1/live - powtórzenie/zagnieżdżenie aplikacji).

Dzieki za pomoc, oczywiscie z tym zagniezdzeniem aplikacji to literowka, musialo mi sie jakos zle skopiowac.

 

Dodalem do ffmpega -re i jakos sie to uspokoilo o wiele rzadziej sie zdarza przycinka. jeszcze pokombinuje z tym. Warto nadmienic ze dzieje sie tak tylko z jakoscia sd (~900bitrate) a przy hd (~2000+) zdarzaja sie takie przycinki, wykluczam lacze. Moze powinienem jakos okreslic wielkosc buffora? mam wrazenie jakby bardzo male pakiety byly wysylane, poniewaz te przycinki trwaja ulamki sekund, wiec wnioskuje ze moze zbyt duzo malych pakietow jest wysylane, zamiast mniej wiekszych i niektore lacza (np. tez z wiekszym pingiem) moga sobie z tym nie radzic. Przyznam ze sprawdzalem na 2 roznych laczach i roznica byla widoczna, a oba sa teoretycznie wystarczajace (jedno ~10mbps ale z pingiem na poziomie 70-100ms a drugie ok 50mbps z pingiem ok 30ms, gdzie nawet w przypadku tego pierwszego, mimo czestszych przycin, nadal byl zapas lacza). Da sie jakos zwiekszyc wielkosc buforu/pakietow wysylanych z serwera/odbieranych przez widzow? Czy moze jakies inne rozwiazanie?

 

Mam jeszcze jedno pytanie, odnosnie mojej konfiguracji. Oczywiscie dopiero zaczynam przygode z nginxem, dlatego nie jest ona zbyt czarujaca, narazie ogarniam podstawy.

 

Nie rozumiem dlaczego kazdy moze nadawac na moj serwer, skoro umozliwilem to tylko sobie. A sprawdzalem i mozna nadawac nadal z innego serwera:

 

config:

 

worker_processes 1;

 

error_log logs/error.log debug;

 

events {

worker_connections 1024;

}

 

rtmp_auto_push on;

 

rtmp {

server {

listen 1935;

chunk_size 4000;

 

application live {

live on;

record off;

allow publish 127.0.0.1;

allow play all;

 

}

}

}

 

# HTTP can be used for accessing RTMP stats

http {

server {

listen 8080;

server_name localhost;

 

location /stat {

rtmp_stat all;

rtmp_stat_stylesheet stat.xsl;

}

 

location /stat.xsl {

root /var/www/;

}

}

}

 

 

sprecyzowalem

 

allow publish 127.0.0.1;

 

Czyli powinno byc nadawanie ograniczone tylko do localhosta prwada?

Czy moze powinienem dodac jeszcze deny all ponizej, zeby okreslic ze cala reszta nie moze nadawac?

Czy w zlym miejscu umiescilem dyrektywe?

I jeszcze raz wielkie dzieki za pomoc.

 

edit://

 

przypomnialo mi sie jeszcze jedno.. czasami zdarza sie ze dzwiek sie deformuje, tj brzmi nienaturalnie, najczesciej slychac przy muzyce, co moze byc tego powodem?

Edytowano przez jasiek07 (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Nie wiem czemu się dźwięk deformuje, a jak jest z pakietami to trzeba by zajrzeć do kodu źródłowego modułu. Autor zapewniał już kiedyś, że moduł nie bawi się w nic, po prostu przyjmuje pakiety i przesyła do ludzi. Możliwe, że jednak coś majstruje z buforowaniem.

 

Jeżeli chodzi o zmianę ustawień to uczulam, żeby nie używać reloada. Moduł rtmp wymaga, aby za każdym razem kiedy coś chcemy zmienić - robić pełny restart. Stop, chwila odczekania na zabicie wszystkich połączeń i start.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Zauważ że ten moduł rtmp niczego nie zmienia w przesyłanych danych.

Dźwięk się deformuje bo:

- rekompresujesz strumień ?

- skąd pobierasz dźwięk?

 

Przerwy w odtwarzaniu wideo pojawiają się gdy łącze nie pozwala na utrzymanie stałego transferu. Wszystkie łącza w tym kraju są sprzedawane w wersji 'do' xxx mbps, co tylko oznacza że nie masz gwarancji prędkości.

 

Już miałem takie przypadki gdzie kilka set osób korzystało z łącza 100mbps(provider w małym mieście), w rezultacie nie dało się utrzymać stałej transmisji na poziomie 2mbps.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dzieki za odpowidzi.

 

Zmienilem player na jwplayer i ustawilem buffor 5sek i wydaje mi sie ze jest znacznie lepiej. Mozliwe ze to problem z internetem, chodz problem jest juz zdecydowanie mniejszy, sprawdze potem jeszcze na szybszym laczu i wtedy bede pewny, choc pewnie masz racje.

 

W zasadzie to moge na obecna chwile wykluczyc, poniewaz odtwarzanie jest juz w miare plynne. Co do ost. problemu to zrestartuje dla pewnosci cala maszyne o polnocy i wtedy zobacze czy to problem z reloadem.

 

Dziekuje za pomoc.

 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

W sumie do transmisji w tym przypadku (dużo szczegółów) polecał bym kompresje bezstratną HUFFUV. Zajmuje ona nieco więcej pasma niż stratna ale zakładam że powinna cię ta metoda bardziej usatysfakcjonować.

  • Upvote 1

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dzięki za odpowiedź.

Transkodowanie na obecną chwilę niestety raczej odpada ponieważ nie mam na tyle zasobów żeby transkodować video do innego kodeka. Na obecną chwilę nie zmieniam paramtrów wideo podczas retransmisji, ale później z pewnością się tym zainteresuję.

 

Chodź w zasadzie teraz wszystko trzyma się kupy całkiem przyzwoicie. Pozostaje mi tylko troszke zabezpieczyć stream, żeby zminimalizować obciążnie serwera przez osoby z zewnątrz, ale myśle, że znajde coś przydatnego na ten temat w sieci, chętnie wysłucham jakieś wskazówki, albo pomocne artykuły jeśli ktoś coś ma w zanadrzut.

 

Pozdrawiam :)

Edytowano przez jasiek07 (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się


×