MathewSachin / Captura

Capture Screen, Audio, Cursor, Mouse Clicks and Keystrokes
https://mathewsachin.github.io/Captura/
MIT License
9.55k stars 1.79k forks source link

Unable to record #430

Open wangsitudd opened 5 years ago

wangsitudd commented 5 years ago

Describe the bug W10 system cannot record normally

To Reproduce Steps to reproduce the behavior:

  1. Double click to run the software
  2. Click the record button to bring up the error window.

Expected behavior Recording function is running normally

Screenshots https://i.imgur.com/jVRqtS2.png Desktop (please complete the following information):

Additional context System.NotSupportedException: Desktop Duplication is not supported on this system. If you have multiple graphic cards, try running Captura on integrated graphics. ---> SharpDX.SharpDXException: HRESULT: [0x887A0004], Module: [SharpDX.DXGI], ApiCode: [DXGI_ERROR_UNSUPPORTED/Unsupported], Message: 指定的设备接口或功能级别在此系统上不受支持。

在 SharpDX.Result.CheckError() 在 SharpDX.DXGI.Output1.DuplicateOutput(IUnknown deviceRef) 在 DesktopDuplication.DuplCapture.Init() --- 内部异常堆栈跟踪的结尾 --- 在 DesktopDuplication.DuplCapture.Init() 在 DesktopDuplication.DuplCapture..ctor(Output1 Output) 在 DesktopDuplication.FullScreenDesktopDuplicator.<>c__DisplayClass2_1.<.ctor>b__2(Output M) 在 System.Linq.Enumerable.WhereSelectArrayIterator2.MoveNext() 在 System.Collections.Generic.List1.InsertRange(Int32 index, IEnumerable`1 collection) 在 DesktopDuplication.FullScreenDesktopDuplicator..ctor(Boolean IncludeCursor, IPreviewWindow PreviewWindow, IPlatformServices PlatformServices) 在 Captura.Models.DeskDuplFullScreenImageProvider..ctor(Boolean IncludeCursor, IPreviewWindow PreviewWindow, IPlatformServices PlatformServices) 在 Captura.WindowsPlatformServices.GetAllScreensProvider(Boolean IncludeCursor) 在 Captura.Models.FullScreenItem.GetImageProvider(Boolean IncludeCursor) 在 Captura.ViewModels.RecordingModel.GetImageProvider(RecordingModelParams RecordingParams) 在 Captura.ViewModels.RecordingModel.SetupVideoRecorder(IAudioProvider AudioProvider, RecordingModelParams RecordingParams)

System.NotSupportedException: Desktop Duplication is not supported on this system. If you have multiple graphic cards, try running Captura on integrated graphics. ---> SharpDX.SharpDXException: HRESULT: [0x887A0004], Module: [SharpDX.DXGI], ApiCode: [DXGI_ERROR_UNSUPPORTED/Unsupported], Message: 指定的设备接口或功能级别在此系统上不受支持。

在 SharpDX.Result.CheckError() 在 SharpDX.DXGI.Output1.DuplicateOutput(IUnknown deviceRef) 在 DesktopDuplication.DuplCapture.Init() --- 内部异常堆栈跟踪的结尾 --- 在 DesktopDuplication.DuplCapture.Init() 在 DesktopDuplication.DuplCapture..ctor(Output1 Output) 在 DesktopDuplication.FullScreenDesktopDuplicator.<>c__DisplayClass2_1.<.ctor>b__2(Output M) 在 System.Linq.Enumerable.WhereSelectArrayIterator2.MoveNext() 在 System.Collections.Generic.List1.InsertRange(Int32 index, IEnumerable`1 collection) 在 DesktopDuplication.FullScreenDesktopDuplicator..ctor(Boolean IncludeCursor, IPreviewWindow PreviewWindow, IPlatformServices PlatformServices) 在 Captura.Models.DeskDuplFullScreenImageProvider..ctor(Boolean IncludeCursor, IPreviewWindow PreviewWindow, IPlatformServices PlatformServices) 在 Captura.WindowsPlatformServices.GetAllScreensProvider(Boolean IncludeCursor) 在 Captura.Models.FullScreenItem.GetImageProvider(Boolean IncludeCursor) 在 Captura.ViewModels.RecordingModel.GetImageProvider(RecordingModelParams RecordingParams) 在 Captura.ViewModels.RecordingModel.SetupVideoRecorder(IAudioProvider AudioProvider, RecordingModelParams RecordingParams)

MathewSachin commented 5 years ago

Do you have multiple GPUs on your system, like Intel integrated graphics + NVIDIA? Is your system a laptop or a desktop?

In that case, this problem generally can be solved by running Captura on the integrated GPU.

wangsitudd commented 5 years ago

Do you have multiple GPUs on your system, like Intel integrated graphics + NVIDIA? Is your system a laptop or a desktop?

In that case, this problem generally can be solved by running Captura on the integrated GPU.

integrated graphics + NVIDIA Is laptop

In that case, this problem generally can be solved by running Captura on the integrated GPU.

Do you mean running Captura with integrated graphics? If it still goes wrong, it means I really can't use it? I can still record 8.0 normally!

MathewSachin commented 5 years ago

The thing is from v9.0.0, Captura will use Desktop Duplication API by default instead of GDI which is used by v8.0.0. This gives a good performance increase. Captura will fallback to GDI on Windows 7 where Desktop Duplication is not supported.

