2015-04-15 2 views
0

Возможно ли для Android VideoView прочитать файл MP4, но пропустить первые 512 байтов?Как я могу заставить Android VideoView читать проложенный файл?

Наш клиент не хочет, чтобы его видео легко переносилось/копировалось на разных устройствах. Мы сделали это, чтобы «обфускать» файл MP4, добавив случайные 512 байт в начале файла, а затем переименовав файлы с другим расширением файла.

Очевидно, что вышеупомянутый подход не полностью защищает его видео от пиратства. Он в порядке с достаточной защитой для «не-техников».

В настоящее время, при воспроизведении видео, наше приложение для Android извлекает фактический видеоконтент в новый временный файл, пропуская первые 512 байт. Этот временный файл будет тем, который воспроизводится VideoView.

Проблема в том, что это занимает много времени, особенно, что наши видеоролики составляют более 100 МБ + каждый. Это явно не приемлемое решение.

Я думаю, если мы сможем просто сделать VideoView пропустить первые 512 байт, мы все настроены. Является ли это возможным? Если нет, каковы лучшие альтернативы?

Отказ от ответственности: Я являюсь разработчиком веб-приложения сервера, который добавляет дополнение размером в 512 байт. Я не разработчик Android. Я отправляю этот вопрос от имени моего коллеги Android dev. Простите меня, если наш подход полностью нуб. Не стесняйтесь предлагать лучшие (и, надеюсь) простые способы.

+0

Я считаю, что правильным решением для этого будет подход на основе DRM вместо случайного заполнения. – dashmug

+0

Дашмуг, вы получили ответ на это? Мы в той же ситуации. – user1923551

+0

@ user1923551: Нет, я не нашел для этого решения. Мы все еще используем обходной путь. – dashmug

ответ

0

Если при «пропуске» вы хотите перейти к определенной точке видео, вы можете использовать VideoView#seekTo(int msec). Однако этот метод просто пропускает запуск в течение определенной продолжительности в видео.

Если вы хотите вырезать видео в начале или выполнить некоторые другие модификации, то одно из них - предварительно обработать его на сервере, а - поток результат в приложение. Таким образом, вашему приложению не придется обрабатывать тяжелую предварительную обработку и, что более важно, не загружать весь видеофайл заранее.

+0

Нам нужно пропустить первые 512 байт, а не определенное количество миллисекунд, поэтому 'seekto()' не помогает. Мы также должны сделать видео воспроизводимым в автономном режиме, чтобы исключить потоковое вещание. – dashmug

+0

Но проблема, которую вы задали, была «требуется долго», особенно потому, что видеоролики составляют 100 МБ. Что займет много времени? Загрузка или обработка? Если вы загружаете, альтернативы нет, так как видео должны воспроизводиться в автономном режиме. Если вы обрабатываете, вы можете использовать серверный подход для предварительной обработки видео. Помните, хотя некоторые пользователи будут раздражать необходимость загрузки больших файлов. – inmyth

+0

«Требуется много времени» означает удаление проложенных байтов. Так как устройству придется загружать весь видеофайл в память, а затем записывать его как новый временный файл. Предполагается, что сервер добавит отступы, и клиент должен удалить его при воспроизведении. – dashmug