Захват видео с экрана Android

195

Забудьте о скриншотах, возможно ли захватить видео работающего приложения в Android? Укоренен или не укоренен, мне все равно, я хочу по крайней мере 15 кадров в секунду.

Обновление: я не хочу никакого внешнего оборудования. Цель состоит в том, чтобы сделать его идеально переносимым, и каждый кадр захватывается в ОС Android. Если это пересекает границы приложения SDK, я готов перейти к изменениям на уровне ОС, но мне нужна отправная точка.

Taranfx
источник
Я полностью вижу, что здесь говорится. Похоже, что эмулятор должен иметь функцию для перенаправления текущего экрана в видеофайл. Мне бы понравилась такая функция, чтобы я мог делать информативные видеоролики о моих играх и приложениях.
Роберт Массайоли
1
У тебя есть решение для этого? если так, пожалуйста, поделитесь с нами. Я тоже должен снять видео экрана Android.
Дипа
@ Deepa Нет, нет хорошего способа сделать это.
Taranfx
Проверьте этот проект: sourceforge.net/projects/ashot
Nirmal Patel
Можно ли читать с аппаратного экрана буфера?
мП

Ответы:

244

Устройства Android 4.4 (KitKat) и выше имеют утилиту для записи экрана устройства Android. Подключите устройство в режиме разработчика / отладки под управлением KitKat с помощью утилиты adb через USB, а затем введите следующее:

adb shell screenrecord /sdcard/movie.mp4
(Press Ctrl-C to stop)
adb pull /sdcard/movie.mp4

Запись экрана ограничена максимум 3 минутами.

Ссылка: https://developer.android.com/studio/command-line/adb.html#screenrecord

Джо Фернандес
источник
дает мне ответ, как скриншот: не найдено adb устарел почему?
Яд
1
Похоже, ваш Android SDK устарел. Откройте Android SDK Manager и загрузите новейшие инструменты SDK.
Джо Фернандес
1
Позор, что нет звука с этим. Но все же круто.
Мартин Каподичи
1
Просто добавим, что на этой странице есть пакет с отдельным скриптом adb + "ScreenRecord.bat", который можно дважды щелкнуть, чтобы начать запись видео на экране Android. Skipser.com/p/2/p/record-screen-video-in -android.html
arunskrish
1
Я получаю сообщение об ошибке ПРЕДУПРЕЖДЕНИЕ: linker: libsac3d.so имеет текстовые перемещения. Это напрасная трата памяти и угроза безопасности. Пожалуйста исправьте. ОШИБКА: невозможно настроить кодек (err = -2147483648). ПРЕДУПРЕЖДЕНИЕ: ошибка в разрешении 1080x1920, повторная попытка в разрешении 720x1280
Pete_ch
17

Я знаю, что это старый вопрос, но так как он кажется без ответа по вкусу ОП. Существует приложение, которое подтверждает это в ссылке Android Market Screencast

Zaphoid
источник
29
Стоит упомянуть, что это требует root, кстати.
26
Не работает на моем HTC One. Работает нормально на моем Galaxy S II, хотя.
MiloDC
1
Этот не требует рута. Пока выглядит
Fraggle
Дроид-на-экране не делает видео, @Fraggle. Просто скриншоты. Он может делать непрерывный захват, но со скоростью примерно 1 кадр / с.
Майкл Петротта
В настоящее время я использую этот sourceforge.net/projects/ashot, чтобы просто показать экран на моем Mac, а затем использую свои стандартные инструменты (SnapPro X) для захвата фильма с этой части экрана. Не уверен, что частота кадров на снимке, но я думаю, что выше, чем 1 кадр / с.
Fraggle
8

Да, используйте телефон с видеовыходом и используйте видеомагнитофон для захвата потока

Смотрите эту статью http://graphics-geek.blogspot.com/2011/02/recording-animations-via-hdmi.html

Олли С
источник
Это то, что я мог бы сделать, но мое требование - делать все внутри Android. Заставить его работать на ходу - это цель.
Taranfx
1
Я думаю, что вам не повезло - требования для обработки такого большого количества видео кодирования на мобильном устройстве на лету выходят за рамки того, на что большинство физически способны, Android (AFAIK) не имеет интерфейса для доступа к потоку и даже если это произойдет, это потенциально огромная дыра в безопасности, поскольку приложение может шпионить за пользователем.
Олли С
4