I'll try to add an option to Fallback to GDI when doing the final v9 release but currently it is required to run Captura on integrated graphics when running on a laptop.

This problem is not specific to Captura and can be seen to occur with other softwares like OBS Studio.

wangsitudd commented 5 years ago

The thing is from v9.0.0, Captura will use Desktop Duplication API by default instead of GDI which is used by v8.0.0. This gives a good performance increase. Captura will fallback to GDI on Windows 7 where Desktop Duplication is not supported.

I'll try to add an option to Fallback to GDI when doing the final v9 release but currently it is required to run Captura on integrated graphics when running on a laptop.

This problem is not specific to Captura and can be seen to occur with other softwares like OBS Studio.

After running the integrated graphics card running software, the following error occurred. https://i.imgur.com/akSIyIN.png

Log

ARGS:

-thread_queue_size 512 -framerate 10 -f rawvideo -pix_fmt rgb32 -video_size 1920x1080 -i \.\pipe\captura-72db0316-bf32-4468-a5ec-bf63bf3f8728 -r 10 -vcodec libx264 -crf 15 -pix_fmt yuv420p -preset ultrafast "D:\我的文档\Documents\Captura\2019-07-27-06-53-29.mp4"

OUTPUT:

ffmpeg version N-94383-g3883c9d147 Copyright (c) 2000-2019 the FFmpeg developers built with gcc 9.1.1 (GCC) 20190716 configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt libavutil 56. 32.100 / 56. 32.100 libavcodec 58. 55.100 / 58. 55.100 libavformat 58. 30.100 / 58. 30.100 libavdevice 58. 9.100 / 58. 9.100 libavfilter 7. 58.100 / 7. 58.100 libswscale 5. 6.100 / 5. 6.100 libswresample 3. 6.100 / 3. 6.100 libpostproc 55. 6.100 / 55. 6.100 Input #0, rawvideo, from '\.\pipe\captura-72db0316-bf32-4468-a5ec-bf63bf3f8728': Duration: N/A, start: 0.000000, bitrate: 663552 kb/s Stream #0:0: Video: rawvideo (BGRA / 0x41524742), bgra, 1920x1080, 663552 kb/s, 10 tbr, 10 tbn, 10 tbc Stream mapping: Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264)) Press [q] to stop, [?] for help [libx264 @ 0000027538d0f8c0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2 [libx264 @ 0000027538d0f8c0] profile Constrained Baseline, level 4.0, 4:2:0, 8-bit [libx264 @ 0000027538d0f8c0] 264 - core 157 r2970 5493be8 - H.264/MPEG-4 AVC codec - Copyleft 2003-2019 - http://www.videolan.org/x264.html - options: cabac=0 ref=1 deblock=0:0:0 analyse=0:0 me=dia subme=0 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=12 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=250 keyint_min=10 scenecut=0 intra_refresh=0 rc=crf mbtree=0 crf=15.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=0 Output #0, mp4, to 'D:\鎴戠殑鏂囨。\Documents\Captura\2019-07-27-06-53-29.mp4': Metadata: encoder : Lavf58.30.100 Stream #0:0: Video: h264 (libx264) (avc1 / 0x31637661), yuv420p, 1920x1080, q=-1--1, 10 fps, 10240 tbn, 10 tbc Metadata: encoder : Lavc58.55.100 libx264 Side data: cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1 frame= 2 fps=0.0 q=-1.0 Lsize= 7kB time=00:00:00.10 bitrate= 607.5kbits/s speed=0.751x
video:7kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 12.191882% [libx264 @ 0000027538d0f8c0] frame I:1 Avg QP:12.00 size: 6163 [libx264 @ 0000027538d0f8c0] frame P:1 Avg QP: 2.00 size: 12 [libx264 @ 0000027538d0f8c0] mb I I16..4: 100.0% 0.0% 0.0% [libx264 @ 0000027538d0f8c0] mb P I16..4: 0.0% 0.0% 0.0% P16..4: 0.0% 0.0% 0.0% 0.0% 0.0% skip:100.0% [libx264 @ 0000027538d0f8c0] coded y,uvDC,uvAC intra: 0.0% 0.0% 0.0% inter: 0.0% 0.0% 0.0% [libx264 @ 0000027538d0f8c0] i16 v,h,dc,p: 99% 0% 1% 0% [libx264 @ 0000027538d0f8c0] i8c dc,h,v,p: 100% 0% 0% 0% [libx264 @ 0000027538d0f8c0] kb/s:247.00

SharpDX.SharpDXException: HRESULT: [0x8899000C], Module: [SharpDX.Direct2D1], ApiCode: [D2DERR_RECREATE_TARGET/RecreateTarget], Message: 存在可以恢复的演示错误。调用方需要重新创建、重新渲染整个帧,并重新尝试显示。

在 SharpDX.Result.CheckError() 在 DesktopDuplication.Direct2DEditorSession.EndDraw() 在 DesktopDuplication.Direct2DEditor.GenerateFrame() 在 Screna.Recorder.<>c__DisplayClass14_0.b2() 在 System.Threading.Tasks.Task`1.InnerInvoke() 在 System.Threading.Tasks.Task.Execute() --- 引发异常的上一位置中堆栈跟踪的末尾 --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 Screna.Recorder.d14.MoveNext()

pennpeng commented 5 years ago

+1