Skip to content

Instantly share code, notes, and snippets.

@DevStefIt
Last active July 5, 2025 07:47
Show Gist options
  • Select an option

  • Save DevStefIt/cf18fd8ac8627985d42f3d8ffe28720c to your computer and use it in GitHub Desktop.

Select an option

Save DevStefIt/cf18fd8ac8627985d42f3d8ffe28720c to your computer and use it in GitHub Desktop.

Revisions

  1. DevStefIt revised this gist Feb 16, 2023. 4 changed files with 25 additions and 2 deletions.
    1 change: 1 addition & 0 deletions ffmpeg_dash.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1 @@
    ffmpeg -re -i INPUT -c:v libx264 -c:a aac -preset slower -f dash ARBITRARY_NAME.mpd
    20 changes: 20 additions & 0 deletions ffmpeg_hls.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,20 @@
    # Remember to redirect all the stream files (the .ts files) in the playlist files (the .m3u8 files) using

    ffmpeg -i 'input_file.mkv' \
    -filter_complex \
    "[0:v]split=3[v1][v2][v3]; \
    [v1]copy[v1out]; [v2]scale=w=640:h=360[v2out]; [v3]scale=w=352:h=288[v3out]" \
    -map [v1out] -c:v:0 libx264 -b:v:0 5M -maxrate:v:0 5M -minrate:v:0 5M -bufsize:v:0 10M -preset slow \
    -map [v2out] -c:v:1 libx264 -b:v:1 3M -maxrate:v:1 3M -minrate:v:1 3M -bufsize:v:1 3M -preset slow \
    -map [v3out] -c:v:2 libx264 -b:v:2 1M -maxrate:v:2 1M -minrate:v:2 1M -bufsize:v:2 1M -preset slow \
    -map a:0 -c:a:0 aac -b:a:0 96k -ac 2 \
    -map a:0 -c:a:1 aac -b:a:1 96k -ac 2 \
    -map a:0 -c:a:2 aac -b:a:2 48k -ac 2 \
    -f hls \
    -hls_time 2 \
    -hls_playlist_type vod \
    -hls_flags independent_segments \
    -hls_segment_type mpegts \
    -hls_segment_filename stream_%v/data%02d.ts \
    -master_pl_name master.m3u8 \
    -var_stream_map "v:0,a:0 v:1,a:1 v:2,a:2" stream_%v.m3u8
    2 changes: 2 additions & 0 deletions hls_dash_server_configuration.md
    Original file line number Diff line number Diff line change
    @@ -17,9 +17,11 @@ rtmp {
    hls_path /var/www/html/stream/hls;
    hls_fragment 3;
    hls_playlist_length 60;
    hls_cleanup off;
    dash on;
    dash_path /var/www/html/stream/dash;
    dash_cleanup off;
    }
    }
    }
    4 changes: 2 additions & 2 deletions streaming_commands.md
    Original file line number Diff line number Diff line change
    @@ -4,8 +4,8 @@ If you would like to stream your file via RTMP

    To view the content via HLS:

    http://server_ip:8088/hls/ARBITRARY_NAME.m3u8
    `http://server_ip:8088/hls/ARBITRARY_NAME.m3u8`

    To view the content via DASH:

    http://server_ip:8088/dash/ARBITRARY_NAME.mpd
    `http://server_ip:8088/dash/ARBITRARY_NAME.mpd`
  2. DevStefIt created this gist Feb 16, 2023.
    73 changes: 73 additions & 0 deletions hls_dash_server_configuration.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,73 @@
    First of all, we need to do all the things indicated here: https://gist.github.com/DevStefIt/23b8971db7e3fe084d29f2c915fb7773
    We need to modify the Nginx configuration file:

    `sudo vim /etc/nginx/nginx.conf`

    Then, have to add the following lines in the existing RTMP configuration (or create a new one if you do not have it)

    ```
    . . .
    rtmp {
    server {
    ...
    application live {
    live on;
    record off;
    hls on;
    hls_path /var/www/html/stream/hls;
    hls_fragment 3;
    hls_playlist_length 60;
    dash on;
    dash_path /var/www/html/stream/dash;
    }
    }
    }
    ...
    ```

    We need to configure a block in the `sites-available` folder.

    `sudo vim /etc/nginx/sites-available/rtmp`

    And insert the following lines:

    ```
    ...
    server {
    listen 8088;
    location / {
    add_header Access-Control-Allow-Origin *;
    root /var/www/html/stream;
    }
    }
    types {
    application/dash+xml mpd;
    }
    ```

    Port `8088` is chosen because it is different than the other chose ports.

    We enable port 8088 in TCP mode on the firewall

    `sudo ufw allow 8088/tcp`

    We create the folders of interest

    ```
    sudo mkdir -p /var/www/html/stream/hls
    sudo mkdir -p /var/www/html/stream/dash
    ```

    We also grant a reasonable access for the current user

    ```
    sudo chown -R $USER:$USER /var/www/html/stream
    sudo chmod -R 775 /var/www/html/stream
    ```

    We reload Nginx

    `sudo systemctl reload nginx`
    11 changes: 11 additions & 0 deletions streaming_commands.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,11 @@
    If you would like to stream your file via RTMP

    `ffmpeg -re -i INPUT -c:v libx264 -c:a aac -preset ultrafast -tune zerolatency -f flv rtmp://127.0.0.1/live/ARBITRARY_NAME`

    To view the content via HLS:

    http://server_ip:8088/hls/ARBITRARY_NAME.m3u8

    To view the content via DASH:

    http://server_ip:8088/dash/ARBITRARY_NAME.mpd