AirenSoft / OvenMediaEngine

OvenMediaEngine (OME) is a Sub-Second Latency Live Streaming Server with Large-Scale and High-Definition. #WebRTC #LLHLS
https://airensoft.com/ome.html
GNU Affero General Public License v3.0
2.55k stars 1.06k forks source link

ABR supported in LLHLS #777

Closed getroot closed 1 year ago

getroot commented 2 years ago

Added ABR feature for LLHLS in latest master branch.

image

You can use ABR by adding <Renditions> to your OutputProfile like this:

<OutputProfile>
    <Name>bypass_stream</Name>
    <OutputStreamName>${OriginStreamName}</OutputStreamName>

    <Renditions>
        <Rendition>
            <Name>Bypass</Name>
            <Video>bypass_video</Video>
            <Audio>bypass_audio</Audio>
        </Rendition>
        <Rendition>
            <Name>720</Name>
            <Video>720_video</Video>
            <Audio>bypass_audio</Audio>
        </Rendition>

    </Renditions>

    <Encodes>
        <Audio>
            <Name>bypass_audio</Name>
            <Bypass>true</Bypass>
        </Audio>
        <Video>
            <Name>bypass_video</Name>
            <Bypass>true</Bypass>
        </Video>
        <Video>
            <Name>720_video</Name>
            <Codec>h264</Codec>
            <Bitrate>2024000</Bitrate>
            <Framerate>30</Framerate>
            <Width>1280</Width>
            <Height>720</Height>
            <Preset>faster</Preset>
        </Video>

        <Audio>
            <Name>opus</Name>
            <Codec>opus</Codec>
            <Bitrate>128000</Bitrate>
            <Samplerate>48000</Samplerate>
            <Channel>2</Channel>
        </Audio>
    </Encodes>
</OutputProfile>

Add <Name> to the <Encodes> element you want to link to the <Rendition> If there is no <Renditions>, the first supported video track and audio track among Encodes will be used as before.

I will start working on adding <Renditions> to WebRTC soon. But it will take a long time because this is a very big job. I hope to roll out the WebRTC ABR feature soon.

Many thanks for the feedback.

cwpenhale commented 2 years ago

Hey @getroot! This is working excellent in Chrome on Mac (using OvenPlayer, TheoPlayer Demo, and my own HLS.js-based player), but I'm running into some issues in Native Safari. I've set up a simple page to test

<html>
<head></head>
<body>
<video width="100%" height="100%" autoplay controls muted loop src="https://cdn.organization.tld/edge/live/llhls.m3u8"></video>
<body>
</html>

Trying on iOS or on a Mac is showing the same results (this one is iOS):

image

And on the mac:

image

What information can I provide to help test?

getroot commented 2 years ago

@cwpenhale

Please give me as much information as possible so I can clone your environment to reproduce the problem.

