示例#1
0
def test_variant_playlist_with_average_bandwidth():
    variant_m3u8 = m3u8.M3U8()

    low_playlist = m3u8.Playlist('http://example.com/low.m3u8',
                                 stream_info={
                                     'bandwidth': 1280000,
                                     'average_bandwidth': 1257891,
                                     'program_id': 1,
                                     'subtitles': 'subs'
                                 },
                                 media=[],
                                 base_uri=None)
    high_playlist = m3u8.Playlist('http://example.com/high.m3u8',
                                  stream_info={
                                      'bandwidth': 3000000,
                                      'average_bandwidth': 2857123,
                                      'program_id': 1,
                                      'subtitles': 'subs'
                                  },
                                  media=[],
                                  base_uri=None)

    variant_m3u8.add_playlist(low_playlist)
    variant_m3u8.add_playlist(high_playlist)

    expected_content = """\
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1280000,AVERAGE-BANDWIDTH=1257891
http://example.com/low.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=3000000,AVERAGE-BANDWIDTH=2857123
http://example.com/high.m3u8
"""
    assert expected_content == variant_m3u8.dumps()
示例#2
0
def test_variant_playlist_with_video_range():
    variant_m3u8 = m3u8.M3U8()

    sdr_playlist = m3u8.Playlist('http://example.com/sdr.m3u8',
                                 stream_info={
                                     'bandwidth': 1280000,
                                     'video_range': 'SDR',
                                     'program_id': 1
                                 },
                                 media=[],
                                 base_uri=None)
    hdr_playlist = m3u8.Playlist('http://example.com/hdr.m3u8',
                                 stream_info={
                                     'bandwidth': 3000000,
                                     'video_range': 'PQ',
                                     'program_id': 1
                                 },
                                 media=[],
                                 base_uri=None)

    variant_m3u8.add_playlist(sdr_playlist)
    variant_m3u8.add_playlist(hdr_playlist)

    expected_content = """\
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1280000,VIDEO-RANGE=SDR
http://example.com/sdr.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=3000000,VIDEO-RANGE=PQ
http://example.com/hdr.m3u8
"""
    assert expected_content == variant_m3u8.dumps()
示例#3
0
def test_create_a_variant_m3u8_with_two_playlists():
    low_playlist = m3u8.Playlist('http://example.com/low.m3u8',
                                 stream_info={
                                     'bandwidth': '1280000',
                                     'program_id': '1'
                                 },
                                 baseuri=None)
    high_playlist = m3u8.Playlist('http://example.com/high.m3u8',
                                  stream_info={
                                      'bandwidth': '3000000',
                                      'program_id': '1'
                                  },
                                  baseuri=None)

    variant_m3u8 = m3u8.M3U8()
    variant_m3u8.add_playlist(low_playlist)
    variant_m3u8.add_playlist(high_playlist)

    expected_content = """\
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1280000
http://example.com/low.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=3000000
http://example.com/high.m3u8
"""
    assert expected_content == variant_m3u8.dumps()
示例#4
0
def test_create_a_variant_m3u8_with_iframe_with_video_range_playlists():
    variant_m3u8 = m3u8.M3U8()

    for vrange in ['SDR', 'PQ', 'HLG']:
        playlist = m3u8.Playlist(uri='video-%s.m3u8' % vrange,
                                 stream_info={
                                     'bandwidth': 3000000,
                                     'video_range': vrange
                                 },
                                 media=[],
                                 base_uri='http://example.com/%s' % vrange)
        iframe_playlist = m3u8.IFramePlaylist(
            uri='video-%s-iframes.m3u8' % vrange,
            iframe_stream_info={
                'bandwidth': 3000000,
                'video_range': vrange
            },
            base_uri='http://example.com/%s' % vrange)

        variant_m3u8.add_playlist(playlist)
        variant_m3u8.add_iframe_playlist(iframe_playlist)

    expected_content = """\
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=3000000,VIDEO-RANGE=SDR
video-SDR.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=3000000,VIDEO-RANGE=PQ
video-PQ.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=3000000,VIDEO-RANGE=HLG
video-HLG.m3u8
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=3000000,VIDEO-RANGE=SDR,URI="video-SDR-iframes.m3u8"
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=3000000,VIDEO-RANGE=PQ,URI="video-PQ-iframes.m3u8"
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=3000000,VIDEO-RANGE=HLG,URI="video-HLG-iframes.m3u8"
"""
    assert expected_content == variant_m3u8.dumps()
