Воспроизведение зашифрованного MP4
Я делаю (локальное - мультиплатформенное) приложение для защиты видео, но я не знаю, какое правильное решение сначала "зашифровать -> сохранить на HDD", а затем "загрузить с HDD->decrypt->play" в зашифрованном виде видео.
Я прочитал о MPEG-DASH и некоторых DRM и нашел эту команду Bento4:
mp4dash --encryption-key=000102030405060708090a0b0c0d0e0f:00112233445566778899aabbccddeeff --encryption-args="--property 1:ClearLeadFragments:10 --property 2:ClearLeadFragments:10" movie.mp4
но я не уверен, что MPEG-DASH может быть частью решения или нет.
Как я могу решить это?1 ответ
После многих поисков в Google я нашел ответ Erti-Chris Eelmaa здесь:
Воспроизведение зашифрованного видео
Я написал свой собственный Videoplayer, используя openGL+FFMPEG, который мог воспроизводить mp4 и расшифровывать каждый кадр в GPU с помощью шейдеров. Я также экспериментировал с другими возможными решениями, такими как потоковая передача с веб-сервера с использованием VLC. (VLC предлагает какое-то шифрование / дешифрование при работе с потоками) и yada yada yada.
Также одним из решений было использование 4 медиаэлементов (WPF), и фактическое видео было фактически разделено на 4 области, и каждая область была повернута так, что видео не было доступно для просмотра. Загрузив видео в 4 медиаэлемента, вы можете наметить, какую часть вы хотите показать, а также повернуть его обратно. Но, честно говоря, MediaElement - это плохо.
Однако я закончил именно тем, что сказал RomanR. Я построил граф DirectShow с использованием mp4splitter, ffdshow, videorenderer и изменил исходный фильтр mp4splitter. Чтение происходит в BaseSplitter/AsyncReader.cpp (просто измените функцию SyncRead), который использует mp4splitter.
Если вы хотите реализовать это самостоятельно, просто используйте проект MPC-HC и измените фильтры так, как вам нравится. Мне потребовалось некоторое время, чтобы обойти концепцию DirectShow, но как только вы ее поняли, она стала отличным оружием.