Your Server.xml (specifically Origin's OutputProfile), and log files, chunklist_x_video.llhls.m3u8 files, and the encoder information and codec settings you use.

Also check that the OME you are using is the latest version of the master branch.

Thank you!

getroot commented 2 years ago

It would be helpful if you also share the contents of the llhls.m3u8 file.

getroot commented 2 years ago

Alternatively, it is a good way to share the results obtained by running the mediastreamvalidator(https://developer.apple.com/documentation/http_live_streaming/using_apple_s_http_live_streaming_hls_tools) provided by Apple.

cwpenhale commented 2 years ago

Here's the Apple report: report.html.zip

Here's OBS:

image

Here's the configs: https://gist.github.com/cwpenhale/dc9fba90359a8f4585c8008ea67b5a84

Here's a HAR containing the initial HTTP/2 Conversation: ios.com.har.zip

In case you are unfamiliar with HAR, there is a viewer here: http://www.softwareishard.com/har/viewer/

In case you do not want to bother with the HAR, here is the llhls.m3u8 you requested (from the HAR):

#EXTM3U
#EXT-X-VERSION:7
#EXT-X-INDEPENDENT-SEGMENTS
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="4",NAME="none",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="chunklist_4_audio_llhls
.m3u8?session=8_eEU6kN3g"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="5",NAME="none",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="chunklist_5_audio_llhls
.m3u8?session=8_eEU6kN3g"
#EXT-X-STREAM-INF:BANDWIDTH=10160000,RESOLUTION=3840x2160,FRAME-RATE=30.0,CODECS="avc1.42c033,mp4a.40
.2",AUDIO="4"
chunklist_0_video_llhls.m3u8?session=8_eEU6kN3g
#EXT-X-STREAM-INF:BANDWIDTH=8160000,RESOLUTION=1920x1080,FRAME-RATE=24.0,CODECS="avc1.42c028,mp4a.40
.2",AUDIO="4"
chunklist_1_video_llhls.m3u8?session=8_eEU6kN3g
#EXT-X-STREAM-INF:BANDWIDTH=5064000,RESOLUTION=1280x720,FRAME-RATE=24.0,CODECS="avc1.42c01f,mp4a.40.2"
,AUDIO="5"
chunklist_2_video_llhls.m3u8?session=8_eEU6kN3g

/edge/live/chunklist_0_video_llhls.m3u8?session=8_eEU6kN3g

#EXTM3U
#EXT-X-TARGETDURATION:6
#EXT-X-SERVER-CONTROL:CAN-BLOCK-RELOAD=YES,PART-HOLD-BACK=0.6
#EXT-X-VERSION:9
#EXT-X-PART-INF:PART-TARGET=0.200000
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-MAP:URI="init_0_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PROGRAM-DATE-TIME:2022-05-28T22:10:39.478+00:00
#EXTINF:6.400,
seg_0_0_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g
#EXT-X-PROGRAM-DATE-TIME:2022-05-28T22:10:45.911+00:00
#EXTINF:6.000,
seg_0_1_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g
#EXT-X-PROGRAM-DATE-TIME:2022-05-28T22:10:51.911+00:00
#EXTINF:6.000,
seg_0_2_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g
#EXT-X-PROGRAM-DATE-TIME:2022-05-28T22:10:57.911+00:00
#EXTINF:6.000,
seg_0_3_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g
#EXT-X-PROGRAM-DATE-TIME:2022-05-28T22:11:03.911+00:00
#EXTINF:6.000,
seg_0_4_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g
#EXT-X-PROGRAM-DATE-TIME:2022-05-28T22:11:09.911+00:00
#EXTINF:6.000,
seg_0_5_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g
#EXT-X-PROGRAM-DATE-TIME:2022-05-28T22:11:15.911+00:00
#EXTINF:6.000,
seg_0_6_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g
#EXT-X-PROGRAM-DATE-TIME:2022-05-28T22:11:21.911+00:00
#EXT-X-PART:DURATION=0.200,URI="part_0_7_0_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g",INDEPENDENT=
YES
#EXT-X-PART:DURATION=0.200,URI="part_0_7_1_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_7_2_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_7_3_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_7_4_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_7_5_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g",INDEPENDENT=
YES
#EXT-X-PART:DURATION=0.200,URI="part_0_7_6_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_7_7_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_7_8_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_7_9_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_7_10_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g",INDEPENDENT
=YES
#EXT-X-PART:DURATION=0.200,URI="part_0_7_11_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_7_12_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_7_13_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_7_14_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_7_15_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g",INDEPENDENT
=YES
#EXT-X-PART:DURATION=0.200,URI="part_0_7_16_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_7_17_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_7_18_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_7_19_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_7_20_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g",INDEPENDENT
=YES
#EXT-X-PART:DURATION=0.200,URI="part_0_7_21_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_7_22_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_7_23_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_7_24_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_7_25_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g",INDEPENDENT
=YES
#EXT-X-PART:DURATION=0.200,URI="part_0_7_26_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_7_27_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_7_28_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_7_29_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXTINF:6.000,
seg_0_7_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g
#EXT-X-PROGRAM-DATE-TIME:2022-05-28T22:11:27.911+00:00
#EXT-X-PART:DURATION=0.200,URI="part_0_8_0_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g",INDEPENDENT=
YES
#EXT-X-PART:DURATION=0.200,URI="part_0_8_1_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_8_2_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_8_3_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_8_4_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_8_5_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g",INDEPENDENT=
YES
#EXT-X-PART:DURATION=0.200,URI="part_0_8_6_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_8_7_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_8_8_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_8_9_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_8_10_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g",INDEPENDENT
=YES
#EXT-X-PART:DURATION=0.200,URI="part_0_8_11_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_8_12_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_8_13_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_8_14_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_8_15_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g",INDEPENDENT
=YES
#EXT-X-PART:DURATION=0.200,URI="part_0_8_16_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_8_17_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_8_18_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_8_19_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_8_20_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g",INDEPENDENT
=YES
#EXT-X-PART:DURATION=0.200,URI="part_0_8_21_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_8_22_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_8_23_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_8_24_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_8_25_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g",INDEPENDENT
=YES
#EXT-X-PART:DURATION=0.200,URI="part_0_8_26_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_8_27_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_8_28_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_8_29_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXTINF:6.000,
seg_0_8_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g
#EXT-X-PROGRAM-DATE-TIME:2022-05-28T22:11:33.911+00:00
#EXT-X-PART:DURATION=0.200,URI="part_0_9_0_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g",INDEPENDENT=
YES
#EXT-X-PART:DURATION=0.200,URI="part_0_9_1_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_9_2_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_9_3_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PART:DURATION=0.200,URI="part_0_9_4_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-PRELOAD-HINT:TYPE=PART,URI="part_0_9_5_video_DOmTFv8a_llhls.m4s?session=8_eEU6kN3g"
#EXT-X-RENDITION-REPORT:URI="chunklist_1_video_llhls.m3u8?session=8_eEU6kN3g",LAST-MSN=9,LAST-PART=6
#EXT-X-RENDITION-REPORT:URI="chunklist_2_video_llhls.m3u8?session=8_eEU6kN3g",LAST-MSN=9,LAST-PART=6
#EXT-X-RENDITION-REPORT:URI="chunklist_4_audio_llhls.m3u8?session=8_eEU6kN3g",LAST-MSN=9,LAST-PART=8
#EXT-X-RENDITION-REPORT:URI="chunklist_5_audio_llhls.m3u8?session=8_eEU6kN3g",LAST-MSN=9,LAST-PART=8

Hope this helps!

cwpenhale commented 2 years ago

I am pulling the most recent docker image before all of my tests, as well! This test was run against

docker inspect ome-edge snippet

          "Image": "fdb218b32cc7e2ce87661a268f8f795848061cd001fd91f8b276446876faba8f",
          "ImageName": "docker.io/airensoft/ovenmediaengine:dev",
getroot commented 2 years ago

@cwpenhale Thank you! This is the best report! I'll reproduce the problem and kill that!

getroot commented 2 years ago

I couldn't reproduce your problem, but the information you provided helped me to pinpoint the problem.

image

I have patched the code that may be causing this problem. Could you please check if the latest master branch solves your problem?

And as a tip, your Relay Server and Edge Server can omit <OutputProfiles> in Server.xml. This is because OVT uses information received from Origin. Even now, your Relay and Edge do not use the <OutputProfiles> you set, but use the information received from Origin.

cwpenhale commented 2 years ago

@getroot you did it! Working in Mac Safari and iOS. Let me know if there's any output I can provide that will help with continued development.

basisbit commented 2 years ago

Did anyone already do tests with this over long distance / high delay / medium packet loss links, to see if things like bitrate choice flapping or similar does occur?

mpisat commented 2 years ago

Did anyone already do tests with this over long distance / high delay / medium packet loss links, to see if things like bitrate choice flapping or similar does occur?

You can use NetworkLinkConditioner (Mac) or Clumsy-0.2.exe (Win) or NetLimiter (30 day free trial) to induce packet loss or speed throttling to test this feature.

danruser commented 2 years ago

Hello How can I edit the list of options in the list when using ABR? Like in the picture , to make them more meaningful. Resolutions

Thank you.

genofire commented 2 years ago

Current not - the label is generates here: https://github.com/AirenSoft/OvenPlayer/blob/bd22e3407e4afe299f7cb6c6dcb8f4ff70eb4e36/src/js/api/provider/html5/providers/Hls.js#L103

Maybe you should create an issue there (OvenPlayer) to create an custome label generator function there.

danruser commented 2 years ago

@genofire)

Thank you.

mpisat commented 2 years ago

While theoplayer is able to jump from 360p to 540, and then 720p and 1080p, ovenplayer stuck at 360p for me and it falls down to 360p easily if I choose auto. My internet is pretty decent (Theoplayer is a proof of that)

                    <OutputProfiles>
                        <!-- Enable this configuration if you want to hardware acceleration using GPU -->
                        <HardwareAcceleration>false</HardwareAcceleration>
                        <OutputProfile>
                            <Name>bypass_stream</Name>
                            <OutputStreamName>${OriginStreamName}</OutputStreamName>

              <Renditions>
                <Rendition><Name>Bypass</Name><Video>bypass_video</Video><Audio>bypass_audio</Audio></Rendition>
                <!-- <Rendition><Name>FHD</Name><Video>video_1080</Video><Audio>bypass_audio</Audio></Rendition> -->
                <Rendition><Name>HD</Name><Video>video_720</Video><Audio>bypass_audio</Audio></Rendition>
                <Rendition><Name>HD-</Name><Video>video_540</Video><Audio>bypass_audio</Audio></Rendition>
                <Rendition><Name>SD</Name><Video>video_360</Video><Audio>bypass_audio</Audio></Rendition>
              </Renditions>

                            <Encodes>
                                <Audio>
                                    <Name>bypass_audio</Name>
                                    <Bypass>true</Bypass>
                                </Audio>
                                <Video>
                                    <Name>bypass_video</Name>
                                    <Bypass>true</Bypass>
                                </Video>
                                <Audio>
                                    <Codec>opus</Codec>
                                    <Bitrate>128000</Bitrate>
                                    <Samplerate>48000</Samplerate>
                                    <Channel>2</Channel>
                                </Audio>

                <!-- <Video><Name>video_1080</Name><Codec>h264</Codec><Bitrate>5000000</Bitrate><Framerate>30</Framerate><Width>1920</Width><Height>1080</Height><Preset>faster</Preset></Video> -->
                <Video><Name>video_720</Name><Codec>h264</Codec><Bitrate>2000000</Bitrate><Framerate>30</Framerate><Width>1280</Width><Height>720</Height><Preset>faster</Preset></Video>
                <Video><Name>video_540</Name><Codec>h264</Codec><Bitrate>1200000</Bitrate><Framerate>30</Framerate><Width>960</Width><Height>540</Height><Preset>faster</Preset></Video>
                <Video><Name>video_360</Name><Codec>h264</Codec><Bitrate>550000</Bitrate><Framerate>30</Framerate><Width>640</Width><Height>360</Height><Preset>faster</Preset></Video>

                            </Encodes>
                        </OutputProfile>
                    </OutputProfiles>
getroot commented 2 years ago

@mpisat This is the difference in the algorithm for measuring network performance on the player side. In my opinion THEOPlayer is better than hls.js for this algorithm. I'm looking for ways to improve this in hls.js.

getroot commented 2 years ago

Also, since hls.js does not yet use LLHLS's PRELOAD-HINT, it is a good choice to use THEO for commercial services.

mpisat commented 2 years ago

Thanks for the details @getroot

getroot commented 2 years ago

The settings for ABR have been changed and committed to the master branch today.

Existing <Renditions> was not scalable because only one could exist. This was a very difficult structure to use in future WebRTC ABR. So, the existing <Renditions> has been changed to <Playlist>, and there can be multiple playlists and each can be accessed through <FileName>.

Here is an example configuration:

<!--LLHLS URL : https://domain/app/stream/abr.m3u8 --> 
<Playlist>
  <Name>For LLHLS</Name>
  <FileName>abr</FileName>
  <Rendition>
      <Name>Bypass</Name>
      <Video>bypass_video</Video>
      <Audio>bypass_audio</Audio>
  </Rendition>
  <Rendition>
      <Name>FHD</Name>
      <Video>video_1280</Video>
      <Audio>bypass_audio</Audio>
  </Rendition>
  <Rendition>
      <Name>HD</Name>
      <Video>video_720</Video>
      <Audio>bypass_audio</Audio>
  </Rendition>
</Playlist>
<!--LLHLS URL : https://domain/app/stream/llhls.m3u8 --> 
<Playlist>
  <Name>Change Default</Name>
  <FileName>llhls</FileName>
  <Rendition>
      <Name>HD</Name>
      <Video>video_720</Video>
      <Audio>bypass_audio</Audio>
  </Rendition>
</Playlist> 

In LLHLS, you can play a playlist with http[s]://<domain>[:port]/<app>/<stream>/<FileName>.m3u8

One restriction is that playlist and chunklist keywords MUST NOT be included in <FileName>. This is a reserved word used by the server.

Please refer to the manual below. https://airensoft.gitbook.io/ovenmediaengine/v/master-1/transcoding#adaptive-bitrates-streaming-abr

genofire commented 2 years ago

New/current config contains invalid example:

https://github.com/AirenSoft/OvenMediaEngine/blob/86e9bbf081bb87669720bd1cbdec2c2fa78eebb6/misc/conf_examples/Server.xml#L283-L287

  1. name of used <Playlist><Rendition><Video> is not equal to <Encodes><Video><Name>
  2. no Encoder for Resolution 480p exists (it whould good to know which Width and Bitrate 480p has - e.g. Width: 848 or 854)