The DASH manifest itself contains an element which indicates whether the content is protected or not.
For example here is a PlayReady indication (from the MS documentation):
<ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95" value=”MSPR 2.0”>
<cenc:pssh>
<!-- *base64-encoded PlayReady ‘pssh’ complete box* -->
</cenc:pssh>
<mspr:pro>
<!-- *base64-encoded PlayReady Object* -->
</mspr:pro>
</ContentProtection>
The individual media 'chunk' URL's can be obfuscated or random so these URLs themselves do not really help convey this information.
ExoPlayer has a check of the protection indication in the manifest. You can see it being parsed in the 'DashManifestParser' class - e.g.:
else if (XmlPullParserUtil.isStartTag(xpp, "ContentProtection")) {
Pair<String, SchemeData> contentProtection = parseContentProtection(xpp);
if (contentProtection.first != null) {
drmSchemeType = contentProtection.first;
}
if (contentProtection.second != null) {
drmSchemeDatas.add(contentProtection.second);
}
One this to be aware of (or wary of..) is that the spec says that the fact that media is protected can be indicated in the manifest and/or the media itself - i.e. an ISO file there is a 'box' where the protections scheme information can be specified.
In theory this means that you can specify itinerary either place, but in practice not all players implement it this way - some, including ExoPlayer in the past I think, would not play if the media stream was protected but the Manifest did not indicate this.