Probleme mit FFMPEG und RTMP unter Ubuntu 24.02

Achso, jetzt verstehe ich das.

Ich muss quasi für den Short Stream eine Engine machen, sondern ein Excel {....} Und dort dann den Publish mit dem Befehl.
 
Ich wollte gerade einen Pull Request für das SRS Projekt erstellen und habe dabei festgestellt, dass es für das Transcoding auch Input Parameter gibt. Sie verstecken sich hinter:


Code:
perfile {
    hwaccel qsv;
    hwaccel_output_format qsv;
}

Das kannst du z.B. vor iformat platzieren. Dann brauchst du kein exec verwenden.
 
  • Gefällt mir
Reaktionen: SirLoading
Habe das jetzt mal mit qsv testen wollen.
Gestern habe ich das ohne getestet, läuft ohne Probleme.

jb_alvarado schrieb:
Komischerweise braucht es kein hwdownload,format=nv12 vor dem crop
Habe ich versucht, hier wird crop nicht angewendet.
Mein Stream ist hier dann 2x drin und scaliert.
Scalierung via qsv geht.

Mit "hwdownload...." schmiert ffmpeg immer ab.

Code:
                engine youtube-short2 {
                        enabled on;

                        perfile {
                                hwaccel qsv;
                                hwaccel_output_format qsv;
                        }

                        iformat live_flv;
                        vfilter {
                                v error;

                                filter_complex "[0:v]hwdownload,format=nv12,crop=1050:1080:435:0,hwupload,scale_qsv=1080:1112[main];[0:v]hwdownload,format=nv12,crop=593:444:1327:636,hwupload,scale_qsv=1080:808[face];[main][face]vstack_qsv,hwdownload,format=nv12[v]";
                                map "[v]";
                                map 0:a;

                        }

                        vcodec h264_qsv;
                        vprofile high;
                        vpreset medium;
                        vthreads 0;
                        vfps 60;
                        vwidth 1080;
                        vheight 1920;
                        vparams {
                                tune zerolatency;
                                bufsize 3300k;
                                b:v 10000k;
                                minrate 10000k;
                                maxrate 10000k;
                                g 120;
                        }

                        acodec copy;
                        oformat flv;
                        output rtmp://a.rtmp.youtube.com/live2/00000;
                }
Ergänzung ()

Nachtrag:

Irgendwie schmiert ffmpeg immer ab.
 
Zuletzt bearbeitet:
Du kannst am Anfang deiner Config ff_log_dir /tmp; setzten. Dann werden dort log files für ffmpeg erstellt. Dann siehst du warum das abbricht.
 
  • Gefällt mir
Reaktionen: SirLoading
Soo, ohne QSV hat es bis jetzt funktioniert.
Nun hatte ich wieder Zeit es zu testen.

Also, das via scale_qsv und vstack_qsv geht geht.

Nur wird crop nicht angewendet.
Es wird mein Stream 2x rescale + vstack.

Code:
filter_complex "[0:v]crop=1050:1080:435:0,hwupload,scale_qsv=1080:1112[main];[0:v]crop=971:729:949:351,hwupload,scale_qsv=1080:808[face];[main][face]vstack_qsv,hwdownload,format=nv12[v]";
 
Zuletzt bearbeitet:
Habe mittlerweile alles super am laufen.
Danke :)

Weißt du ob ich damit auch mehrere Videofiles in Dauerschleife laufen lassen kann?
Hab bei Hetzner 1TB Space angemietet, wo die Files liegen.
Und möchte mir da irgendwann in Python ein Script bauen, welches auf Twitch und YouTube den Titel, Spiel und Altersfreigabe setzt und das Video an den RTMP Server sendet.

Soweit ich das gelesen habe, sollte ein 2. "transcode" gehen.
Also "transcode replay/stream" um den Live und den Wiederholung Stream laufen zu lassen.

Muss ich testen, wenn ich aus dem Urlaub zurück bin.
Und meine Austausch 13900K habe, der hatte das Intel Problem...

Dank dir und ein schönes Wochenende 😇
 
Zuletzt bearbeitet:
Dauerschleifen würde mit ffmpeg recht einfach gehen, und zwar mit:

Code:
-stream_loop <loop count>  set number of times input stream shall be looped

-1 wäre endlos loopen.

Wenn's mehrere Clips sein soll, wäre vielleicht auch ffplayout was für dich. Aktuell würde ich da aber zur stabilen Version 0.23.* raten. Bald sollte 0.24 raus kommen, was einige Vorteile hat, nur leider wird das inkompatible zu älteren Versionen sein.
 
  • Gefällt mir
Reaktionen: SirLoading
Super, es läut soweit alles, bis auf das mit den beiden "transcode".
Wenn der 24/7 Strem läuft, dann kann ich den OBS Stream nicht mehr nutzen.

Weißt du wie ich das umsetzen kann?
Also 2 unterschiedliche Streams über SRS laufen zu lassen?
 
Schön, dass es läuft!

Du könntest zwei vhosts erstellen, und dort jeweils ein eigenes transcode {...} verwenden. Also in etwa so:

NGINX:
listen              1935;
max_connections     1000;
daemon              off;
srs_log_tank        console;


