inputstream.adaptive
inputstream.adaptive copied to clipboard
Audio track missing on a certain manifest
Bug report
Describe the bug
An online provided mpd manifest does not play with audio whereas webplayers play the stream just fine.
I extracted (one of multiple available) manifest files for this random vimeo video. The manifest plays fine with online players like the reference player on dashif, but the audio track is missing when playing in kodi.
To make testing easy I created this strm file:
#KODIPROP:inputstream=inputstream.adaptive
#KODIPROP:inputstream.adaptive.manifest_type=mpd
#KODIPROP:inputstream.adaptive.license_type=com.widevine.alpha
https://skyfire.vimeocdn.com/1654764301-0x3608f234e3f421a24252cc30bedc8ac3b44d3b27/2ba46ebf-7f05-4124-ae26-3ef25cf18689/video/e78d870c,694d063f,4cec9c37,554e45d3,832d9bb3/master.mpd
Expected Behavior
Play a regular found mpd file from the internet with audio
Actual Behavior
Audio is missing.
To Reproduce
Steps to reproduce the behavior:
- Try to play the attached mpd with the exemplary provided strm file
- Check for audio
Debuglog
The debuglog can be found here:
https://pastebin.com/2sDcPYMf
MPD/M3U8s/ISM
An example or copy of a manifest (or manifests for HLS - master and variants) can be found here:
https://82vod-adaptive.akamaized.net/exp=1654764301~acl=%2F2ba46ebf-7f05-4124-ae26-3ef25cf18689%2F%2A~hmac=30c07eff4afc8879e4620542b88fb0608ce1584ec5d20176e9f56528ad9c756b/2ba46ebf-7f05-4124-ae26-3ef25cf18689/video/e78d870c,694d063f,4cec9c37,554e45d3,832d9bb3/master.mpd?base64_init=1
Additional context or screenshots (if appropriate)
Here is some additional context or explanation that might help:
- I try to implement support for input stream adaptive for the addon plugin.video.sendtokodi. We use youtube_dl and yt_dlp to extract playable formats from URLs provided by users. When available I do not want to create a custom manifest file and use the downloadable .mpd/.m3u8 files instead.
- In the case above yt_dlp provides the manifest URL with an additional
?base64_init=1
parameter like../master.mpd?base64_init=1
I have tested playback with this original URL and the parameter stripped. Same result.
Your Environment
Used Operating system:
-
[ ] Android
-
[ ] iOS
-
[ ] tvOS
-
[x] Linux
-
[ ] OSX
-
[ ] Windows
-
[ ] Windows UWP
-
Operating system version/name: Ubuntu 20.04. Server
-
Kodi version: 19.4.0
-
inputstream.adaptive version: 19.0.5
note: Once the issue is made we require you to update it with new information should that be required. Team Kodi will consider your problem report however, we will not make any promises the problem will be solved.
please attach the mpd file as text file, not as weblink because is expired
Sure, here is the file as a txt and the content
master.mpd
<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:mpeg:dash:schema:mpd:2011" profiles="urn:mpeg:dash:profile:isoff-live:2011" type="static" mediaPresentationDuration="PT14M6.137S" minBufferTime="PT6.000S">
<BaseURL>../</BaseURL>
<Period start="PT0.000S" duration="PT14M6.137S">
<AdaptationSet bitstreamSwitching="true">
<ContentComponent contentType="video"></ContentComponent>
<Representation id="video-e78d870c" codecs="avc1.64001F,mp4a.40.2" mimeType="video/mp4" width="960" height="540" frameRate="24000/1001" startWithSAP="1" bandwidth="1798000" audioSamplingRate="48000">
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"></AudioChannelConfiguration>
<SegmentTemplate timescale="48000" media="e78d870c/chop/segment-$Number$.m4s" initialization="e78d870c/chop/segment-0.mp4?r=dXM%3D">
<SegmentTimeline>
<S t="0" d="288288" r="139"></S>
<S t="40360320" d="254253"></S>
</SegmentTimeline>
</SegmentTemplate>
</Representation>
<Representation id="video-694d063f" codecs="avc1.640815,mp4a.40.2" mimeType="video/mp4" width="426" height="240" frameRate="24000/1001" startWithSAP="1" bandwidth="384000" audioSamplingRate="24000">
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="1"></AudioChannelConfiguration>
<SegmentTemplate timescale="24000" media="694d063f/chop/segment-$Number$.m4s" initialization="694d063f/chop/segment-0.mp4?r=dXM%3D">
<SegmentTimeline>
<S t="0" d="144144" r="139"></S>
<S t="20180160" d="127126"></S>
</SegmentTimeline>
</SegmentTemplate>
</Representation>
<Representation id="video-4cec9c37" codecs="avc1.64001E,mp4a.40.2" mimeType="video/mp4" width="640" height="360" frameRate="24000/1001" startWithSAP="1" bandwidth="682000" audioSamplingRate="48000">
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"></AudioChannelConfiguration>
<SegmentTemplate timescale="48000" media="4cec9c37/chop/segment-$Number$.m4s" initialization="4cec9c37/chop/segment-0.mp4?r=dXM%3D">
<SegmentTimeline>
<S t="0" d="288288" r="139"></S>
<S t="40360320" d="254253"></S>
</SegmentTimeline>
</SegmentTemplate>
</Representation>
<Representation id="video-554e45d3" codecs="avc1.640028,mp4a.40.2" mimeType="video/mp4" width="1920" height="1080" frameRate="24000/1001" startWithSAP="1" bandwidth="6060000" audioSamplingRate="48000">
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"></AudioChannelConfiguration>
<SegmentTemplate timescale="48000" media="554e45d3/chop/segment-$Number$.m4s" initialization="554e45d3/chop/segment-0.mp4?r=dXM%3D">
<SegmentTimeline>
<S t="0" d="288288" r="139"></S>
<S t="40360320" d="254253"></S>
</SegmentTimeline>
</SegmentTemplate>
</Representation>
<Representation id="video-832d9bb3" codecs="avc1.640020,mp4a.40.2" mimeType="video/mp4" width="1280" height="720" frameRate="24000/1001" startWithSAP="1" bandwidth="3139000" audioSamplingRate="48000">
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"></AudioChannelConfiguration>
<SegmentTemplate timescale="48000" media="832d9bb3/chop/segment-$Number$.m4s" initialization="832d9bb3/chop/segment-0.mp4?r=dXM%3D">
<SegmentTimeline>
<S t="0" d="288288" r="139"></S>
<S t="40360320" d="254253"></S>
</SegmentTimeline>
</SegmentTemplate>
</Representation>
</AdaptationSet>
</Period>
</MPD>
and in case somebody is willing to install yt_dlp here is a minimal python3 example on how to get that mpds URL
minimal_vimeo_example.py
from yt_dlp import YoutubeDL
url = "https://vimeo.com/272629446"
with YoutubeDL() as ydl:
ydl.add_default_info_extractors()
result = ydl.extract_info(url, download=False)
manifest_urls = [] # several manifests might be availbale as dash/hls/different hoster
for f in result["formats"]:
# search for a format having both video and audio as well as a manifest
if "manifest_url" in f.keys() and f['vcodec'] != 'none' and f['acodec'] != 'none':
if f['manifest_url'] not in manifest_urls:
manifest_urls.append(f['manifest_url'])
print(f"Your URLs\n{manifest_urls}")
thanks for the snippet has worked and i have saved a lot of time from a first look seem that this type of manifest is not full supported from our DASH parser because the video stream include also the audio one, also looking at the log only the video stream is sent to kodi i think we will need to implement this support
meantime when are available you can play m3u8 so HSL manifest that already have this implementation
this is a duplicate of #343