@taranfx, без дополнительной информации, я полагаю, поскольку вы работаете в StackOverFlow, у вас установлены инструменты разработчика Android. Если это так, вы можете запустить эмулятор, а затем использовать одну из многих программ захвата экрана рабочего стола для захвата вашего работающего приложения. Screenflow на Mac прекрасно работает для этого. Я уверен, что есть много хороших программ захвата экрана, если вы работаете на Windows или на платформе Nix, и я знаю, что есть и некоторые онлайн-сервисы, но у меня нет ссылок и я их не использовал. Вот ссылка на справочный документ по настройке и запуску эмулятора. Android SDK включает в себя эмулятор мобильного устройства ...

MWR
источник
2
Сожалею? Я просил захват видео в Android, а не на Mac или эмуляторе.
Taranfx
2
MWR предлагает захват экрана Android через эмулятор
Ollie C
3
Не все апы могут быть запущены в эмуляторе.
RajV
4

Мое предложение также заключается в использовании записи экрана, например, SMRecorder. Вместо того, чтобы использовать эмулятор, который работает медленно - особенно для игр и вещей, о которых вы хотели бы получить видео, я рекомендую использовать виртуальную машину VirtualBox с установленным Android. Вы можете подключить к нему отладчик Dalvik и отладить там свое приложение. Если отладчик слишком сильно замедляет работу приложения, отключите его, чтобы записать видео. Существует множество ссылок, объясняющих, как настроить виртуальную машину Android для отладки. Я нахожу это намного лучше, чем эмулятор. Теперь это не касается захвата экранов непосредственно на устройстве, если ваше приложение использует акселерометр или камеру, недоступную на ПК. Для этого я бы использовал приложение для Android Market, упомянутое выше.

jdbertron
источник
для хорошей меры: spkaa.com/…
Рувим Л.
3

Я думаю, что скринкаст не является причиной несовместимости Tegra 2, я уже пробовал, но не сыворотка! Поэтому я попытался использовать Z-ScreeNRecorder с рынка, установил его на свой LG Optimus 2x, но это единственный пустой экран записи, я пробовал в течение 5 минут. и там я получаю 5 минут. пустого файла размером 6 Мб ... так что нет смысла пытаться, пока они не выпустят мир программного обеспечения, совместимого с набором микросхем tegra2!

Ненад
источник
1

Можно записывать видео с экрана прямо с вашего телефона или планшета, если ваше устройство рутировано. Я работаю над приложением SCR Screen Recorder . Насколько мне известно, это единственное приложение, поддерживающее устройства Tegra (включая Nexus 7) и Android 4.2. На данный момент приложение записывает между 9-18fps в зависимости от устройства, но я работаю над этим. SCR Screen Recorder все еще находится на стадии бета-тестирования, поэтому не стесняйтесь тестировать его и оставлять отзывы.

Иво Банас
источник
1
Поделитесь своим исследованием, как это можно сделать программно в Android, чтобы незаметно запечатлеть недостаток экрана?
Аджай С
@Iwo Можете ли вы поделиться своими исследованиями по грамматической записи видео на экране? Спасибо.
Срини Кандула
1

Зеркальное отображение и запись экрана AirPlay теперь в CyanogenMod с Mirror APK (бета-версия).

Oli
источник
1

Если вы разрабатываете приложения для видеокамер, будет полезно знать API, используемый для захвата видео:

http://developer.android.com/training/camera/videobasics.html

(приведенная выше ссылка показывает только то, как запись видео может быть осуществлена ​​с помощью отправки по намерению, а не как фактическая запись)

https://www.linux.com/learn/tutorials/729988-android-app-development-how-to-capture-video

и если вы хотите написать приложение adb "screenrecord":

https://android.googlesource.com/platform/frameworks/av/+/android-cts-4.4_r1/cmds/screenrecord/screenrecord.cpp

И действие записи ключа сделано здесь:

