2017-01-17 34 views
0

У меня есть кодер MPEG-DASH, который полностью работоспособен. Теперь я пытаюсь расширить его, чтобы потоковый контент был защищен DRM. У меня есть два вопроса, которые я не в состоянии довольно легко понять, так что я решил спросить вас здесь :)Кодер MPEG-DASH CENC производит ошибку MEDIA_ERR_DECODE в браузере

  1. В полном шифрования образца (звуковая дорожка) могу я просто зашифровать каждый образец «mdata» коробка с AES128/CTR/NoPadding и 8byte long IV, которые позже хранятся в поле «senc»?

  2. Если поле «senc» является контейнером для IVs - мне все еще нужны «сайз» и «сайо» в «traf» (фрагмент)?

  3. Если я сделаю - смещение/размер того, что я должен хранить там? Из окна «senc» или ...?

Я проверил, что поток прекрасно работает без DRM, DRM сеанс успешно создан с помощью «pssh» коробки и поддержку ClearKey DRM в dash.js. Единственное, что беспокоит меня в течение трех дней, - это то, как должны выглядеть окна с фрагментами, чтобы браузер мог успешно его декодировать? Я предполагаю, что я сделал что-то неправильно, связанное с предыдущими тремя вопросами.

ответ

0

Хорошо, позвольте мне ответить самому себе - возможно, у кого-то будут подобные проблемы.

  1. Да и нет. MP4A содержит фреймы, которые сериализуются в mdata. Каждый кадр представляет собой образец. Это означает, что кадр за кадром должен проходить через шифр AES128/CTR/NoPadding, а шифрованный текст должен храниться в mdata вместо обычного кадра. Каждый кадр связан с ним.

  2. Да! Хотя senc-поле обнаружено в Mp4-проводнике, он не будет использоваться CENC-совместимым расшифровщиком unles, там есть файлы saio/saiz, которые указывают на senc. Senc не следует хранить в поле mdat. Сайо должен указать на начало IV в senc - не на самом деле senc.

  3. Saiz содержит размеры одной записи, но не всей коробки. У Saio всего 1 запись, и она указывает на первую позицию в senc box.

Надеюсь, что это поможет - я протестировал свой поток с помощью dash.js и bitmovin player - работает в обоих.