MPEG-DASH CENC encoder создает проблему MEDIA_ERR_DECODE в браузере

У меня есть полнофункциональный кодер MPEG-DASH. Теперь я пытаюсь расширить его, чтобы потоковое содержимое было защищено DRM. У меня есть два вопроса, которые я не могу понять довольно легко, поэтому я решил спросить вас здесь 🙂

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

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

  3. If I do-offset / size of what should I store there? Из коробки «senc» или …?

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

1 ответ

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

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

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

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

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