NCScreensharingController.m 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /**
  2. * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
  3. * SPDX-License-Identifier: GPL-3.0-or-later
  4. */
  5. #import "NCScreensharingController.h"
  6. #import <WebRTC/RTCVideoSource.h>
  7. #import "ScreenCapturer.h"
  8. #import "ScreenCaptureController.h"
  9. @interface NCScreensharingController () <RTCVideoCapturerDelegate>
  10. {
  11. ScreenCapturer *_screenCapturer;
  12. ScreenCaptureController *_screenCapturerController;
  13. RTCVideoSource *_videoSource;
  14. RTCVideoCapturer *_videoCapturer;
  15. }
  16. @end
  17. @implementation NCScreensharingController
  18. - (void)startCaptureWithVideoSource:(RTCVideoSource *)videoSource withVideoCapturer:(RTCVideoCapturer *)capturer
  19. {
  20. _videoSource = videoSource;
  21. _videoCapturer = capturer;
  22. _screenCapturer = [[ScreenCapturer alloc] initWithDelegate:self];
  23. _screenCapturerController = [[ScreenCaptureController alloc] initWithCapturer:_screenCapturer];
  24. [_screenCapturerController startCapture];
  25. }
  26. - (void)stopCapture
  27. {
  28. if (_screenCapturerController) {
  29. [_screenCapturerController stopCapture];
  30. _screenCapturerController = nil;
  31. _screenCapturer = nil;
  32. }
  33. }
  34. - (void)capturer:(RTCVideoCapturer *)capturer didCaptureVideoFrame:(RTCVideoFrame *)frame
  35. {
  36. if (_videoSource && _videoCapturer) {
  37. [_videoSource capturer:_videoCapturer didCaptureVideoFrame:frame];
  38. }
  39. }
  40. @end