我将手机连接到Android Studio和代码.我想录制我的手机屏幕.我看到了这个,但我的Android Studio中禁用了该按钮.我可以捕捉屏幕,但无法录制.有人可以帮我弄这个吗?
UPDATE
这就是我的Android工作室中的情况.该按钮被禁用
Android在Kitkat和Lollipop上获得了新的API,用于视频捕获屏幕.您可以通过ADB工具或通过代码(从Lollipop开始)来完成.
自新API发布以来,许多应用程序都使用此功能,允许记录屏幕,微软甚至制作了自己的Google-Now-On-tap竞争对手应用程序.
使用ADB,您可以使用:
adb shell screenrecord /sdcard/video.mp4
Run Code Online (Sandbox Code Playgroud)
您甚至可以在Android Studio内部执行此操作.
我找不到任何有关如何使用API的教程或解释,这在代码中是有意义的.
我找到的唯一的地方是文件(这里,在"屏幕截图和分享"下),告诉我这个:
Android 5.0允许您使用新的android.media.projection API为您的应用添加屏幕捕获和屏幕共享功能.例如,如果要在视频会议应用中启用屏幕共享,此功能很有用.
新
createVirtualDisplay()
方法允许您的应用程序将主屏幕的内容(默认显示)捕获到Surface对象中,然后您的应用可以通过网络发送该对象.API仅允许捕获非安全屏幕内容,而不是系统音频.要开始屏幕捕获,您的应用必须首先通过使用通过该createScreenCaptureIntent()
方法获得的Intent启动屏幕捕获对话框来请求用户的许可.有关如何使用新API的示例,请参阅示例项目中的MediaProjectionDemo类.
事实是,我找不到任何"MediaProjectionDemo"样本.相反,我发现了"屏幕截图"样本,但我不明白它是如何工作的,因为当我运行它时,我所看到的只是一个闪烁的屏幕,我不认为它将视频保存到一份文件.样本看起来非常错.
如何使用新API执行这些操作:
另外,我如何自定义它(分辨率,请求的fps,颜色,时间......)?
android screenshot screen-recording android-4.4-kitkat android-5.0-lollipop
我正在 Android Studio 中开发一个应用程序,能够从模拟器录制视频很有用(通过 Logcat 选项卡中的按钮)。但是,在最新版本的 Studio(我现在使用的是 3.4.1)中,默认视频格式已更改为 WebM。
WebM 视频真的很大而且很难处理。是否有一种简单的方法可以请求不同的格式,例如 MP4?
在模拟器设置中,有一个不同的录制 UI,允许您保存为 .webm 或 .gif。我现在实际上正在使用 GIF,但这不是最好的解决方法。我更喜欢使用 Android Studio UI,因为它更方便。
android android-emulator webm screen-recording android-studio
检测用户是否已启用此API的可靠方法是什么?
CGWindowListCreateImage
即使禁用了屏幕录制API,也将返回有效对象。可能有多种组合(kCGWindowListOptionIncludingWindow
,kCGWindowListOptionOnScreenBelowWindow
),只有一些组合会返回NULL。
- (CGImageRef)createScreenshotImage
{
NSWindow *window = [[self view] window];
NSRect rect = [window frame];
rect.origin.y = NSHeight([[window screen] frame]) - NSMaxY([window frame]);
CGImageRef screenshot = CGWindowListCreateImage(
rect,
kCGWindowListOptionIncludingWindow,
//kCGWindowListOptionOnScreenBelowWindow,
0,//(CGWindowID)[window windowNumber],
kCGWindowImageBoundsIgnoreFraming);//kCGWindowImageDefault
return screenshot;
}
Run Code Online (Sandbox Code Playgroud)
唯一可靠的方法是CGDisplayStreamCreate
冒险,因为Apple每年都会更改隐私设置。
- (BOOL)canRecordScreen
{
if (@available(macOS 10.15, *)) {
CGDisplayStreamRef stream = CGDisplayStreamCreate(CGMainDisplayID(), 1, 1, kCVPixelFormatType_32BGRA, nil, ^(CGDisplayStreamFrameStatus status, uint64_t displayTime, IOSurfaceRef frameSurface, CGDisplayStreamUpdateRef updateRef) {
;
});
BOOL canRecord = stream != NULL;
if (stream) …
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法来检测当前是否正在录制屏幕。
理想情况下,记录开始/停止时的事件。也许某种分布式通知。
我的用例是我想在记录屏幕时隐藏我的应用程序的菜单栏项(选择加入),因为它显示日期和时间,而且许多用户不希望屏幕记录中包含时间。
我试着设置NSWindow#sharingType
到.none
了NSStatusBarButton
窗口,但该选项似乎只对截图的工作。
答案应该在 Swift 中。
我有一个带有android KitKat的nexus 4.
我使用以下命令尝试了屏幕录制:
adb shell screenrecord --verbose /sdcard/demo.mp4
adb shell screenrecord --bit-rate 8000000 --time-limit 30 /sdcard/kitkat.mp4
Run Code Online (Sandbox Code Playgroud)
两次,命令都返回此消息:
Main display is 768x1280 @60.00fps (orientation=0)
Configuring recorder for 768x1280 video at 4.00Mbps
ERROR: unable to create video/avc codec instance
Run Code Online (Sandbox Code Playgroud)
在AndroidStudio中打开的调试控制台中,显示了以下日志消息:
02-02 18:16:29.058 176-4045/? E/OMX-VENC-720p? Is component secure 0
02-02 18:16:29.058 176-4045/? E/OMX-VENC-720p? ERROR: Omx_venc::Comp Init Returning failure
02-02 18:16:29.058 176-4045/? E/OMX-VENC-720p? ERROR: venc_open failed
02-02 18:16:29.058 176-4045/? E/OMX-VENC-720p? Destroy C2D instance
02-02 18:16:29.058 11072-11086/? E/ACodec? Unable to instantiate a decoder for …
Run Code Online (Sandbox Code Playgroud) 如果我有一个包含付费视频的网站,并且我想防止授权/未经授权的用户下载视频,我们可以尽可能地让它变得困难,但我们仍然不能 100% 防止窃取视频。
用户仍然可以使用许多现有的应用程序记录屏幕,我想太多了,并寻找我能做的任何事情来防止它,但随着我的操作系统将不允许网络浏览器检测屏幕记录应用程序。
一季度。但是我可以开发一个可以检测屏幕录像机应用程序的程序(桌面应用程序)吗?
我问是因为如果我能设法构建这样一个程序,我可以使用它来知道用户在打开网站时是否录制了视频,从而采取了反制措施。
流程是这样的:
如果不是,则在应用程序运行之前不会播放视频。
如果桌面应用程序正在运行,则检查是否有同时运行的屏幕录制应用程序。
如果正在运行屏幕录制应用程序,则不会播放视频。
Q2。这个想法甚至有可能实现吗?
我正在尝试使用 MediaRecorder API 构建屏幕录制。
作为暗示性媒体记录方法
var chunks = [];
var recorder = new MediaRecorder(stream);
recorder.streams = [stream];
recorder.ondataavailable = function(e) {
chunks.push(e.data);
};
recorder.onstop = function(){
var blob = new Blob(chunks, {type: "video/webm"});
chunks = [];
var mimeType = 'video/webm';
var fileExtension = 'webm';
var file = new File([blob ? blob : ''], getFileName(fileExtension), {
type: mimeType
});
};
Run Code Online (Sandbox Code Playgroud)
使用这种方法录制工作正常,但录制的视频搜索不起作用。
我在网上搜索了一些关于这个问题的信息,我发现视频标题不包含持续时间。
在file
控制台上打印对象时,它包含以下属性,
lastModified : 1527592713006
lastModifiedDate : Tue May 29 2018 16:48:33 GMT+0530 (India Standard Time)
name : …
Run Code Online (Sandbox Code Playgroud) javascript screen-recording web-mediarecorder mediarecorder-api
chromemediasource
( desktop
, window
, screen
)和有什么不一样Navigator.getUserMedia()
?
目前,我正在使用flutter屏幕录像插件(https://pub.dev/packages/flutter_screen_recording)来录制屏幕,实际上,这个插件录制的是手机的全屏。
但我的要求是只记录特定的小部件或屏幕的特定部分,例如在视频通话应用程序中屏幕中有两个用户,我只想只记录相反的用户视频。
那么有没有可用的解决方法或解决方案,请指导。
screen-recording ×10
android ×4
cocoa ×2
javascript ×2
dart ×1
electron ×1
flutter ×1
macos ×1
mediacodec ×1
navigator ×1
nsstatusitem ×1
nswindow ×1
screenshot ×1
swift ×1
webm ×1