static status_t recordScreen(const char* fileName) {
    status_t err;

<...>

    // Configure, but do not start, muxer.
    sp<MediaMuxer> muxer = new MediaMuxer(fileName,
            MediaMuxer::OUTPUT_FORMAT_MPEG_4);
    if (gRotate) {
        muxer->setOrientationHint(90);
    }

    // Main encoder loop.
    err = runEncoder(encoder, muxer);
    if (err != NO_ERROR) {
        encoder->release();
        encoder.clear();

        return err;
    }

Для телефона Samsung есть дополнительные настройки (взлом "cam_mode"):

Разрешение CamcorderProfile.QUALITY_HIGH обеспечивает мерцающее зеленое видео

Еще полезные ссылки:

Как я могу захватить видеозапись на Android?

Питер Теох
источник
1

Я не реализовал это, но все же я даю вам идею сделать это.

Прежде всего, получите код, чтобы сделать скриншот устройства Android . И вызвать ту же функцию для создания изображений через определенный промежуток времени. Добавьте, затем найдите код для создания видео из кадров / изображений .

редактировать

см. также эту ссылку и измените ее в соответствии с размером экрана. Главное - разделить работу на несколько небольших задач, а затем объединить их по мере необходимости.

FFMPEG - лучший способ сделать это. но однажды я попробовал, но это очень длинная процедура. Сначала вам нужно скачать библиотеку cygwin и Native C ++ и многое другое и подключиться, а затем вы можете работать на FFMPEG (он встроен в C ++).

Zar E Ahmer
источник
Я сделал то же самое, что вы предлагали делать снимки через определенный промежуток времени или без интервала, у меня есть вид прокрутки, в котором я делаю прокрутку, а в другом потоке я захватываю область экрана, но такой же захват возвращает 6-7 изображений. и затем захватывается другая область. Мне нужна полная последовательность изображений.
Фаррах Джавед
1

Посмотрите на Remote Manager . Но мне кажется, что это не работает правильно с устройствами, которые имеют большой экран. Хотя, вы можете попробовать DEMO раньше.

Nolesh
источник
Обе ссылки мертвы: /
rahulserver
@rahulserver, Google заблокировал их, потому что я использовал Androidв названии программы. Скоро я опубликую их снова без Androidслов.
Нолеш
спасибо за ответ Я отчаянно нуждаюсь. Так что, пожалуйста, сообщите здесь, как только вы опубликовали.
рахульсервер
@rahulserver, я опубликовал их снова и исправил ссылки.
Нолеш
1

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

Он позволяет отправлять apk некоторым тестовым пользователям по электронной почте и просматривать видео со всеми сеансами в приложении и даже сбоями приложения и статистикой устройства.

Красная тревога
источник
1

В Android Lollipop (5) была добавлена ​​новая функция, которая позволяет снимать экран который объясняется здесь

Вот пример

Вызовите startActivityForResult следующим образом

startActivityForResult(mProjectionManager.getScreenCaptureIntent(), PERMISSION_CODE);

Затем запишите результат

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode != PERMISSION_CODE) {
        Log.e(TAG, "Unknown request code: " + requestCode);
        return;
    }
    if (resultCode != RESULT_OK) {
        Toast.makeText(this,
                "User denied screen sharing permission", Toast.LENGTH_SHORT).show();
        return;
    }
    mMediaProjection = mProjectionManager.getMediaProjection(resultCode, data);
    mVirtualDisplay = createVirtualDisplay();
}
rogermushroom
источник
0

Это старый, но как насчет ASC ?

Ричард Котрина
источник
Из-за несовместимости с устройствами на базе Tegra? .. да .. у меня есть Asus Transformer: C
Ричард Котрина
Для этого требуется запустить «активатор» на ПК / Mac, но он не подписан и не объясняет, что он делает, и как выполнять «активацию» вручную. Это звучит как угроза безопасности и вектор угрозы.
Хлоя
0

Если вы работаете на ПК, вы можете запустить My Phone Explorer на ПК, клиент MyPhoneExplorer на телефоне, настроить непрерывное обновление снимка экрана и использовать Wink для захвата пользовательской прямоугольной области экрана через окно My Phone Explorer. с вашей собственной скоростью захвата. Затем конвертируйте в FLV в Wink, затем конвертируйте из Flash видео в MPG с WinFF .

Хлоя
источник
Следует добавить, что «ПК» здесь означает своего рода Microsoft Windows.
Первое
0

Я не использовал приложение, но я видел Rec. упоминается как способ сделать это, но вам нужен root на телефоне.

Рич Элсвик
источник