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

Audio track missing on a certain manifest #1005

Open
1 of 7 tasks
nullket opened this issue Jun 9, 2022 · 4 comments
Open
1 of 7 tasks

Audio track missing on a certain manifest #1005

nullket opened this issue Jun 9, 2022 · 4 comments
Labels
Component: MPEG-DASH Duplicate This issue or pull request already exists Issue Type: Improvement issue has requested to improve an existing functionality

Comments

@nullket
Copy link

nullket commented Jun 9, 2022

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:

  1. Try to play the attached mpd with the exemplary provided strm file
  2. 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

  • 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.

@CastagnaIT
Copy link
Collaborator

please attach the mpd file as text file, not as weblink because is expired

@nullket
Copy link
Author

nullket commented Jun 9, 2022

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}")

@CastagnaIT
Copy link
Collaborator

CastagnaIT commented Jun 9, 2022

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

@CastagnaIT CastagnaIT added Issue Type: Improvement issue has requested to improve an existing functionality Component: MPEG-DASH labels Jun 9, 2022
@CastagnaIT
Copy link
Collaborator

this is a duplicate of #343

@CastagnaIT CastagnaIT added the Duplicate This issue or pull request already exists label Jul 4, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Component: MPEG-DASH Duplicate This issue or pull request already exists Issue Type: Improvement issue has requested to improve an existing functionality
Projects
None yet
Development

No branches or pull requests

2 participants