vhost target1.example.org {
    transcode live/stream {
        enabled     on;
        ffmpeg      /usr/local/bin/ffmpeg;
        engine stream {
            enabled         on;
            vfilter {
            }
            vcodec          copy;
            acodec          copy;
            aparams {
            }
            output          rtmp://127.0.0.1:1936/live/stream1;
        }
    }
}

vhost target2.example.org {
    transcode live/stream {
        enabled     on;
        ffmpeg      /usr/local/bin/ffmpeg;
        engine stream {
            enabled         on;
            vfilter {
            }
            vcodec          copy;
            acodec          copy;
            aparams {
            }
            output          rtmp://127.0.0.1:1937/live/stream2;
        }
    }
}

Um beide anzusprechen zu können, kannst du entweder zwei Subdomains dafür einrichten, oder du übergibst den vhost als Parameter an:

Code:
ffmpeg -re -hide_banner -i input.mp4 -c:v libx264 \
    -f flv "rtmp://127.0.0.1:1935/live?vhost=target2.example.org/stream"
 
  • Gefällt mir
Reaktionen: SirLoading
jb_alvarado schrieb:
Du könntest zwei vhosts erstellen
Ok, wenn das geht.
Hatte dazu leider nichts konkretes gefunden, das aber vermutet.

Würde dann aber auch gehen, wenn ich das so mache?
Sind dann zwei unterschiedliche transcode und je einem Host.
Der vhost Name ist frei wählbar?

Code:
vhost __defaultVhostLive__ {
transcode MyLiveStream/Key0 {}
}

vhost __defaultVhostArchiv__ {
transcode MyArchivStream/Key1 {}
}

Nachtrag:
jb_alvarado schrieb:
oder du übergibst den vhost als Parameter
Kann ich den vhost auch so abändern?

Code:
vhost LiveStreamServer
und
vhost ArchivStreamServer
 
Ja du kannst den vhost Name frei wählen. Eine Subdomain wählen hätte den Vorteil, dass du den vhost nicht immer in die Streaming-Adresse mit einfügen musst.
 
  • Gefällt mir
Reaktionen: SirLoading
jb_alvarado schrieb:
Ja du kannst den vhost Name frei wählen.
Ok, Danke.
das teste ich die Tage. :)

jb_alvarado schrieb:
Eine Subdomain wählen hätte den Vorteil
Das stimmt, müsste ich mir mal überlegen.
Da der 24/7 Stream so oder so nur lokal von meinem Python-Script via FFMPEG an localhost geht, bräuchte ich hier keine SubDomain.

Muss ich SRS irgendwann mal updaten oder solange es läuft, läuft es?

Vielen Dank!!
 
SirLoading schrieb:
Da der 24/7 Stream so oder so nur lokal von meinem Python-Script via FFMPEG an localhost geht, bräuchte ich hier keine SubDomain.
Wenn es nur lokal läuft kannst du deine vhosts auch in /etc/hosts eintrage, und diesen Eintrag für dein ffmpeg output nehmen.
SirLoading schrieb:
Muss ich SRS irgendwann mal updaten oder solange es läuft, läuft es?
Ich mache das sehr sporadisch. Wenn du eine stabile Version nimmst, reich alle paar Monate mal. Wenn die Version noch beta oder RC ist, würde ich etwas öfters updaten.
 
  • Gefällt mir
Reaktionen: SirLoading
Für mein Verständnis.

Ich nutze für Twitch folgende Engine.
Wenn ich nun eine weitere Plattform hinzufügen möchte, dann kann ich die Engine kopieren.
Wenn ich das dann so mache, dann wird der Stream ja 2x durch den Server gerendert.
Kann ich den Output an 2 Plattformen senden?

Code:
                engine twitchlive {
                        enabled on;
                        iformat live_flv;
                        vfilter {
                                v error;
                        }
                        vcodec h264_qsv;
                        vprofile high;
                        vpreset veryslow;
                        vthreads 0;
                        vfps 60;
                        vwidth 1920;
                        vheight 1080;
                        vparams {
                                tune zerolatency;
                                bufsize 2500k;
                                b:v 7500k;
                                minrate 7500k;
                                maxrate 7500k;
                                g 120;
                        }
                        acodec copy;
                        oformat flv;
                        output rtmp://0815;
                }
 
Hab mir das angeschaut, komm aber nicht klar.
Muss mal schauen.
Danke
 
So, nach langem Hin und Her scheint es so zu gehen.
Habe ich das MAP richtig gesetzt?

Code:
        engine multitest {
                        enabled on;
                        iformat live_flv;
                        vfilter {
                                v error;
                                -map 0:v;
                                -map 0:a;
                        }
                        vcodec h264_qsv;
                        vprofile high;
                        vpreset veryslow;
                        vthreads 0;
                        vfps 60;
                        vwidth 1920;
                        vheight 1080;
                        vparams {
                                tune zerolatency;
                                bufsize 2500k;
                                b:v 7500k;
                                minrate 7500k;
                                maxrate 7500k;
                                g 120;
                        }
                        acodec copy;
                        oformat tee;
                        output "[f=flv:onfail=ignore]rtmp://0815 | [f=flv:onfail=ignore]rtmp://1234";
                }

Vielen Dank
Liebe Grüße
SirLoading
 
Zurück
Oben