2016-09-19 154 views
1

我在我的筆記本電腦上使用Windows 7 64位,在我的Samsung Galaxy S4設備上使用Android 5.0.1。 我試圖通過adb使用以下代碼流式傳輸設備的屏幕: adb shell screenrecord --output-format=h264 - | vlc - 我有vlc v2.2.4 但它沒有顯示任何內容。將Android屏幕流式傳輸到視頻播放器

但是,如果我使用的媒體播放器經典,它與k-lite兆豐編解碼器包v12.3.5與以下代碼: 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來記錄我的設備屏幕,從設備中拉出來,並用media player classic打開它,那麼它的視頻就完全沒問題。但是,即使在這種情況下,vlc也無法打開。

可能是什麼問題?爲什麼我可以觀看錄製的視頻,但無法觀看流式視頻?

還有一個後續問題。我發現adb-server的命令來獲取設備的屏幕截圖。它可以替代adb shell screencap命令。我可以在Qt框架中通過QTcpSocket使用該命令。

但是,我無法找到替代adb shell screenrecord的adb服務器。在這種情況下,我需要使用QProcess來運行命令並以某種方式將輸出轉發給QMediaPlayer。到目前爲止,我無法成功,因爲我發現QMediaPlayer::setMedia接受QMediaSourceQIODevice。我發現QProcess從QIODevice繼承,並試圖將其作爲參數提供給QMediaPlayer:::setMedia,但是我的程序退出時出現錯誤代碼1.我如何將QProcess的輸出轉發到QMediaPlayer

+0

我回答你的問題之一。請單獨發佈您的其他問題 - 每個帖子保留一個問題。 –

+0

好的,謝謝 – Umriyaev

回答

2

爲了支持交互式adb shell命令shell_service使用pty。它有助於照顧所有的交互式用戶輸入,如光標鍵的按下等。但使用pty的副作用是它會破壞進程的二進制輸出。這就是爲什麼在主機端捕獲adb shell screenrecord的輸出導致文件損壞的原因。以前解決這個問題的唯一方法是後處理文件以刪除這些額外的字符。但是前一段時間,谷歌已經增加了另一個版本的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

相關問題