def test_create_a_variant_m3u8_with_iframe_with_hdcp_level_playlists():
    variant_m3u8 = m3u8.M3U8()

    for hdcplv in ['NONE', 'TYPE-0', 'TYPE-1']:
        playlist = m3u8.Playlist(
            uri='video-%s.m3u8' % hdcplv,
            stream_info={'bandwidth': 3000000,
                         'hdcp_level': hdcplv},
            media=[],
            base_uri='http://example.com/%s' % hdcplv
        )
        iframe_playlist = m3u8.IFramePlaylist(
            uri='video-%s-iframes.m3u8' % hdcplv,
            iframe_stream_info={'bandwidth': 3000000,
                                'hdcp_level': hdcplv},
            base_uri='http://example.com/%s' % hdcplv
        )

        variant_m3u8.add_playlist(playlist)
        variant_m3u8.add_iframe_playlist(iframe_playlist)

    expected_content = """\
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=3000000,HDCP-LEVEL=NONE
video-NONE.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=3000000,HDCP-LEVEL=TYPE-0
video-TYPE-0.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=3000000,HDCP-LEVEL=TYPE-1
video-TYPE-1.m3u8
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=3000000,HDCP-LEVEL=NONE,URI="video-NONE-iframes.m3u8"
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=3000000,HDCP-LEVEL=TYPE-0,URI="video-TYPE-0-iframes.m3u8"
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=3000000,HDCP-LEVEL=TYPE-1,URI="video-TYPE-1-iframes.m3u8"
"""
    assert expected_content == variant_m3u8.dumps()
示例#6
0
文件: services.py 项目: VeemsHQ/veems
def generate_master_playlist(video_id):
    logger.info(
        'Generating master playlist for %s',
        video_id,
    )
    video = get_video(id=video_id)
    playlist_data = _get_rendition_playlists(video)
    variant_m3u8 = m3u8.M3U8()
    if not playlist_data:
        return None
    for item in playlist_data:
        base_url, uri = item['playlist_url'].rsplit('/', 1)
        playlist = m3u8.Playlist(
            item['playlist_url'],
            stream_info={
                'bandwidth': item['bandwidth'],
                'resolution': item['resolution'],
                'codecs': item['codecs_string'],
                'program_id': 1,
                'closed_captions': 'NONE',
                'subtitles': 'NONE',
            },
            media=[],
            base_uri=None,
        )
        variant_m3u8.add_playlist(playlist)
    return variant_m3u8.dumps()
示例#7
0
def generate_single_playlist(playlist_data):
    'Generate single m3u8 in memory'
    bandwidth = str(playlist_data['bandwidth'])
    m3u8_uri = playlist_data.get('input-path') or playlist_data.get('path')
    return m3u8.Playlist(m3u8_uri,
                         stream_info={
                             'bandwidth': bandwidth,
                             'program_id': '1'
                         },
                         baseuri="")
def test_variant_playlist_with_hdcp_level():
    variant_m3u8 = m3u8.M3U8()

    none_playlist = m3u8.Playlist(
        'http://example.com/none.m3u8',
        stream_info={'bandwidth': 1280000,
                     'hdcp_level': 'NONE',
                     'program_id': 1},
        media=[],
        base_uri=None
    )
    type0_playlist = m3u8.Playlist(
        'http://example.com/type0.m3u8',
        stream_info={'bandwidth': 3000000,
                     'hdcp_level': 'TYPE-0',
                     'program_id': 1},
       media=[],
       base_uri=None
    )
    type1_playlist = m3u8.Playlist(
        'http://example.com/type1.m3u8',
        stream_info={'bandwidth': 4000000,
                     'hdcp_level': 'TYPE-1',
                     'program_id': 1},
       media=[],
       base_uri=None
    )

    variant_m3u8.add_playlist(none_playlist)
    variant_m3u8.add_playlist(type0_playlist)
    variant_m3u8.add_playlist(type1_playlist)

    expected_content = """\
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1280000,HDCP-LEVEL=NONE
http://example.com/none.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=3000000,HDCP-LEVEL=TYPE-0
http://example.com/type0.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=4000000,HDCP-LEVEL=TYPE-1
http://example.com/type1.m3u8
"""
    assert expected_content == variant_m3u8.dumps()
