arut / nginx-rtmp-module

NGINX-based Media Streaming Server
http://nginx-rtmp.blogspot.com
BSD 2-Clause "Simplified" License
13.43k stars 3.51k forks source link

FFMPEG, Mosaic Streams, push to Twitch #990

Open ferman opened 7 years ago

ferman commented 7 years ago

Hi Everyone,

I have been having a difficult time figuring out how to get FFMPEG to run inside my ngninx w/ rtmp. I have succesfully ran the -filter_complex locally with 1 video file.

So then I tested trying to use rtmp but I received an error:

RTMP_ReadPacket, failed to read RTMP packet header
rtmp://127.0.0.1:1935/justin/: Invalid data found when processing input

And when I try to run ffmpeg inside of nginx using exec, exec_push, or exec_pull ffmpeg doesn't even try to run or anything.

rtmp {
        server {
                listen 1935;
                chunk_size 4096;

                application app1 {
                        live on;
                        record off;

                        # This is pushing to a personal twitch stream
                        push rtmp://live.twitch.tv/app/live_XXXX;
                }

                application compile {
                        live on;
                        record off;

                        exec_push ffmpeg -loglevel debug -i rtmp://localhost/app1/$name -i rtmp://localhost/app1/$name -i rtmp://localhost/app1/$name -i rtmp://localhost/app1/$name -filter_complex "nullsrc=size=1920x1080 [base]; [0:v] setpts=PTS-STARTPTS, scale=960x540 [upperleft]; [1:v] setpts=PTS-STARTPTS, scale=960x540 [upperright]; [2:v] setpts=PTS-STARTPTS, scale=960x540 [lowerleft]; [3:v] setpts=PTS-STARTPTS, scale=960x540 [lowerright]; [base][upperleft] overlay=shortest=1 [tmp1]; [tmp1][upperright] overlay=shortest=1:x=960 [tmp2]; [tmp2][lowerleft] overlay=shortest=1:y=540 [tmp3]; [tmp3][lowerright] overlay=shortest=1:x=960:y=540" -vcodec flv -acodec copy -f flv rtmp://localhost/live;
                }

                application live {
                        live on;
                        record off;

                        # This is a compiled video that has 4 windows to it so I can have 4 players in 1 video for a group twitch channel
                        push rtmp://live.twitch.tv/app/live_XXXX;
                }

        }
}

Could anyone please help me figure this out.

ferman commented 7 years ago

I can successfully stream tiled videos to Twitch like this:

ffmpeg -i video1.mp4 -i video1.mp4 -i video1.mp4 -i video1.mp4 -filter_complex "nullsrc=size=1920x1080 [base]; [0:v] setpts=PTS-STARTPTS, scale=960x540 [upperleft]; [1:v] setpts=PTS-STARTPTS, scale=960x540 [upperright]; [2:v] setpts=PTS-STARTPTS, scale=960x540 [lowerleft]; [3:v] setpts=PTS-STARTPTS, scale=960x540 [lowerright]; [base][upperleft] overlay=shortest=1 [tmp1]; [tmp1][upperright] overlay=shortest=1:x=960 [tmp2]; [tmp2][lowerleft] overlay=shortest=1:y=540 [tmp3]; [tmp3][lowerright] overlay=shortest=1:x=960:y=540" -c:v libx264 -preset fast -pix_fmt yuv420p -s 1920x1080 -threads 0 -f flv rtmp://live.twitch.tv/app/live_XXXX

So it looks like nginx isn't even trying to run ffmpeg through exec.