2016-09-19 6 views
1

내 삼성 갤럭시 S4 장치에서 내 랩톱과 안드로이드 5.0.1에서 Windows 7 64 비트를 사용하고 있습니다. 다음 코드를 사용하여 adb를 통해 장치 화면을 스트리밍하려고합니다. adb shell screenrecord --output-format=h264 - | vlc - vlc v2.2.4가 있습니다. 하지만 아무것도 표시되지 않습니다.화면 안드로이드 화면에서 비디오 플레이어

그러나 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는이 경우에도 열 수 없습니다.

무슨 문제 일 수 있습니까? 녹화 된 비디오를 볼 수는 있지만 스트리밍 된 비디오를 볼 수없는 이유는 무엇입니까?

그리고 추가로 한 가지 질문이 있습니다. 나는 adb-server의 명령이 장치의 스크린 샷을 가져 오는 것을 발견했습니다. adb shell screencap 명령의 대안입니다. Qt 프레임 워크에서 QTcpSocket을 통해 해당 명령을 사용할 수 있습니다.

그러나 adb shell screenrecord 대신 adb 서버를 찾을 수 없습니다. 이 경우 명령을 실행하고 QMediaPlayer에 출력을 전달하려면 QProcess를 사용해야합니다. 지금까지 나는 성공할 수 없었습니다. QMediaPlayer::setMediaQMediaSource 또는 QIODevice을받습니다. Qprocess가 QIODevice에서 계승되었고 QMediaPlayer:::setMedia에 인수로 제공하려고했지만 오류 코드 1로 프로그램이 종료되었습니다. QProcess의 결과를 QMediaPlayer으로 전달할 수 있습니까?

+0

사용해야합니다. 게시물 당 하나의 질문을 유지하면서 남은 질문을 별도로 게시하십시오. –

+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

문서 기반 : - 시간 제한 시간 \t 최대 녹음 시간을 초 단위로 설정합니다. 기본값과 최대 값은 180 (3 분)입니다. https://developer.android.com/studio/command-line/adb.html#shellcommands – J4S0Nc

관련 문제