示例#9
0
def test_create_a_variant_m3u8_with_two_playlists():
    variant_m3u8 = m3u8.M3U8()

    subtitles = m3u8.Media('english_sub.m3u8', 'SUBTITLES', 'subs', 'en',
                           'English', 'YES', 'YES', 'NO', None)
    variant_m3u8.add_media(subtitles)

    low_playlist = m3u8.Playlist('http://example.com/low.m3u8', stream_info={'bandwidth': '1280000', 'program_id': '1', 'subtitles': 'subs'}, media=[subtitles], base_uri=None)
    high_playlist = m3u8.Playlist('http://example.com/high.m3u8', stream_info={'bandwidth': '3000000', 'program_id': '1', 'subtitles': 'subs'}, media=[subtitles], base_uri=None)

    variant_m3u8.add_playlist(low_playlist)
    variant_m3u8.add_playlist(high_playlist)

    expected_content = """\
#EXTM3U
#EXT-X-MEDIA:URI="english_sub.m3u8",TYPE=SUBTITLES,GROUP-ID="subs",LANGUAGE="en",NAME="English",DEFAULT=YES,AUTOSELECT=YES,FORCED=NO
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1280000,SUBTITLES="subs"
http://example.com/low.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=3000000,SUBTITLES="subs"
http://example.com/high.m3u8
"""
    assert expected_content == variant_m3u8.dumps()
示例#10
0
def test_create_a_variant_m3u8_with_iframe_with_average_bandwidth_playlists():
    variant_m3u8 = m3u8.M3U8()

    subtitles = m3u8.Media('english_sub.m3u8', 'SUBTITLES', 'subs', 'en',
                           'English', 'YES', 'YES', 'NO', None)
    variant_m3u8.add_media(subtitles)

    low_playlist = m3u8.Playlist(uri='video-800k.m3u8',
                                 stream_info={
                                     'bandwidth': 800000,
                                     'average_bandwidth': 555000,
                                     'resolution': '624x352',
                                     'codecs': 'avc1.4d001f, mp4a.40.5',
                                     'subtitles': 'subs'
                                 },
                                 media=[subtitles],
                                 base_uri='http://example.com/')
    low_iframe_playlist = m3u8.IFramePlaylist(uri='video-800k-iframes.m3u8',
                                              iframe_stream_info={
                                                  'bandwidth': 151288,
                                                  'average_bandwidth': 111000,
                                                  'resolution': '624x352',
                                                  'codecs': 'avc1.4d001f'
                                              },
                                              base_uri='http://example.com/')

    variant_m3u8.add_playlist(low_playlist)
    variant_m3u8.add_iframe_playlist(low_iframe_playlist)

    expected_content = """\
#EXTM3U
#EXT-X-MEDIA:URI="english_sub.m3u8",TYPE=SUBTITLES,GROUP-ID="subs",\
LANGUAGE="en",NAME="English",DEFAULT=YES,AUTOSELECT=YES,FORCED=NO
#EXT-X-STREAM-INF:BANDWIDTH=800000,AVERAGE-BANDWIDTH=555000,\
RESOLUTION=624x352,CODECS="avc1.4d001f, mp4a.40.5",SUBTITLES="subs"
video-800k.m3u8
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=151288,\
AVERAGE-BANDWIDTH=111000,RESOLUTION=624x352,CODECS="avc1.4d001f",\
URI="video-800k-iframes.m3u8"
"""
    assert expected_content == variant_m3u8.dumps()