Есть ли способ узнать, защищен ли манифест DASH DRM в ExoPlayer?
Я хочу определить, защищен ли URL-адрес манифеста DASH DRM или нет с помощью ExoPlayer - однако я не могу найти что-то, что может помочь мне в этом.
Я вижу, что вы можете достичь этого, используя SmoothStreaming в ExoPlayer, так как есть элемент защиты.
Просто интересно, сталкивался ли кто-нибудь с этим раньше?
1 ответ
Сам манифест DASH содержит элемент, который указывает, защищен ли контент или нет.
Например, вот указание PlayReady (из документации MS):
<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>
URL-адреса отдельных медиа-фрагментов могут быть запутанными или случайными, поэтому сами эти URL-адреса на самом деле не помогают передавать эту информацию.
ExoPlayer имеет проверку индикации защиты в манифесте. Вы можете видеть, что он анализируется в классе 'DashManifestParser' - например:
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);
}
Следует помнить (или опасаться…) о том, что в спецификации говорится, что тот факт, что носитель защищен, может быть указан в манифесте и / или на самом носителе - то есть в файле ISO есть "окно", где Схема защиты информации может быть указана.
Теоретически это означает, что вы можете указать маршрут в любом месте, но на практике не все игроки реализуют его таким образом - некоторые, включая ExoPlayer в прошлом, я думаю, не будут воспроизводиться, если медиапоток был защищен, но Манифест не указывал на это.