Recherche avancée

Médias (1)

Mot : - Tags -/copyleft

Autres articles (64)

Sur d’autres sites (10111)

  • How change ID in HLS origin manifest ?

    11 juillet 2023, par Kapiroto

    I'm using Nginx's RTMP module and wanted a way to change the m3u8 manifest ID.
My current setup is this :

    


    Nginx config

    


    hls_variant _1080p BANDWIDTH=8388608,AVERAGE-BANDWIDTH=8000000,RESOLUTION=1920x1080,FRAME-RATE=60,CODECS="avc1.640028,mp4a.40.2";
hls_variant _720p BANDWIDTH=6291456,AVERAGE-BANDWIDTH=6000000,RESOLUTION=1280x720,FRAME-RATE=60,CODECS="avc1.640028,mp4a.40.2";
hls_variant _480p BANDWIDTH=4194304,AVERAGE-BANDWIDTH=4000000,RESOLUTION=848x480,FRAME-RATE=30,CODECS="avc1.4d401f,mp4a.40.2";


    


    Using yt-dlp to retrieve the link information, we have :

    


    ID   EXT RESOLUTION FPS │   TBR PROTO │ VCODEC      ACODEC
─────────────────────────────────────────────────────────────
4194 mp4 848x480     30 │ 4194k m3u8  │ avc1.4d401f mp4a.40.2
6291 mp4 1280x720    60 │ 6291k m3u8  │ avc1.640028 mp4a.40.2
8388 mp4 1920x1080   60 │ 8389k m3u8  │ avc1.640028 mp4a.40.2


    


    But using yt-dlp on a Twitch link for example, we retrieve the following information :

    


    ID               EXT RESOLUTION FPS │   TBR PROTO │ VCODEC      ACODEC     ABR
──────────────────────────────────────────────────────────────────────────────
audio_only       mp4 audio only     │  160k m3u8  │ audio only  mp4a.40.2 160k
160p             mp4 284x160     30 │  230k m3u8  │ avc1.4D401F mp4a.40.2
360p             mp4 640x360     30 │  630k m3u8  │ avc1.4D401F mp4a.40.2
480p             mp4 852x480     30 │ 1428k m3u8  │ avc1.4D401F mp4a.40.2
720p60           mp4 1280x720    60 │ 3423k m3u8  │ avc1.4D401F mp4a.40.2
1080p60__source_ mp4 1920x1080   60 │ 9037k m3u8  │ avc1.64002A mp4a.40.2


    


    My doubt is whether there is a way to change the ID column in my configuration in Nginx or this configuration is something exclusive coming from another m3u8 manifest generator software.

    


  • OBS alternative for server : Creating a continuous video streaming to RTMP server and beign able to manipulate it using NodeJS

    27 juillet 2016, par futufu

    What I want is to be able to create a livestream from a Ubuntu v14.04 server to a RTMP Server (like Twitch) and to be able to use NodeJS to control visual aspects (adding layers, text, images) and add different sources (video files, others livestreams, etc). Like having OBS running on a server.

    What I’ve done/researched so far :

    FFmpeg

    With ffmpeg I can can create video files streams like that :

    ffmpeg -re -i video.mp4 -c:v libx264 -preset fast -c:a aac -ab 128k -ar 44100 -f flv rtmp://example.com

    Also using the filter_complex I can create something near to a layer like this tutorial explains :
    https://trac.ffmpeg.org/wiki/Create%20a%20mosaic%20out%20of%20several%20input%20videos

    But I found the following problems :

    • The streams that I create with ffmpeg only last until the video file is over, if I wanted to stream multiple video files (dynamic playlist) it would interrupt the stream between each file ;
    • The manipulation is very limited as far as I am concerned, I can’t edit filter_complex once ffmpeg is executing ;
    • Can’t display text and create animated overlays, like sliding text.

    I tried to search for any cli/nodejs package that is able to create a continuos video stream and manipulate it to use as input source for ffmpeg which streams to the RTMP server.

    Can someone give me more information about what I am trying to do ?

    I’m playing with github.com/fluent-ffmpeg/node-fluent-ffmpeg to see if I have a different outcome.

  • How to fix "Non-monotonous DTS in output stream 0:1" when trying to convert a m3u8 file into a mp4 using ffmpeg

    23 mars 2019, par Alessandro Autiero

    I’m currently coding a desktop util that downloads Twich Clips if they meet some requirements. As the twitch api gives as a response a m3u8 file, I have to convert it into a mp4. To do with I’m executing a cmd command through my Java application using the ProcessBuilder API built into Java. The command works fine, but sometimes I get a buggy video that has broken frames and audio. Here’s my code :

    public static void convertFile(File input, File output) {
       String command = "ffmpeg -protocol_whitelist file,http,https,tcp,tls,crypto -vsync 2 -i \"" + input.getAbsolutePath() + "\" -c copy " + "\"" + output.getAbsolutePath() + "\"";
       System.out.println("______________________________________________________");
       System.out.println("Converting file...");
       System.out.println("Using as input " + input.getAbsolutePath());
       System.out.println("Using as output " + output.getAbsolutePath());
       System.out.println("Using as command: " + command);
       System.out.println("______________________________________________________");
       setHasDone(false);

       ProcessBuilder pb = new ProcessBuilder();
       pb.command(command.split(" "));

       pb.redirectOutput(ProcessBuilder.Redirect.INHERIT);
       pb.redirectError(ProcessBuilder.Redirect.INHERIT);

       Process process;
       try {
           process = pb.start();
       }catch (IOException e){
           e.printStackTrace();
           return;
       }

       while (process.isAlive()){
           setHasDone(false);
       }

       setHasDone(true);
    }

    Example of broken video :
    https://youtu.be/FfFvStNl-9o

    When uploaded to youtube lot’s of the video bugs are not present, not really know why, but at the end you can clearly see what I’m talking about. Am I using ffmepg wrong ?

    I posted this as none of the 1000 answers on similar posts helped me.