screenrecord无法在模拟器中工作

时间:2016-06-20 23:58:24

标签: android-emulator screen-recording

自4.4 KitKat以来,Android有一个shell实用程序screenrecord来记录Android设备屏幕。

如果我通过USB将物理设备与adb实用程序连接,我可以执行以下操作:

struct has_size_aux {
    template <typename S>
    static char (&test(decltype(std::declval<S>().size())*))[1];
    template <typename S>
    static char (&test(...))[2];
};

template <typename T>
struct has_size
    : std::integral_constant<bool, 1 == sizeof(has_size_aux::test<T>(nullptr))> {
};

template <class Container, typename = std::enable_if_t<has_size<Container>::value>>
constexpr auto size(const Container& cont)
    -> decltype (cont.size())
{
    return cont.size();
}

template <class Container, typename = std::enable_if_t<!has_size<Container>::value>>
auto size(const Container& cont) ->
    decltype (std::distance(std::begin(cont), std::end(cont)))
{
    return std::distance(std::begin(cont), std::end(cont));
}

但如果我为Android模拟器执行上述操作,我将获得一个空的sample.mp4文件。

adb shell screenrecord /sdcard/sample.mp4
adb pull /sdcard/sample.mp4

如果我直接在模拟器的根控制台中执行screenrecord,我会看到以下内容:

adb shell screenrecord /sdcard/sample.mp4
adb shell ls -l /sdcard/sample.mp4
-rw-rw---- root     sdcard_r        0 2016-06-18 05:37 sample.mp4

为什么screenrecord不能用于模拟器?

2 个答案:

答案 0 :(得分:2)

Screenrecord使用MediaCodec API。 https://developer.android.com/reference/android/media/MediaCodec.html

准确地说,Screenrecord直接调用MediaCodec的原生界面。

据我所知,还没有模拟器支持MediaCodec。它们都支持更高级别的界面MediaPlayer https://developer.android.com/reference/android/media/MediaPlayer.html

答案 1 :(得分:0)

Screenrecord正在使用Android Emulator v27.0.2

我已使用Oreo x86 with Google Play图片对其进行了测试,但它应该适用于任何KitKat +图像。