diff --git a/CHANGELOG.md b/CHANGELOG.md index 371032315d..f602261bea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,12 +18,14 @@ All user visible changes to this project will be documented in this file. This p ### Added +- Support `PeerConnection.videoDecoders()` and `PeerConnection.videoEncoders()` on iOS. ([#148]) - Support for system audio capturing on [Windows] via `getDisplayMedia()`. ([#245], [#244]) ### Changed - Upgraded [libwebrtc] to [139.0.7258.127] version. ([#248], [todo]) +[#148]: https://github.com/instrumentisto/medea-flutter-webrtc/pull/148 [#244]: https://github.com/instrumentisto/medea-flutter-webrtc/issues/244 [#245]: https://github.com/instrumentisto/medea-flutter-webrtc/pull/245 [#248]: https://github.com/instrumentisto/medea-flutter-webrtc/pull/248 diff --git a/ios/Classes/controller/PeerConnectionFactoryController.swift b/ios/Classes/controller/PeerConnectionFactoryController.swift index 1bd4bb20bc..21eac36506 100644 --- a/ios/Classes/controller/PeerConnectionFactoryController.swift +++ b/ios/Classes/controller/PeerConnectionFactoryController.swift @@ -73,48 +73,10 @@ class PeerConnectionFactoryController { result(capabilities.asFlutterResult()) case "videoEncoders": - let res = [ - VideoCodecInfo( - isHardwareAccelerated: false, - codec: VideoCodec.VP8 - ), - VideoCodecInfo( - isHardwareAccelerated: false, - codec: VideoCodec.VP9 - ), - VideoCodecInfo( - isHardwareAccelerated: false, - codec: VideoCodec.AV1 - ), - VideoCodecInfo( - isHardwareAccelerated: true, - codec: VideoCodec.H264 - ), - ].map { - $0.asFlutterResult() - } + let res = self.peerFactory.videoEncoders().map { $0.asFlutterResult() } result(res) case "videoDecoders": - let res = [ - VideoCodecInfo( - isHardwareAccelerated: false, - codec: VideoCodec.VP8 - ), - VideoCodecInfo( - isHardwareAccelerated: false, - codec: VideoCodec.VP9 - ), - VideoCodecInfo( - isHardwareAccelerated: false, - codec: VideoCodec.AV1 - ), - VideoCodecInfo( - isHardwareAccelerated: true, - codec: VideoCodec.H264 - ), - ].map { - $0.asFlutterResult() - } + let res = self.peerFactory.videoDecoders().map { $0.asFlutterResult() } result(res) case "dispose": self.channel.setMethodCallHandler(nil) diff --git a/ios/Classes/proxy/PeerConnectionFactoryProxy.swift b/ios/Classes/proxy/PeerConnectionFactoryProxy.swift index 0a73a8d8ef..e17aefaea0 100644 --- a/ios/Classes/proxy/PeerConnectionFactoryProxy.swift +++ b/ios/Classes/proxy/PeerConnectionFactoryProxy.swift @@ -1,3 +1,4 @@ +import VideoToolbox import WebRTC /// Returns `RtpCapabilities` based on the provided `RTCRtpCapabilities`. @@ -93,6 +94,56 @@ class PeerConnectionFactoryProxy { return peerProxy } + /// Returns list containing information about video encoders for the different + /// video codecs. + func videoEncoders() -> [VideoCodecInfo] { + [ + VideoCodecInfo( + isHardwareAccelerated: false, + codec: VideoCodec.VP8 + ), + VideoCodecInfo( + isHardwareAccelerated: false, + codec: VideoCodec.VP9 + ), + VideoCodecInfo( + isHardwareAccelerated: false, + codec: VideoCodec.AV1 + ), + VideoCodecInfo( + isHardwareAccelerated: VTIsHardwareDecodeSupported( + kCMVideoCodecType_H264 + ), + codec: VideoCodec.H264 + ), + ] + } + + /// Returns list containing information about video decoders for the different + /// video codecs. + func videoDecoders() -> [VideoCodecInfo] { + [ + VideoCodecInfo( + isHardwareAccelerated: false, + codec: VideoCodec.VP8 + ), + VideoCodecInfo( + isHardwareAccelerated: false, + codec: VideoCodec.VP9 + ), + VideoCodecInfo( + isHardwareAccelerated: false, + codec: VideoCodec.AV1 + ), + VideoCodecInfo( + isHardwareAccelerated: VTIsHardwareDecodeSupported( + kCMVideoCodecType_H264 + ), + codec: VideoCodec.H264 + ), + ] + } + /// Removes the specified `PeerObserver` from the `peerObservers`. private func remotePeerObserver(id: Int) { self.peerObservers.removeValue(forKey: id)