Hello Robert,
Thank you for the feedback and detailed report.
At the moment Viblast Player does not support audio only dash streams.
Hello Robert,
With the latest Viblast Player version 6.54 we added support for DASH audio-only streams.
Thank you again for the feedback.
Hello again,
Many thanks for the release of 6.54! Interestingly enough, it worked for that test stream for the first few segments and then became very confused by it and started to 404 all of the segments.
Manifest: https://ais-demo.streamguys1.com/zmihr/manifest.mpd
As an example, Viblast attempted to load in segments of the following URL structure:
https://ais-demo.streamguys1.com/zmihr///ais-chunk.streamguys1.com/zmihr/dash-5407442944.m4a
which would tell me that that manifests use of agnostic protocols is producing an error in the chunk tune-in URL generation logic.
Here is an example .mpd from that stream:
<MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="urn:mpeg:dash:schema:mpd:2011"
xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 http://standards.iso.org/ittf/PubliclyAvailableStandards/MPEG-DASH_schema_files/DASH-MPD.xsd"
type="dynamic"
availabilityStartTime="2018-03-26T17:06:41Z"
publishTime="2018-03-26T17:10:55Z"
minimumUpdatePeriod="PT6S"
maxSegmentDuration="PT6S"
minBufferTime="PT4S"
profiles="urn:mpeg:dash:profile:isoff-live:2011">
<Period id="2" start="PT45.139S">
<BaseURL>//ais-chunk.streamguys1.com/zmihr/</BaseURL>
<AdaptationSet mimeType="audio/mp4" segmentAlignment="true">
<SegmentTemplate timescale="22050" presentationTimeOffset="5406230528"
initialization="dash-init-49231.m4a"
media="dash-$Time$.m4a">
<SegmentTimeline>
<S t="5410750464" d="110592" />
<S t="5410861056" d="109568" />
<S t="5410970624" d="110592" />
<S t="5411081216" d="110592" />
<S t="5411191808" d="109568" />
<S t="5411301376" d="110592" />
</SegmentTimeline>
</SegmentTemplate>
<Representation id="1" bandwidth="31000" codecs="mp4a.40.5" startWithSAP="1" />
</AdaptationSet>
</Period>
</MPD>
Notice the use of <BaseURL>//ais-chunk.streamguys1.com/zmihr/</BaseURL> compared to the location's hard coded use of https. I thought at first that there might be an issue from my loading the player over http but the stream resources being over https, but the issue persists whether or not the player loads over http(s).
Again, many thanks for your time in looking into this issue and addressing it with 6.54!
Our team made a modification to the mpd generation config to enforce a hardcoded protocol value instead of the agnostic //, which verified we could listen to the stream long-form.
I'll see if I can re-provide a manifest that has the agnostic BaseURL value, for testing purposes, but for the time being that test stream is now explicitly defined as https and seems to be working.
Hi Robert,
Having a test stream would be great!
Your manifest is a little bit strange as it contains variable number of periods and it seems like there are some gaps between them.
Which streaming server server do you use?
These DASH streams are being generated by AIS Streaming Server 8.0 from Adswizz. https://www.adswizz.com/wp-content/uploads/2018/02/AIS-onepager.pdf
I've requested a secondary stream that maintains the agnostic protocol for the chunk/segment BaseURL, for testing purposes. I'll add it to this thread once it's prepared.
Stream that uses protocol agnostic domain for the BaseURL value of the period definitions: http://ais-demo.streamguys1.com/zmihr-vb/manifest.mpd .
To note: That stream begins with a small section of audio preroll, which is served from the same domain that the manifest itself is served from, but the subsequent content segments are served from a separate ais-chunk subdomain instead of ais-demo. Where that short section of preroll audio ends is where you'll see the agnostic protocol appear. Prior to that, for the first 10-30 seconds, you'll see a BaseURL of the same domain as the Location for the manifest.
Hi Robert,
The DASH spec is not clear enough in the part of BaseURL elements' values. Seems like the value could be relative and absolute and if it is absolute it should start with protocol scheme in order to specify explicitly which protocol - HTTP or HTTPS, to be used for segment delivery. When the scheme is not defined the player behavior is not defined, too. We patched the segments' url calculation code in order to handle such scenario by using the defaults, which means that the page loading protocol will be used. The patch is not correct enough because the calculated stream access points URLs depend on the page url. Thus, it is better to fix your server, instead to rely on the unpredictable behavior.
Many thanks for all the support on this issue!
We will keep those notes in mind going forward.
Robert Minnix
Hello,
We are currently testing playback through Viblast of live DASH audio-only content.
The following source, https://ais-demo.streamguys1.com/zmihr/manifest.mpd , and its variants are the primary offenders.
That source is used in this player: https://labs.streamguys.com/sgplayer/dash/player.php .
We can get successful playback of other example DASH streams, but not this one. We have verified that we can get playback of this stream using Google's Shaka Player, using MSE, so we know that it's well enough formatted for at least one HTML5 DASH implementation to play it.
As part of this, we see successful requests for the stream's manifest, but no subsequent requests for any of the segments.
In the developer console with fully verbose logging, we see the following types of messages:
[vb] Warning(DashManager.cc:80): [DashManager|Video] No AS
The testing player linked above if using viblast|6.53.2.468c018c . Full debug info below,
{
"version": "viblast|6.53.2.468c018c|Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36",
"isMseSupported": true,
"videoTags": [
{
"currentTime": 0,
"buffered": []
}
],
"events": [
{
"notice": "License is DkQKUmJPim",
"timestamp": 1521834705143
},
{
"name": "start",
"channel": "{\"cdnStream\":\"https://ais-demo.streamguys1.com/zmihr/manifest.mpd\"}",
"ctx": 5360392,
"timestamp": 1521834705174
},
{
"notice": "License is valid",
"timestamp": 1521834707975
},
{
"notice": "resume",
"timestamp": 1521834712199
}
],
"errors": [
{
"error": "[12:51:45] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834705788
},
{
"error": "[12:51:52] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834712125
},
{
"error": "[12:51:58] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834718509
},
{
"error": "[12:52:05] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834725700
},
{
"error": "[12:52:12] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834732475
},
{
"error": "[12:52:19] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834739659
},
{
"error": "[12:52:26] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834746847
},
{
"error": "[12:52:33] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834753997
},
{
"error": "[12:52:40] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834760383
},
{
"error": "[12:52:47] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834767589
},
{
"error": "[12:52:54] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834774770
},
{
"error": "[12:53:01] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834781554
},
{
"error": "[12:53:08] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834788732
},
{
"error": "[12:53:15] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834795517
},
{
"error": "[12:53:15] [vb] Warning(DashMpdManager.cc:181): Wrong value for minimumUpdatePeriod=6. It is larger than the duration=5.01551\n",
"timestamp": 1521834795523
},
{
"error": "[12:53:21] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834801503
},
{
"error": "[12:53:28] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834808710
},
{
"error": "[12:53:35] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834815868
},
{
"error": "[12:53:42] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834822672
},
{
"error": "[12:53:49] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834829851
},
{
"error": "[12:53:56] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834836641
},
{
"error": "[12:54:03] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834843832
},
{
"error": "[12:54:10] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834850208
},
{
"error": "[12:54:16] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834856600
},
{
"error": "[12:54:23] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834863775
},
{
"error": "[12:54:30] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834870557
},
{
"error": "[12:54:37] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834877740
},
{
"error": "[12:54:44] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834884545
},
{
"error": "[12:54:51] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834891722
},
{
"error": "[12:54:58] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834898921
},
{
"error": "[12:55:05] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834905692
},
{
"error": "[12:55:12] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834912076
},
{
"error": "[12:55:18] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834918889
},
{
"error": "[12:55:25] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834925646
},
{
"error": "[12:55:32] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834932827
},
{
"error": "[12:55:39] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834939620
},
{
"error": "[12:55:46] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834946807
},
{
"error": "[12:55:53] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834953594
},
{
"error": "[12:56:00] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834960790
},
{
"error": "[12:56:07] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834967568
},
{
"error": "[12:56:14] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834974746
},
{
"error": "[12:56:21] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834981533
},
{
"error": "[12:56:28] [vb] Warning(DashManager.cc:80): [DashManager|Video] No AS\n",
"timestamp": 1521834988716
}
],
"uncaughtExceptions": [],
"totalDownloadedFromCdn": "0.00000"
}