2016-09-19 8 views
1

私のノートパソコンとAndroid 5.0.1のWindows 7 64ビットを私のSamsung Galaxy S4デバイスで使用しています。 次のコードを使用してデバイスの画面をadb経由でストリーミングしようとしています: adb shell screenrecord --output-format=h264 - | vlc - 私はvlc v2.2.4を持っています これは表示されません。ビデオプレーヤーへのAndroidの画面をストリーム

しかし、k-liteメガコーデックパックv12.3.5に付属のmedia player classicを次のコードで使用した場合: adb shell screenrecord --output-format=h264 - | "C:\Program Files (x86)\K-Lite Codec Pack\MPC-HC64\mpc-hc64_nvo.exe" -私の画面のようなものが表示されていますが、画像が完全に壊れています。

私のデバイスの画面を記録するのにadb shell screenrecord --output-format=h264 /sdcard/screenrecord.mp4を使用した場合、デバイスから取り出して、メディアプレーヤーの古典でそれを開くと、ビデオは完全に正常です。ただし、この場合でもvlcを開くことはできません。

何が問題なのですか?なぜ私は記録されたビデオを見ることができますが、ストリーミングされたビデオを見ることはできませんか?

さらにもう1つのフォローアップの質問。私は、デバイスのスクリーンショットを取得するためのadb-serverのコマンドを見つけました。これは、adb shell screencapコマンドの代替です。 QtフレームワークでQTcpSocket経由でそのコマンドを使用できます。

しかし、私はadb shell screenrecordの代わりにadbサーバを見つけることができませんでした。この場合、QProcessを使用してコマンドを実行し、QMediaPlayerに出力を転送する必要があります。これまで私は成功していませんでしたが、QMediaPlayer::setMediaQMediaSourceまたはQIODeviceを受け入れています。私はQProcessがQIODeviceから継承されたとQMediaPlayer:::setMediaに引数としてそれを提供しようとしましたが、私のプログラムは、私はQMediaPlayerQProcessの出力を転送することができますどのようにエラーコード1で終了していることがわかりましたか?

+0

使用する必要があります。投稿ごとに1つの質問を残して、残りの質問を別々に投稿してください。 –

+0

よろしく、ありがとうございます – Umriyaev

答えて

2

コマンドをサポートするために、shell_serviceptyを使用します。これは、カーソルキーの押下などのようなすべてのインタラクティブなユーザー入力を処理するのに役立ちます。しかし、ptyを使用する副作用は、プロセスのバイナリ出力をマングリングすることです。このため、ホスト側のadb shell screenrecordの出力をキャプチャすると、ファイルが破損することがあります。以前は、ファイルを後処理して余分な文字を削除するしか方法はありませんでした。しかし、しばらく前に、Googleはshellコマンドの別のバージョンを追加しました。これは対話モードを持たないため、ptyを使用する必要はありません。彼らはそれをexec-outと呼んだ。

だから、破損せずにファイルを取り込むために、あなたは私があなたの質問の一つに答え

adb exec-out screenrecord --output-format=h264 - 
+0

adb exec-out screenrecordがしばらくして出力を生成しなくなったことがわかりました。どのようにそれを防ぐためにどのようなアイデア? – Umriyaev

+0

ドキュメントベース:--time-limit time \t最大録画時間を秒単位で設定します。デフォルト値と最大値は180(3分)です。 https://developer.android.com/studio/command-line/adb.html#shellcommands – J4S0Nc