一畳のくつろぎタイム

このブログでは紹介する商品画像をAmazonアソシエイトより借りています。画像やリンクにはアフィリエイト広告が含まれる事があります

2016年3月29日火曜日

1円も使わずにAndroidの画面をパソコンに表示する

追加投資なしでAndroidの画面をなんとかパソコンに表示する方法がないか調べた。

候補1
Android Screen Monitor
http://www.adakoda.com/adakoda/android/asm/
かなり昔からあり、adbドライバさえ設定されていれば画面共有がおこなえる。
しかし、ほぼ静止画なのである。

windowsでもmacでもjavaとadbが入っていれば動作する。

候補2
adb screenrecord
こちらはAndroid4.4以降に搭載されたadbコマンドの一つでスクリーンキャプチャが取れる。

※候補2はwindowsではうまくいっていません。

公式のドキュメントを見に行くと
http://developer.android.com/intl/ja/tools/help/shell.html
そのようなコマンドが確かにある。

普通の使い方としては、Android単体でキャプチャをとって、内蔵メモリかSDカードへ出力する。ゲームの画面をとってアップしたい人なんかにはこの使い方で問題ない。
 
adb shell screenrecord /storage/sdcard1/test.mp4
この場合、sdcard1として認識されているメモリにtest.mp4というファイルが作成される。

adb shell screenrecordの結果をファイルではなく、これをパイプでつないで、動画プレイヤー上に表示させるというもの。

adb screenrecordには非公開のオプションがあるらしく、その辺を指定する?
要は標準出力へ出力できればいいのであるが、細かい事は必要ないので調べていない。
ソースコードには確かに非公開オプションがある
http://tools.oesf.biz/android-6.0.0_r1.0/xref/frameworks/av/cmds/screenrecord/screenrecord.cpp#954

コマンドラインで使える動画プレイヤーとしてffmpegのffplayを使う。
ffplayはffmpegの圧縮ファイルの中のbinに入っている

(windows用)
https://ffmpeg.zeranoe.com/builds/win32/static/
(Mac用)
https://evermeet.cx/ffmpeg/

Macの場合
ターミナルでは以下のようにadbにパスを通し、ffplayがカレントフォルダにある状況で以下のように実行した
adb shell screenrecord --output-format=h264 - | ./ffplay -

$ adb shell screenrecord --output-format=h264 - | ./ffplay -
ffplay version 3.0-tessus Copyright (c) 2003-2016 the FFmpeg developers
  built with Apple LLVM version 6.0 (clang-600.0.57) (based on LLVM 3.5svn)
  configuration: --cc=/usr/bin/clang --prefix=/opt/ffmpeg --as=yasm --extra-version=tessus --enable-avisynth --enable-fontconfig --enable-gpl --enable-libass --enable-libbluray --enable-libfreetype --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopus --enable-libschroedinger --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzmq --enable-version3 --enable-librtmp --enable-ffplay --disable-ffmpeg --disable-ffprobe --disable-ffserver --disable-indev=qtkit --disable-indev=x11grab_xcb
  libavutil      55. 17.103 / 55. 17.103
  libavcodec     57. 24.102 / 57. 24.102
  libavformat    57. 25.100 / 57. 25.100
  libavdevice    57.  0.101 / 57.  0.101
  libavfilter     6. 31.100 /  6. 31.100
  libswscale      4.  0.100 /  4.  0.100
  libswresample   2.  0.101 /  2.  0.101
  libpostproc    54.  0.100 / 54.  0.100
激安スマホを使っているのがバレるスクリーンショット
画面がでるまでに少々時間がかかるのと、操作しないとキャプチャデータが増えないのか、画面がでない点に注意。

Windowsの場合
コマンドプロンプトではこのように指定するが表示がめちゃめちゃ
 adb shell screenrecord --output-format:h264 - | ffplay -

[h264 @ 0000000000126220]ってところがエラー

C:\Users\user>adb shell screenrecord --output-format h264 - | ffplay -
ffplay version N-79143-g8ff0f6a Copyright (c) 2003-2016 the FFmpeg developers
  built with gcc 5.3.0 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-av
isynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enab
le-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --
enable-libdcadec --enable-libfreetype --enable-libgme --enable-libgsm --enable-l
ibilbc --enable-libmodplug --enable-libmfx --enable-libmp3lame --enable-libopenc
ore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --ena
ble-librtmp --enable-libschroedinger --enable-libsnappy --enable-libsoxr --enabl
e-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-l
ibvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-li
bwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enab
le-libzimg --enable-lzma --enable-decklink --enable-zlib
  libavutil      55. 19.100 / 55. 19.100
  libavcodec     57. 30.100 / 57. 30.100
  libavformat    57. 29.101 / 57. 29.101
  libavdevice    57.  0.101 / 57.  0.101
  libavfilter     6. 40.102 /  6. 40.102
  libswscale      4.  0.100 /  4.  0.100
  libswresample   2.  0.101 /  2.  0.101
  libpostproc    54.  0.100 / 54.  0.100
[h264 @ 0000000000126220] negative number of zero coeffs at 1 0/0
[h264 @ 0000000000126220] error while decoding MB 1 0
[h264 @ 0000000000126220] top block unavailable for requested intra mode at 1 17

[h264 @ 0000000000126220] error while decoding MB 1 17
[h264 @ 0000000000126220] top block unavailable for requested intra mode at 21 3
3
[h264 @ 0000000000126220] error while decoding MB 21 33
[h264 @ 0000000000126220] concealing 1500 DC, 1500 AC, 1500 MV errors in I frame

Windowsでも画面は出るにはでるが、まともな画像はでない。
原因を調べるだけの余裕がない。