diff --git a/gulpfile.js b/gulpfile.js index 1f23bf1e..07bdbbf3 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -37,19 +37,33 @@ gulp.task('lint', function () { .pipe(jshint.reporter('fail')); }); - -gulp.task('browserify', function () { - return browserify([path.join(__dirname, PKG.main)], { +gulp.task('browserify-ios', function () { + return browserify([path.join(__dirname, 'js/ios/iosrtc.js')], { standalone: 'iosrtc' }) .exclude('cordova/exec') // Exclude require('cordova/exec'). .bundle() - .pipe(vinyl_source_stream(PKG.name + '.js')) + .pipe(vinyl_source_stream('cordova-plugin-ios-rtc.js')) + .pipe(vinyl_buffer()) + .pipe(header(banner, banner_options)) + .pipe(derequire()) + .pipe(gulp.dest('www/')); +}); + + +gulp.task('browserify-android', function () { + return browserify([path.join(__dirname, 'js/android/androidrtc.js')], { + standalone: 'androidrtc' + }) + .exclude('cordova/exec') // Exclude require('cordova/exec'). + .bundle() + .pipe(vinyl_source_stream('cordova-plugin-android-rtc.js')) .pipe(vinyl_buffer()) .pipe(header(banner, banner_options)) .pipe(derequire()) .pipe(gulp.dest('www/')); }); +gulp.task('browserify', gulp.series('browserify-ios', 'browserify-android')); gulp.task('default', gulp.series('lint', 'browserify')); diff --git a/js/android/androidrtc.js b/js/android/androidrtc.js new file mode 100644 index 00000000..f80b3756 --- /dev/null +++ b/js/android/androidrtc.js @@ -0,0 +1,83 @@ +var exec = require('cordova/exec'); +var deviceChangesListenerIsAdded = false; + +module.exports = { + getEnumerateDevices: getEnumerateDevices, +}; + +function getEnumerateDevices(arg0, success, error) { + + if(!deviceChangesListenerIsAdded){ + console.log("Adding devicechange listener"); + addDeviceChangeListener(); + exec(success, error, 'EnumerateDevicesPlugin', 'addDeviceListener', [arg0]); + deviceChangesListenerIsAdded = true; + } + + var isPromise, callback; + if (typeof arguments[0] !== 'function') { + isPromise = true; + } else { + isPromise = false; + callback = arguments[0]; + } + + if (isPromise) { + return new Promise(function(resolve) { + function onResultOK(devices) { + console.info('enumerateDevices() | success'); + resolve(getMediaDeviceInfos(devices)); + } + exec(onResultOK, error, 'EnumerateDevicesPlugin', 'enumerateDevices', [arg0]); + }); + } + + function onResultOK(devices) { + console.info('enumerateDevices() | success'); + callback(getMediaDeviceInfos(devices)); + } + exec(onResultOK, error, 'EnumerateDevicesPlugin', 'enumerateDevices', [arg0]); +} + +/** + * Private API + */ + +function addDeviceChangeListener() { + navigator.mediaDevices.addEventListener('devicechange', navigator.mediaDevices.ondevicechange); +} + +function getMediaDeviceInfos(devices) { + console.info('getMediaDeviceInfos() ', devices); + + var id, + mediaDeviceInfos = []; + + for (id in devices) { + if (devices.hasOwnProperty(id)) { + mediaDeviceInfos.push(mediaDeviceInfo(devices[id])); + } + } + + return devices; +} + +function mediaDeviceInfo(data) { + data = data || {}; + + return { + // MediaDeviceInfo spec. + deviceId: { + value: data.deviceId, + }, + kind: { + value: data.kind, + }, + label: { + value: data.label, + }, + groupId: { + value: data.groupId || '', + }, + }; +} \ No newline at end of file diff --git a/js/Errors.js b/js/ios/Errors.js similarity index 100% rename from js/Errors.js rename to js/ios/Errors.js diff --git a/js/EventTarget.js b/js/ios/EventTarget.js similarity index 100% rename from js/EventTarget.js rename to js/ios/EventTarget.js diff --git a/js/MediaDeviceInfo.js b/js/ios/MediaDeviceInfo.js similarity index 100% rename from js/MediaDeviceInfo.js rename to js/ios/MediaDeviceInfo.js diff --git a/js/MediaDevices.js b/js/ios/MediaDevices.js similarity index 100% rename from js/MediaDevices.js rename to js/ios/MediaDevices.js diff --git a/js/MediaStream.js b/js/ios/MediaStream.js similarity index 100% rename from js/MediaStream.js rename to js/ios/MediaStream.js diff --git a/js/MediaStreamRenderer.js b/js/ios/MediaStreamRenderer.js similarity index 100% rename from js/MediaStreamRenderer.js rename to js/ios/MediaStreamRenderer.js diff --git a/js/MediaStreamTrack.js b/js/ios/MediaStreamTrack.js similarity index 100% rename from js/MediaStreamTrack.js rename to js/ios/MediaStreamTrack.js diff --git a/js/MediaTrackCapabilities.js b/js/ios/MediaTrackCapabilities.js similarity index 100% rename from js/MediaTrackCapabilities.js rename to js/ios/MediaTrackCapabilities.js diff --git a/js/MediaTrackSettings.js b/js/ios/MediaTrackSettings.js similarity index 100% rename from js/MediaTrackSettings.js rename to js/ios/MediaTrackSettings.js diff --git a/js/RTCDTMFSender.js b/js/ios/RTCDTMFSender.js similarity index 100% rename from js/RTCDTMFSender.js rename to js/ios/RTCDTMFSender.js diff --git a/js/RTCDataChannel.js b/js/ios/RTCDataChannel.js similarity index 100% rename from js/RTCDataChannel.js rename to js/ios/RTCDataChannel.js diff --git a/js/RTCIceCandidate.js b/js/ios/RTCIceCandidate.js similarity index 100% rename from js/RTCIceCandidate.js rename to js/ios/RTCIceCandidate.js diff --git a/js/RTCPeerConnection.js b/js/ios/RTCPeerConnection.js similarity index 100% rename from js/RTCPeerConnection.js rename to js/ios/RTCPeerConnection.js diff --git a/js/RTCRtpReceiver.js b/js/ios/RTCRtpReceiver.js similarity index 100% rename from js/RTCRtpReceiver.js rename to js/ios/RTCRtpReceiver.js diff --git a/js/RTCRtpSender.js b/js/ios/RTCRtpSender.js similarity index 100% rename from js/RTCRtpSender.js rename to js/ios/RTCRtpSender.js diff --git a/js/RTCRtpTransceiver.js b/js/ios/RTCRtpTransceiver.js similarity index 100% rename from js/RTCRtpTransceiver.js rename to js/ios/RTCRtpTransceiver.js diff --git a/js/RTCSessionDescription.js b/js/ios/RTCSessionDescription.js similarity index 100% rename from js/RTCSessionDescription.js rename to js/ios/RTCSessionDescription.js diff --git a/js/RTCStatsReport.js b/js/ios/RTCStatsReport.js similarity index 100% rename from js/RTCStatsReport.js rename to js/ios/RTCStatsReport.js diff --git a/js/RTCStatsResponse.js b/js/ios/RTCStatsResponse.js similarity index 100% rename from js/RTCStatsResponse.js rename to js/ios/RTCStatsResponse.js diff --git a/js/enumerateDevices.js b/js/ios/enumerateDevices.js similarity index 100% rename from js/enumerateDevices.js rename to js/ios/enumerateDevices.js diff --git a/js/getUserMedia.js b/js/ios/getUserMedia.js similarity index 100% rename from js/getUserMedia.js rename to js/ios/getUserMedia.js diff --git a/js/iosrtc.js b/js/ios/iosrtc.js similarity index 100% rename from js/iosrtc.js rename to js/ios/iosrtc.js diff --git a/js/videoElementsHandler.js b/js/ios/videoElementsHandler.js similarity index 100% rename from js/videoElementsHandler.js rename to js/ios/videoElementsHandler.js diff --git a/lib/WebRTC.framework/Headers/RTCAudioSession.h b/lib/ios/WebRTC.framework/Headers/RTCAudioSession.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCAudioSession.h rename to lib/ios/WebRTC.framework/Headers/RTCAudioSession.h diff --git a/lib/WebRTC.framework/Headers/RTCAudioSessionConfiguration.h b/lib/ios/WebRTC.framework/Headers/RTCAudioSessionConfiguration.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCAudioSessionConfiguration.h rename to lib/ios/WebRTC.framework/Headers/RTCAudioSessionConfiguration.h diff --git a/lib/WebRTC.framework/Headers/RTCAudioSource.h b/lib/ios/WebRTC.framework/Headers/RTCAudioSource.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCAudioSource.h rename to lib/ios/WebRTC.framework/Headers/RTCAudioSource.h diff --git a/lib/WebRTC.framework/Headers/RTCAudioTrack.h b/lib/ios/WebRTC.framework/Headers/RTCAudioTrack.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCAudioTrack.h rename to lib/ios/WebRTC.framework/Headers/RTCAudioTrack.h diff --git a/lib/WebRTC.framework/Headers/RTCCallbackLogger.h b/lib/ios/WebRTC.framework/Headers/RTCCallbackLogger.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCCallbackLogger.h rename to lib/ios/WebRTC.framework/Headers/RTCCallbackLogger.h diff --git a/lib/WebRTC.framework/Headers/RTCCameraPreviewView.h b/lib/ios/WebRTC.framework/Headers/RTCCameraPreviewView.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCCameraPreviewView.h rename to lib/ios/WebRTC.framework/Headers/RTCCameraPreviewView.h diff --git a/lib/WebRTC.framework/Headers/RTCCameraVideoCapturer.h b/lib/ios/WebRTC.framework/Headers/RTCCameraVideoCapturer.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCCameraVideoCapturer.h rename to lib/ios/WebRTC.framework/Headers/RTCCameraVideoCapturer.h diff --git a/lib/WebRTC.framework/Headers/RTCConfiguration.h b/lib/ios/WebRTC.framework/Headers/RTCConfiguration.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCConfiguration.h rename to lib/ios/WebRTC.framework/Headers/RTCConfiguration.h diff --git a/lib/WebRTC.framework/Headers/RTCDataChannel.h b/lib/ios/WebRTC.framework/Headers/RTCDataChannel.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCDataChannel.h rename to lib/ios/WebRTC.framework/Headers/RTCDataChannel.h diff --git a/lib/WebRTC.framework/Headers/RTCDataChannelConfiguration.h b/lib/ios/WebRTC.framework/Headers/RTCDataChannelConfiguration.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCDataChannelConfiguration.h rename to lib/ios/WebRTC.framework/Headers/RTCDataChannelConfiguration.h diff --git a/lib/WebRTC.framework/Headers/RTCDispatcher.h b/lib/ios/WebRTC.framework/Headers/RTCDispatcher.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCDispatcher.h rename to lib/ios/WebRTC.framework/Headers/RTCDispatcher.h diff --git a/lib/WebRTC.framework/Headers/RTCDtmfSender.h b/lib/ios/WebRTC.framework/Headers/RTCDtmfSender.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCDtmfSender.h rename to lib/ios/WebRTC.framework/Headers/RTCDtmfSender.h diff --git a/lib/WebRTC.framework/Headers/RTCEAGLVideoView.h b/lib/ios/WebRTC.framework/Headers/RTCEAGLVideoView.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCEAGLVideoView.h rename to lib/ios/WebRTC.framework/Headers/RTCEAGLVideoView.h diff --git a/lib/WebRTC.framework/Headers/RTCFieldTrials.h b/lib/ios/WebRTC.framework/Headers/RTCFieldTrials.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCFieldTrials.h rename to lib/ios/WebRTC.framework/Headers/RTCFieldTrials.h diff --git a/lib/WebRTC.framework/Headers/RTCFileLogger.h b/lib/ios/WebRTC.framework/Headers/RTCFileLogger.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCFileLogger.h rename to lib/ios/WebRTC.framework/Headers/RTCFileLogger.h diff --git a/lib/WebRTC.framework/Headers/RTCFileVideoCapturer.h b/lib/ios/WebRTC.framework/Headers/RTCFileVideoCapturer.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCFileVideoCapturer.h rename to lib/ios/WebRTC.framework/Headers/RTCFileVideoCapturer.h diff --git a/lib/WebRTC.framework/Headers/RTCIceCandidate.h b/lib/ios/WebRTC.framework/Headers/RTCIceCandidate.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCIceCandidate.h rename to lib/ios/WebRTC.framework/Headers/RTCIceCandidate.h diff --git a/lib/WebRTC.framework/Headers/RTCIceServer.h b/lib/ios/WebRTC.framework/Headers/RTCIceServer.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCIceServer.h rename to lib/ios/WebRTC.framework/Headers/RTCIceServer.h diff --git a/lib/WebRTC.framework/Headers/RTCIntervalRange.h b/lib/ios/WebRTC.framework/Headers/RTCIntervalRange.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCIntervalRange.h rename to lib/ios/WebRTC.framework/Headers/RTCIntervalRange.h diff --git a/lib/WebRTC.framework/Headers/RTCLegacyStatsReport.h b/lib/ios/WebRTC.framework/Headers/RTCLegacyStatsReport.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCLegacyStatsReport.h rename to lib/ios/WebRTC.framework/Headers/RTCLegacyStatsReport.h diff --git a/lib/WebRTC.framework/Headers/RTCLogging.h b/lib/ios/WebRTC.framework/Headers/RTCLogging.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCLogging.h rename to lib/ios/WebRTC.framework/Headers/RTCLogging.h diff --git a/lib/WebRTC.framework/Headers/RTCMTLVideoView.h b/lib/ios/WebRTC.framework/Headers/RTCMTLVideoView.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCMTLVideoView.h rename to lib/ios/WebRTC.framework/Headers/RTCMTLVideoView.h diff --git a/lib/WebRTC.framework/Headers/RTCMacros.h b/lib/ios/WebRTC.framework/Headers/RTCMacros.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCMacros.h rename to lib/ios/WebRTC.framework/Headers/RTCMacros.h diff --git a/lib/WebRTC.framework/Headers/RTCMediaConstraints.h b/lib/ios/WebRTC.framework/Headers/RTCMediaConstraints.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCMediaConstraints.h rename to lib/ios/WebRTC.framework/Headers/RTCMediaConstraints.h diff --git a/lib/WebRTC.framework/Headers/RTCMediaSource.h b/lib/ios/WebRTC.framework/Headers/RTCMediaSource.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCMediaSource.h rename to lib/ios/WebRTC.framework/Headers/RTCMediaSource.h diff --git a/lib/WebRTC.framework/Headers/RTCMediaStream.h b/lib/ios/WebRTC.framework/Headers/RTCMediaStream.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCMediaStream.h rename to lib/ios/WebRTC.framework/Headers/RTCMediaStream.h diff --git a/lib/WebRTC.framework/Headers/RTCMediaStreamTrack.h b/lib/ios/WebRTC.framework/Headers/RTCMediaStreamTrack.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCMediaStreamTrack.h rename to lib/ios/WebRTC.framework/Headers/RTCMediaStreamTrack.h diff --git a/lib/WebRTC.framework/Headers/RTCMetrics.h b/lib/ios/WebRTC.framework/Headers/RTCMetrics.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCMetrics.h rename to lib/ios/WebRTC.framework/Headers/RTCMetrics.h diff --git a/lib/WebRTC.framework/Headers/RTCMetricsSampleInfo.h b/lib/ios/WebRTC.framework/Headers/RTCMetricsSampleInfo.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCMetricsSampleInfo.h rename to lib/ios/WebRTC.framework/Headers/RTCMetricsSampleInfo.h diff --git a/lib/WebRTC.framework/Headers/RTCPeerConnection.h b/lib/ios/WebRTC.framework/Headers/RTCPeerConnection.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCPeerConnection.h rename to lib/ios/WebRTC.framework/Headers/RTCPeerConnection.h diff --git a/lib/WebRTC.framework/Headers/RTCPeerConnectionFactory.h b/lib/ios/WebRTC.framework/Headers/RTCPeerConnectionFactory.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCPeerConnectionFactory.h rename to lib/ios/WebRTC.framework/Headers/RTCPeerConnectionFactory.h diff --git a/lib/WebRTC.framework/Headers/RTCPeerConnectionFactoryOptions.h b/lib/ios/WebRTC.framework/Headers/RTCPeerConnectionFactoryOptions.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCPeerConnectionFactoryOptions.h rename to lib/ios/WebRTC.framework/Headers/RTCPeerConnectionFactoryOptions.h diff --git a/lib/WebRTC.framework/Headers/RTCRtcpParameters.h b/lib/ios/WebRTC.framework/Headers/RTCRtcpParameters.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCRtcpParameters.h rename to lib/ios/WebRTC.framework/Headers/RTCRtcpParameters.h diff --git a/lib/WebRTC.framework/Headers/RTCRtpCodecParameters.h b/lib/ios/WebRTC.framework/Headers/RTCRtpCodecParameters.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCRtpCodecParameters.h rename to lib/ios/WebRTC.framework/Headers/RTCRtpCodecParameters.h diff --git a/lib/WebRTC.framework/Headers/RTCRtpEncodingParameters.h b/lib/ios/WebRTC.framework/Headers/RTCRtpEncodingParameters.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCRtpEncodingParameters.h rename to lib/ios/WebRTC.framework/Headers/RTCRtpEncodingParameters.h diff --git a/lib/WebRTC.framework/Headers/RTCRtpHeaderExtension.h b/lib/ios/WebRTC.framework/Headers/RTCRtpHeaderExtension.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCRtpHeaderExtension.h rename to lib/ios/WebRTC.framework/Headers/RTCRtpHeaderExtension.h diff --git a/lib/WebRTC.framework/Headers/RTCRtpParameters.h b/lib/ios/WebRTC.framework/Headers/RTCRtpParameters.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCRtpParameters.h rename to lib/ios/WebRTC.framework/Headers/RTCRtpParameters.h diff --git a/lib/WebRTC.framework/Headers/RTCRtpReceiver.h b/lib/ios/WebRTC.framework/Headers/RTCRtpReceiver.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCRtpReceiver.h rename to lib/ios/WebRTC.framework/Headers/RTCRtpReceiver.h diff --git a/lib/WebRTC.framework/Headers/RTCRtpSender.h b/lib/ios/WebRTC.framework/Headers/RTCRtpSender.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCRtpSender.h rename to lib/ios/WebRTC.framework/Headers/RTCRtpSender.h diff --git a/lib/WebRTC.framework/Headers/RTCRtpTransceiver.h b/lib/ios/WebRTC.framework/Headers/RTCRtpTransceiver.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCRtpTransceiver.h rename to lib/ios/WebRTC.framework/Headers/RTCRtpTransceiver.h diff --git a/lib/WebRTC.framework/Headers/RTCSSLAdapter.h b/lib/ios/WebRTC.framework/Headers/RTCSSLAdapter.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCSSLAdapter.h rename to lib/ios/WebRTC.framework/Headers/RTCSSLAdapter.h diff --git a/lib/WebRTC.framework/Headers/RTCSessionDescription.h b/lib/ios/WebRTC.framework/Headers/RTCSessionDescription.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCSessionDescription.h rename to lib/ios/WebRTC.framework/Headers/RTCSessionDescription.h diff --git a/lib/WebRTC.framework/Headers/RTCTracing.h b/lib/ios/WebRTC.framework/Headers/RTCTracing.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCTracing.h rename to lib/ios/WebRTC.framework/Headers/RTCTracing.h diff --git a/lib/WebRTC.framework/Headers/RTCVideoCapturer.h b/lib/ios/WebRTC.framework/Headers/RTCVideoCapturer.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCVideoCapturer.h rename to lib/ios/WebRTC.framework/Headers/RTCVideoCapturer.h diff --git a/lib/WebRTC.framework/Headers/RTCVideoCodec.h b/lib/ios/WebRTC.framework/Headers/RTCVideoCodec.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCVideoCodec.h rename to lib/ios/WebRTC.framework/Headers/RTCVideoCodec.h diff --git a/lib/WebRTC.framework/Headers/RTCVideoCodecFactory.h b/lib/ios/WebRTC.framework/Headers/RTCVideoCodecFactory.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCVideoCodecFactory.h rename to lib/ios/WebRTC.framework/Headers/RTCVideoCodecFactory.h diff --git a/lib/WebRTC.framework/Headers/RTCVideoCodecH264.h b/lib/ios/WebRTC.framework/Headers/RTCVideoCodecH264.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCVideoCodecH264.h rename to lib/ios/WebRTC.framework/Headers/RTCVideoCodecH264.h diff --git a/lib/WebRTC.framework/Headers/RTCVideoDecoderVP8.h b/lib/ios/WebRTC.framework/Headers/RTCVideoDecoderVP8.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCVideoDecoderVP8.h rename to lib/ios/WebRTC.framework/Headers/RTCVideoDecoderVP8.h diff --git a/lib/WebRTC.framework/Headers/RTCVideoDecoderVP9.h b/lib/ios/WebRTC.framework/Headers/RTCVideoDecoderVP9.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCVideoDecoderVP9.h rename to lib/ios/WebRTC.framework/Headers/RTCVideoDecoderVP9.h diff --git a/lib/WebRTC.framework/Headers/RTCVideoEncoderVP8.h b/lib/ios/WebRTC.framework/Headers/RTCVideoEncoderVP8.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCVideoEncoderVP8.h rename to lib/ios/WebRTC.framework/Headers/RTCVideoEncoderVP8.h diff --git a/lib/WebRTC.framework/Headers/RTCVideoEncoderVP9.h b/lib/ios/WebRTC.framework/Headers/RTCVideoEncoderVP9.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCVideoEncoderVP9.h rename to lib/ios/WebRTC.framework/Headers/RTCVideoEncoderVP9.h diff --git a/lib/WebRTC.framework/Headers/RTCVideoFrame.h b/lib/ios/WebRTC.framework/Headers/RTCVideoFrame.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCVideoFrame.h rename to lib/ios/WebRTC.framework/Headers/RTCVideoFrame.h diff --git a/lib/WebRTC.framework/Headers/RTCVideoFrameBuffer.h b/lib/ios/WebRTC.framework/Headers/RTCVideoFrameBuffer.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCVideoFrameBuffer.h rename to lib/ios/WebRTC.framework/Headers/RTCVideoFrameBuffer.h diff --git a/lib/WebRTC.framework/Headers/RTCVideoRenderer.h b/lib/ios/WebRTC.framework/Headers/RTCVideoRenderer.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCVideoRenderer.h rename to lib/ios/WebRTC.framework/Headers/RTCVideoRenderer.h diff --git a/lib/WebRTC.framework/Headers/RTCVideoSource.h b/lib/ios/WebRTC.framework/Headers/RTCVideoSource.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCVideoSource.h rename to lib/ios/WebRTC.framework/Headers/RTCVideoSource.h diff --git a/lib/WebRTC.framework/Headers/RTCVideoTrack.h b/lib/ios/WebRTC.framework/Headers/RTCVideoTrack.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCVideoTrack.h rename to lib/ios/WebRTC.framework/Headers/RTCVideoTrack.h diff --git a/lib/WebRTC.framework/Headers/RTCVideoViewShading.h b/lib/ios/WebRTC.framework/Headers/RTCVideoViewShading.h similarity index 100% rename from lib/WebRTC.framework/Headers/RTCVideoViewShading.h rename to lib/ios/WebRTC.framework/Headers/RTCVideoViewShading.h diff --git a/lib/WebRTC.framework/Headers/UIDevice+RTCDevice.h b/lib/ios/WebRTC.framework/Headers/UIDevice+RTCDevice.h similarity index 100% rename from lib/WebRTC.framework/Headers/UIDevice+RTCDevice.h rename to lib/ios/WebRTC.framework/Headers/UIDevice+RTCDevice.h diff --git a/lib/WebRTC.framework/Headers/WebRTC.h b/lib/ios/WebRTC.framework/Headers/WebRTC.h similarity index 100% rename from lib/WebRTC.framework/Headers/WebRTC.h rename to lib/ios/WebRTC.framework/Headers/WebRTC.h diff --git a/lib/WebRTC.framework/Info.plist b/lib/ios/WebRTC.framework/Info.plist similarity index 100% rename from lib/WebRTC.framework/Info.plist rename to lib/ios/WebRTC.framework/Info.plist diff --git a/lib/WebRTC.framework/Modules/module.modulemap b/lib/ios/WebRTC.framework/Modules/module.modulemap similarity index 100% rename from lib/WebRTC.framework/Modules/module.modulemap rename to lib/ios/WebRTC.framework/Modules/module.modulemap diff --git a/lib/WebRTC.framework/WebRTC b/lib/ios/WebRTC.framework/WebRTC similarity index 100% rename from lib/WebRTC.framework/WebRTC rename to lib/ios/WebRTC.framework/WebRTC diff --git a/plugin.xml b/plugin.xml index b2fe27e2..9886bbcf 100644 --- a/plugin.xml +++ b/plugin.xml @@ -18,6 +18,23 @@ + + + + + + + + + + + + + + + + + @@ -54,24 +71,24 @@ - + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + @@ -92,7 +109,7 @@ - + diff --git a/src/android/EnumerateDevicesPlugin.java b/src/android/EnumerateDevicesPlugin.java new file mode 100644 index 00000000..b15cd940 --- /dev/null +++ b/src/android/EnumerateDevicesPlugin.java @@ -0,0 +1,235 @@ +package cordova.plugin.iosrtc.enumeratedevices; + +import org.apache.cordova.CordovaPlugin; +import org.apache.cordova.CallbackContext; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import android.annotation.TargetApi; +import android.hardware.camera2.CameraManager; +import android.hardware.camera2.CameraAccessException; +import android.hardware.camera2.CameraCharacteristics; + +import android.media.AudioManager; +import android.media.AudioDeviceInfo; +import android.content.BroadcastReceiver; +import android.content.Intent; +import android.bluetooth.BluetoothDevice; +import android.os.Build; +import android.support.annotation.RequiresApi; +import android.widget.Toast; +import android.content.IntentFilter; + +import android.app.Activity; +import android.content.Context; + +/** + * This class echoes a string called from JavaScript. + */ +public class EnumerateDevicesPlugin extends CordovaPlugin { + + static final String FRONT_CAM = "Front Camera"; + static final String BACK_CAM = "Back Camera"; + static final String EXTERNAL_CAM = "External Camera"; + static final String UNKNOWN_CAM = "Unknown Camera"; + + static final String BUILTIN_MIC = "Built-in Microphone"; + static final String BLUETOOTH_MIC = "Bluetooth"; + static final String WIRED_MIC = "Wired Microphone"; + static final String USB_MIC = "USB Microphone"; + static final String UNKNOWN_MIC = "Unknown Microphone"; + + private Context context; + private Activity activity; + AudioManager audioManager; + JSONArray devicesArray; + + + @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) + @Override + public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { + this.context = cordova.getActivity().getApplicationContext(); + this.activity = cordova.getActivity(); + this.audioManager = (AudioManager) this.activity.getSystemService(this.context.AUDIO_SERVICE); + + if (action.equals("enumerateDevices")) { + + this.enumerateDevices(args, callbackContext); + return true; + + } else if (action.equals("addDeviceListener")) { + IntentFilter filter = new IntentFilter(); + filter.addAction(BluetoothDevice.ACTION_ACL_CONNECTED); + filter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECT_REQUESTED); + filter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED); + filter.addAction(Intent.ACTION_HEADSET_PLUG); + context.registerReceiver(BTReceiver, filter); + return true; + } + return false; + } + + // The BroadcastReceiver that listens for bluetooth broadcasts + private final BroadcastReceiver BTReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + + if (BluetoothDevice.ACTION_ACL_CONNECTED.equals(action)) { + Toast.makeText(context, "Bluetooth connected", Toast.LENGTH_SHORT).show(); + } else if (BluetoothDevice.ACTION_ACL_DISCONNECTED.equals(action)) { + Toast.makeText(context, "Bluetooth disconnected", Toast.LENGTH_SHORT).show(); + } else if (Intent.ACTION_HEADSET_PLUG.equals(action)) { + int state = intent.getIntExtra("state", -1); + switch (state) { + case 0: + Toast.makeText(context, "Wired device disconnected", Toast.LENGTH_SHORT).show(); + break; + case 1: + Toast.makeText(context, "Wired device connected", Toast.LENGTH_SHORT).show(); + break; + default: + break; + } + } + fireEvent("devicechange"); + } + }; + + @TargetApi(Build.VERSION_CODES.M) + @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) + private void enumerateDevices(JSONArray args, CallbackContext callback) { + + this.devicesArray = new JSONArray(); + + this.getMics(); + this.getCams(); + callback.success(this.devicesArray); + } + + @RequiresApi(api = Build.VERSION_CODES.M) + private void getMics() { + AudioDeviceInfo[] mics = this.audioManager.getDevices(AudioManager.GET_DEVICES_ALL); + String label = ""; + + for (int i = 0; i < mics.length; i++) { + Integer type = mics[i].getType(); + if ((type == AudioDeviceInfo.TYPE_BLUETOOTH_SCO || type == AudioDeviceInfo.TYPE_BUILTIN_MIC + || type == AudioDeviceInfo.TYPE_WIRED_HEADSET || type == AudioDeviceInfo.TYPE_USB_DEVICE) + ) { + JSONObject device = new JSONObject(); + + label = this.getAudioType(mics[i]); + try { + device.put("deviceId", Integer.toString(mics[i].getId())); + device.put("groupId", ""); + device.put("kind", "audioinput"); + device.put("label", label); + this.devicesArray.put(device); + } catch (JSONException e) { + System.out.println("ERROR JSONException " + e.toString()); + } + } + } + } + + @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) + private void getCams() { + // Video inputs + CameraManager camera = (CameraManager) this.activity.getSystemService(this.context.CAMERA_SERVICE); + + try { + String[] cameraId = camera.getCameraIdList(); + CameraCharacteristics characteristics; + String label = ""; + + for (int i = 0; i < cameraId.length; i++) { + JSONObject device = new JSONObject(); + characteristics = camera.getCameraCharacteristics(cameraId[i]); + label = this.getVideoType(characteristics); + device.put("deviceId", cameraId[i]); + device.put("groupId", ""); + device.put("kind", "videoinput"); + device.put("label", label); + this.devicesArray.put(device); + } + + } catch (CameraAccessException e) { + System.out.println("ERROR IOException " + e.toString()); + + } catch (JSONException e) { + System.out.println("ERROR IOException " + e.toString()); + } + } + + @RequiresApi(api = Build.VERSION_CODES.M) + private String getAudioType(AudioDeviceInfo input) { + String deviceType = ""; + + switch (input.getType()) { + case AudioDeviceInfo.TYPE_BLUETOOTH_SCO: + deviceType = input.getProductName().toString() + " " + BLUETOOTH_MIC; + break; + case AudioDeviceInfo.TYPE_BUILTIN_MIC: + deviceType = input.getProductName().toString() + " " + BUILTIN_MIC; + break; + case AudioDeviceInfo.TYPE_WIRED_HEADSET: + deviceType = input.getProductName().toString() + " " + WIRED_MIC; + break; + case AudioDeviceInfo.TYPE_USB_DEVICE: + deviceType = input.getProductName().toString() + " " + USB_MIC; + break; + default: + deviceType = UNKNOWN_MIC; + break; + } + + return deviceType; + } + + @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) + private String getVideoType(CameraCharacteristics input) { + String deviceType = ""; + String num = ""; + + try { + for (int i = 0; i < this.devicesArray.length(); ++i) { + JSONObject obj = this.devicesArray.getJSONObject(i); + String id = obj.getString("label"); + if (id.contains(EXTERNAL_CAM)) { + num = Integer.toString(Integer.parseInt(num) + 1); + } + } + } catch (JSONException e) { + System.out.println("ERROR JSONException " + e.toString()); + } + + switch (input.get(CameraCharacteristics.LENS_FACING)) { + case CameraCharacteristics.LENS_FACING_FRONT: + deviceType = FRONT_CAM; + break; + case CameraCharacteristics.LENS_FACING_BACK: + deviceType = BACK_CAM; + break; + case CameraCharacteristics.LENS_FACING_EXTERNAL: + deviceType = EXTERNAL_CAM + " " + num; + break; + default: + deviceType = UNKNOWN_CAM; + } + + return deviceType; + } + + public void fireEvent(String eventName) { + + final String js = "javascript:(function(){" + + "var event = new CustomEvent('" + eventName + "');" + + "setTimeout(() => { navigator.mediaDevices.dispatchEvent(event); }, 500);" + + "})()"; + + this.activity.runOnUiThread(() -> webView.loadUrl(js)); + } +} \ No newline at end of file diff --git a/src/PluginEnumerateDevices.swift b/src/ios/PluginEnumerateDevices.swift similarity index 100% rename from src/PluginEnumerateDevices.swift rename to src/ios/PluginEnumerateDevices.swift diff --git a/src/PluginGetUserMedia.swift b/src/ios/PluginGetUserMedia.swift similarity index 100% rename from src/PluginGetUserMedia.swift rename to src/ios/PluginGetUserMedia.swift diff --git a/src/PluginMediaStream.swift b/src/ios/PluginMediaStream.swift similarity index 100% rename from src/PluginMediaStream.swift rename to src/ios/PluginMediaStream.swift diff --git a/src/PluginMediaStreamRenderer.swift b/src/ios/PluginMediaStreamRenderer.swift similarity index 100% rename from src/PluginMediaStreamRenderer.swift rename to src/ios/PluginMediaStreamRenderer.swift diff --git a/src/PluginMediaStreamTrack.swift b/src/ios/PluginMediaStreamTrack.swift similarity index 100% rename from src/PluginMediaStreamTrack.swift rename to src/ios/PluginMediaStreamTrack.swift diff --git a/src/PluginRTCAudioController.swift b/src/ios/PluginRTCAudioController.swift similarity index 100% rename from src/PluginRTCAudioController.swift rename to src/ios/PluginRTCAudioController.swift diff --git a/src/PluginRTCDTMFSender.swift b/src/ios/PluginRTCDTMFSender.swift similarity index 100% rename from src/PluginRTCDTMFSender.swift rename to src/ios/PluginRTCDTMFSender.swift diff --git a/src/PluginRTCDataChannel.swift b/src/ios/PluginRTCDataChannel.swift similarity index 100% rename from src/PluginRTCDataChannel.swift rename to src/ios/PluginRTCDataChannel.swift diff --git a/src/PluginRTCPeerConnection.swift b/src/ios/PluginRTCPeerConnection.swift similarity index 100% rename from src/PluginRTCPeerConnection.swift rename to src/ios/PluginRTCPeerConnection.swift diff --git a/src/PluginRTCPeerConnectionConfig.swift b/src/ios/PluginRTCPeerConnectionConfig.swift similarity index 100% rename from src/PluginRTCPeerConnectionConfig.swift rename to src/ios/PluginRTCPeerConnectionConfig.swift diff --git a/src/PluginRTCPeerConnectionConstraints.swift b/src/ios/PluginRTCPeerConnectionConstraints.swift similarity index 100% rename from src/PluginRTCPeerConnectionConstraints.swift rename to src/ios/PluginRTCPeerConnectionConstraints.swift diff --git a/src/PluginRTCTypes.swift b/src/ios/PluginRTCTypes.swift similarity index 100% rename from src/PluginRTCTypes.swift rename to src/ios/PluginRTCTypes.swift diff --git a/src/PluginRTCVideoCaptureController.swift b/src/ios/PluginRTCVideoCaptureController.swift similarity index 100% rename from src/PluginRTCVideoCaptureController.swift rename to src/ios/PluginRTCVideoCaptureController.swift diff --git a/src/PluginUtils.swift b/src/ios/PluginUtils.swift similarity index 100% rename from src/PluginUtils.swift rename to src/ios/PluginUtils.swift diff --git a/src/cordova-plugin-iosrtc-Bridging-Header.h b/src/ios/cordova-plugin-iosrtc-Bridging-Header.h similarity index 100% rename from src/cordova-plugin-iosrtc-Bridging-Header.h rename to src/ios/cordova-plugin-iosrtc-Bridging-Header.h diff --git a/src/iosrtcPlugin.swift b/src/ios/iosrtcPlugin.swift similarity index 100% rename from src/iosrtcPlugin.swift rename to src/ios/iosrtcPlugin.swift diff --git a/www/cordova-plugin-android-rtc.js b/www/cordova-plugin-android-rtc.js new file mode 100644 index 00000000..c1493a25 --- /dev/null +++ b/www/cordova-plugin-android-rtc.js @@ -0,0 +1,95 @@ +/* + * cordova-plugin-iosrtc v6.0.16 + * Cordova iOS plugin exposing the full WebRTC W3C JavaScript APIs + * Copyright 2015-2017 eFace2Face, Inc. (https://eface2face.com) + * Copyright 2015-2019 BasqueVoIPMafia (https://github.com/BasqueVoIPMafia) + * Copyright 2017-2020 Cordova-RTC (https://github.com/cordova-rtc) + * License MIT + */ + +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.androidrtc = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i