日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

解决opendx在windows下无法使用scrcpy录屏

發布時間:2024/3/24 windows 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 解决opendx在windows下无法使用scrcpy录屏 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 前言
  • 一、解決的問題
  • 二、使用步驟
    • 1.opendx源碼下載
    • 2.修改agent內容


前言

opendx是一款基于 appium 的自動化測試平臺。支持web端控制手機,整個架構設計非常優秀,可以根據公司業務,進行二次開發使用。

一、解決的問題

由于華為手機高版本無法使用appium自帶的錄制功能。所以opendx添加了scrcpy錄制功能,缺點是需要在agent端安裝scrcpy,且windows無法支持錄制。由于公司大多數同學使用windows,導致啟動的agent在高版本華為手機上無法錄制視頻,在用例結束后難以排查問題。

二、使用步驟

1.opendx源碼下載

下載地址

2.修改agent內容

ScrcpyVideoRecorder類代碼如下(示例):

package com.daxiang.core.mobile.android.scrcpy;import com.daxiang.core.Device; import com.daxiang.core.mobile.android.AndroidDevice; import com.daxiang.utils.Terminal; import com.daxiang.utils.UUIDUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FileUtils;import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.nio.channels.FileChannel; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit;/*** Created by jiangyitao.*/ @Slf4j public class ScrcpyVideoRecorder {private String mobileId;private String videoName;private boolean isRecording = false;private CountDownLatch countDownLatch;private Device device;private FileChannel fc;private Scrcpy scrcpy;private static final String H264 = ".h264";private static final String MP4 = ".mp4";public ScrcpyVideoRecorder(String mobileId,Device device) {this.mobileId = mobileId;this.device = device;}public synchronized void start() {if (isRecording) {return;}countDownLatch = new CountDownLatch(1);scrcpy = ((AndroidDevice) device).getScrcpy();try {videoName = UUIDUtil.getUUID();fc = new FileOutputStream(videoName+H264).getChannel();scrcpy.start(imgData -> {try {fc.write(imgData);} catch (IOException e) {}});isRecording = true;} catch (Exception e) {isRecording = false;throw new RuntimeException(e);}finally {countDownLatch.countDown();}}/*** 1. kill scrcpy server來停止錄制視頻是最優方案。但大多數安卓Mobile只能通過ps(非ps -ef)獲取到scrcpy server進程,* 此時的進程名為app_process, appium在Mobile里運行的進程也是app_process,所以可能會誤殺appium在Mobile里運行的進程,不采用該方法* 2. ExecuteWatchdog.destroyProcess()會導致最后一部分視頻無法寫入,* 因為運行在pc的scrcpy進程被直接干掉,無法寫入最終的視頻,導致獲取到破損的視頻* 3. 在非windows操作系統下,scrcpy收到kill信號后,會寫入最后一部分視頻,目前采用該方法* 4. 無法在windows上使用,windows taskkill和ExecuteWatchdog.destroyProcess()一樣*/public synchronized File stop() throws IOException {if (!isRecording) {throw new IllegalStateException("video is not in recording");}log.info("[{}]stop record video: {}", mobileId, videoName);scrcpy.stop();if (fc != null){fc.close();}String killScrcpyCmd = String.format("ffmpeg -f h264 -i %s.h264 -y -vcodec copy %s.mp4", videoName,videoName);Terminal.execute(killScrcpyCmd);try {// 等待視頻寫入完成,最多等3mincountDownLatch.await(3, TimeUnit.MINUTES);} catch (InterruptedException e) {throw new RuntimeException(e);}FileUtils.deleteQuietly(new File(videoName+H264));log.info("[{}]video: {} recording complete", mobileId, videoName);isRecording = false;return new File(videoName+MP4);} }

AndroidDevice類代碼如下(示例):

@Overridepublic void startRecordingScreen() {if (canUseAppiumRecordVideo) {try {AndroidStartScreenRecordingOptions androidOptions = new AndroidStartScreenRecordingOptions();// Since Appium 1.8.2 the time limit can be up to 1800 seconds (30 minutes).androidOptions.withTimeLimit(Duration.ofMinutes(30));androidOptions.withBitRate(Integer.parseInt(App.getProperty("androidRecordVideoBitRate")) * 1000000); // default 4000000((AndroidDriver) driver).startRecordingScreen(androidOptions);return;} catch (Exception e) {log.warn("[{}]無法使用appium錄制視頻", getId(), e);canUseAppiumRecordVideo = false;}}if (scrcpyVideoRecorder == null) {scrcpyVideoRecorder = new ScrcpyVideoRecorder(getId(),this);}try {scrcpyVideoRecorder.start();}catch (Exception e){log.warn("[{}]無法使用scrcpy錄制視頻", getId(), e);}}

修改以上兩個類后,agent端不需要安裝scrcpy,windows也支持錄制視頻

總結

以上是生活随笔為你收集整理的解决opendx在windows下无法使用scrcpy录屏的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。