Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dump and dumps functions do not show subtitles and audio fields added to stream_info #301

Open
utkrist opened this issue Oct 14, 2022 · 3 comments

Comments

@utkrist
Copy link

utkrist commented Oct 14, 2022

I want to inject audios and subtitles in m3u8 file. The first step is to add new audios and subtitles as media. The second step would be to add subtitle and audio field in the renditions list.

The initial file looked like this:

#EXTM3U
#EXT-X-INDEPENDENT-SEGMENTS
#EXT-X-VERSION:5

#EXT-X-STREAM-INF:CLOSED-CAPTIONS=NONE,BANDWIDTH=2516370,AVERAGE-BANDWIDTH=2516370,RESOLUTION=1280x720,CODECS="mp4a.40.2,avc1.640020"
video_720p.m3u8
#EXT-X-STREAM-INF:CLOSED-CAPTIONS=NONE,BANDWIDTH=1640580,AVERAGE-BANDWIDTH=1640580,RESOLUTION=960x540,CODECS="mp4a.40.2,avc1.640020"
video_540p.m3u8

The modified file should look like this:

#EXTM3U
#EXT-X-INDEPENDENT-SEGMENTS
#EXT-X-VERSION:5

#EXT-X-MEDIA:URI="audios/Nepali/master.m3u8",TYPE=AUDIO,GROUP-ID="Audio",LANGUAGE="np",NAME="Nepali",DEFAULT=YES,AUTOSELECT=YES
#EXT-X-MEDIA:URI="audios/German/master.m3u8",TYPE=AUDIO,GROUP-ID="Audio",LANGUAGE="de",NAME="German",DEFAULT=NO,AUTOSELECT=NO

#EXT-X-MEDIA:URI="subtitles/German/master.m3u8",TYPE=SUBTITLES,GROUP-ID="Subtitle",LANGUAGE="de",NAME="German",AUTOSELECT=NO,FORCED=NO
#EXT-X-MEDIA:URI="subtitles/Nepali/master.m3u8",TYPE=SUBTITLES,GROUP-ID="Subtitle",LANGUAGE="np",NAME="Nepali",AUTOSELECT=NO,FORCED=NO

#EXT-X-STREAM-INF:CLOSED-CAPTIONS=NONE,BANDWIDTH=2516370,AVERAGE-BANDWIDTH=2516370,RESOLUTION=1280x720,CODECS="mp4a.40.2,avc1.640020",AUDIO="Audio",SUBTITLES="Subtitle" 
607588853682e1001241042c_720p.m3u8
#EXT-X-STREAM-INF:CLOSED-CAPTIONS=NONE,BANDWIDTH=1640580,AVERAGE-BANDWIDTH=1640580,RESOLUTION=960x540,CODECS="mp4a.40.2,avc1.640020",AUDIO="Audio",SUBTITLES="Subtitle"
607588853682e1001241042c_540p.m3u8
#EXT-X-STREAM-INF:CLOSED-CAPTIONS=NONE,BANDWIDTH=4755240,AVERAGE-BANDWIDTH=4755240,RESOLUTION=1920x1080,CODECS="mp4a.40.2,avc1.64002a",AUDIO="Audio",SUBTITLES="Subtitle"
607588853682e1001241042c_1080p.m3u8
#EXT-X-STREAM-INF:CLOSED-CAPTIONS=NONE,BANDWIDTH=994068,AVERAGE-BANDWIDTH=994068,RESOLUTION=640x360,CODECS="mp4a.40.2,avc1.64001f",AUDIO="Audio",SUBTITLES="Subtitle"
607588853682e1001241042c_360p.m3u8
#EXT-X-STREAM-INF:CLOSED-CAPTIONS=NONE,BANDWIDTH=697078,AVERAGE-BANDWIDTH=697078,RESOLUTION=480x270,CODECS="mp4a.40.2,avc1.64001e",AUDIO="Audio",SUBTITLES="Subtitle"
607588853682e1001241042c_270p.m3u8

With the code below the medias get added successfully but the AUDIO and SUBTILES fields do not get added in the lines starting with #EXT-X-STREAM-INF. The problem lies in the dump function.'

import m3u8

manifest file = './tmp/manifest.m3u8'

m3u8_obj = None
with open(manifest_file, 'r') as manifest:
    content = manifest.read()
    m3u8_obj = m3u8.loads(content)

# Add audios media

new_audio = m3u8.Media(uri='audios/Nepali/master.m3u8', type='AUDIO', group_id='Audio', language='np', name='Nepali', default='YES', autoselect='YES')
m3u8_obj.add_media(new_audio)

new_audio = m3u8.Media(uri='audios/German/master.m3u8', type='AUDIO', group_id='Audio', language='de', name='German', default='NO', autoselect='NO')
m3u8_obj.add_media(new_audio)

# Add subtitle media

new_subtitle = m3u8.Media(uri=f'subtitles/Nepali/master.m3u8', type='SUBTITLES', group_id='Subtitle', language='np', name='Nepali', forced='NO', autoselect='NO')
m3u8_obj.add_media(new_subtitle)

new_subtitle = m3u8.Media(uri=f'subtitles/German/master.m3u8', type='SUBTITLES', group_id='Subtitle', language='de', name='German', forced='NO', autoselect='NO')
m3u8_obj.add_media(new_subtitle)

# Trying to add audio and subtitles field in renditions

for playlist in m3u8_obj.playlists:
    stream_info = playlist.stream_info
    stream_info.audio = 'Audio'
    stream_info.subtitles = 'Subtitle'

print( m3u8_obj.dumps())

I request you to fix the dump and the dumps function to add the above fields.

@bbayles
Copy link
Contributor

bbayles commented Oct 17, 2022

Try this code:

import m3u8

m3u8_text = """
#EXTM3U
#EXT-X-INDEPENDENT-SEGMENTS
#EXT-X-VERSION:5

#EXT-X-STREAM-INF:CLOSED-CAPTIONS=NONE,BANDWIDTH=2516370,AVERAGE-BANDWIDTH=2516370,RESOLUTION=1280x720,CODECS="mp4a.40.2,avc1.640020"
video_720p.m3u8
#EXT-X-STREAM-INF:CLOSED-CAPTIONS=NONE,BANDWIDTH=1640580,AVERAGE-BANDWIDTH=1640580,RESOLUTION=960x540,CODECS="mp4a.40.2,avc1.640020"
video_540p.m3u8
"""

m3u8_obj = m3u8.loads(m3u8_text)

nepali_audio = m3u8.Media(uri='audios/Nepali/master.m3u8', type='AUDIO', group_id='Audio', language='np', name='Nepali', default='YES', autoselect='YES')
m3u8_obj.add_media(nepali_audio)

german_audio = m3u8.Media(uri='audios/German/master.m3u8', type='AUDIO', group_id='Audio', language='de', name='German', default='NO', autoselect='NO')
m3u8_obj.add_media(german_audio)

nepali_subs = m3u8.Media(uri=f'subtitles/Nepali/master.m3u8', type='SUBTITLES', group_id='Subtitle', language='np', name='Nepali', forced='NO', autoselect='NO')
m3u8_obj.add_media(nepali_subs)

german_subs = m3u8.Media(uri=f'subtitles/German/master.m3u8', type='SUBTITLES', group_id='Subtitle', language='de', name='German', forced='NO', autoselect='NO')
m3u8_obj.add_media(german_subs)

for playlist in m3u8_obj.playlists:
    playlist.media += [nepali_audio, german_audio, nepali_subs, german_subs]
    
print(m3u8_obj.dumps())

@rokam

This comment was marked as outdated.

@rokam

This comment was marked as outdated.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants