Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(299)

Unified Diff: webrtc/examples/unityplugin/README

Issue 2823783002: An example of Unity native plugin of webrtc for Windows OS (Closed)
Patch Set: Sync to head Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/examples/unityplugin/OWNERS ('k') | webrtc/examples/unityplugin/simple_peer_connection.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/examples/unityplugin/README
diff --git a/webrtc/examples/unityplugin/README b/webrtc/examples/unityplugin/README
new file mode 100644
index 0000000000000000000000000000000000000000..eade9ef5fac15090e98ce532ac361126ad0c22e0
--- /dev/null
+++ b/webrtc/examples/unityplugin/README
@@ -0,0 +1,204 @@
+This directory contains an example Unity native plugin for Windows OS.
+The APIs use Platform Invoke (P/Invoke) technology as required by Unity native plugin.
+This plugin dll can also be used by Windows C# applications other than Unity.
+
+An example of wrapping native plugin into a C# managed class in Unity is given as following:
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace SimplePeerConnectionM {
+ // This is a managed wrap up class for the native c style peer connection APIs.
+ public class PeerConnectionM {
+ //private const string dll_path = "SimplePeerConnection";
+ private const string dll_path = "webrtc_unity_plugin";
+
+ [DllImport(dll_path, CallingConvention = CallingConvention.Cdecl)]
+ private static extern int CreatePeerConnection();
+
+ [DllImport(dll_path, CallingConvention = CallingConvention.Cdecl)]
+ private static extern bool ClosePeerConnection(int peer_connection_id);
+
+ [DllImport(dll_path, CallingConvention = CallingConvention.Cdecl)]
+ private static extern bool AddStream(int peer_connection_id, bool audio_only);
+
+ [DllImport(dll_path, CallingConvention = CallingConvention.Cdecl)]
+ private static extern bool AddDataChannel(int peer_connection_id);
+
+ [DllImport(dll_path, CallingConvention = CallingConvention.Cdecl)]
+ private static extern bool CreateOffer(int peer_connection_id);
+
+ [DllImport(dll_path, CallingConvention = CallingConvention.Cdecl)]
+ private static extern bool CreateAnswer(int peer_connection_id);
+
+ [DllImport(dll_path, CallingConvention = CallingConvention.Cdecl)]
+ private static extern bool SendDataViaDataChannel(int peer_connection_id, string data);
+
+ [DllImport(dll_path, CallingConvention = CallingConvention.Cdecl)]
+ private static extern bool SetAudioControl(int peer_connection_id, bool is_mute, bool is_record);
+
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ private delegate void LocalDataChannelReadyInternalDelegate();
+ public delegate void LocalDataChannelReadyDelegate(int id);
+ [DllImport(dll_path, CallingConvention = CallingConvention.Cdecl)]
+ private static extern bool RegisterOnLocalDataChannelReady(int peer_connection_id, LocalDataChannelReadyInternalDelegate callback);
+
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ private delegate void DataFromDataChannelReadyInternalDelegate(string s);
+ public delegate void DataFromDataChannelReadyDelegate(int id, string s);
+ [DllImport(dll_path, CallingConvention = CallingConvention.Cdecl)]
+ private static extern bool RegisterOnDataFromDataChannelReady(int peer_connection_id, DataFromDataChannelReadyInternalDelegate callback);
+
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ private delegate void FailureMessageInternalDelegate(string msg);
+ public delegate void FailureMessageDelegate(int id, string msg);
+ [DllImport(dll_path, CallingConvention = CallingConvention.Cdecl)]
+ private static extern bool RegisterOnFailure(int peer_connection_id, FailureMessageInternalDelegate callback);
+
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ private delegate void AudioBusReadyInternalDelegate(IntPtr data, int bits_per_sample,
+ int sample_rate, int number_of_channels, int number_of_frames);
+ public delegate void AudioBusReadyDelegate(int id, IntPtr data, int bits_per_sample,
+ int sample_rate, int number_of_channels, int number_of_frames);
+ [DllImport(dll_path, CallingConvention = CallingConvention.Cdecl)]
+ private static extern bool RegisterOnAudioBusReady(int peer_connection_id, AudioBusReadyInternalDelegate callback);
+
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ private delegate void LocalSdpReadytoSendInternalDelegate(string s);
+ public delegate void LocalSdpReadytoSendDelegate(int id, string s);
+ [DllImport(dll_path, CallingConvention = CallingConvention.Cdecl)]
+ private static extern bool RegisterOnLocalSdpReadytoSend(int peer_connection_id, LocalSdpReadytoSendInternalDelegate callback);
+
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ private delegate void IceCandiateReadytoSendInternalDelegate(string s);
+ public delegate void IceCandiateReadytoSendDelegate(int id, string s);
+ [DllImport(dll_path, CallingConvention = CallingConvention.Cdecl)]
+ private static extern bool RegisterOnIceCandiateReadytoSend(int peer_connection_id, IceCandiateReadytoSendInternalDelegate callback);
+
+ [DllImport(dll_path, CallingConvention = CallingConvention.Cdecl)]
+ private static extern int ReceivedSdp(int peer_connection_id, string sdp);
+
+ [DllImport(dll_path, CallingConvention = CallingConvention.Cdecl)]
+ private static extern bool ReceivedIceCandidate(int peer_connection_id, string ice_candidate);
+
+ public void CreatePeerConnectionM() {
+ peer_connection_id_ = CreatePeerConnection();
+ RegisterCallbacks();
+ }
+
+ private void RegisterCallbacks() {
+ localDataChannelReadyDelegate_ = new LocalDataChannelReadyInternalDelegate(RaiseLocalDataChannelReady);
+ RegisterOnLocalDataChannelReady(peer_connection_id_, localDataChannelReadyDelegate_);
+
+ dataFromDataChannelReadyDelegate_ = new DataFromDataChannelReadyInternalDelegate(RaiseDataFromDataChannelReady);
+ RegisterOnDataFromDataChannelReady(peer_connection_id_, dataFromDataChannelReadyDelegate_);
+
+ failureMessageDelegate_ = new FailureMessageInternalDelegate(RaiseFailureMessage);
+ RegisterOnFailure(peer_connection_id_, failureMessageDelegate_);
+
+ audioBusReadyDelegate_ = new AudioBusReadyInternalDelegate(RaiseAudioBusReady);
+ RegisterOnAudioBusReady(peer_connection_id_, audioBusReadyDelegate_);
+
+ localSdpReadytoSendDelegate_ = new LocalSdpReadytoSendInternalDelegate(RaiseLocalSdpReadytoSend);
+ RegisterOnLocalSdpReadytoSend(peer_connection_id_, localSdpReadytoSendDelegate_);
+
+ iceCandiateReadytoSendDelegate_ = new IceCandiateReadytoSendInternalDelegate(RaiseIceCandiateReadytoSend);
+ RegisterOnIceCandiateReadytoSend(peer_connection_id_, iceCandiateReadytoSendDelegate_);
+ }
+
+ public void ClosePeerConnectionM() {
+ ClosePeerConnection(peer_connection_id_);
+ peer_connection_id_ = -1;
+ }
+
+ // Return -1 if Peerconnection is not available.
+ public int GetUniqueId() {
+ return peer_connection_id_;
+ }
+
+ public void AddStreamM(bool audio_only) {
+ AddStream(peer_connection_id_, audio_only);
+ }
+
+ public void AddDataChannelM() {
+ AddDataChannel(peer_connection_id_);
+ }
+
+ public void CreateOfferM() {
+ CreateOffer(peer_connection_id_);
+ }
+
+ public void CreateAnswerM() {
+ CreateAnswer(peer_connection_id_);
+ }
+
+ public void SendDataViaDataChannelM(string data) {
+ SendDataViaDataChannel(peer_connection_id_, data);
+ }
+
+ public void SetAudioControl(bool is_mute, bool is_record) {
+ SetAudioControl(peer_connection_id_, is_mute, is_record);
+ }
+
+ public void ReceivedSdpM(string sdp) {
+ peer_connection_id_ = ReceivedSdp(peer_connection_id_, sdp);
+ RegisterCallbacks();
+ }
+
+ public void ReceivedIceCandidateM(string ice_candidate) {
+ ReceivedIceCandidate(peer_connection_id_, ice_candidate);
+ }
+
+ private void RaiseLocalDataChannelReady() {
+ if (OnLocalDataChannelReady != null)
+ OnLocalDataChannelReady(peer_connection_id_);
+ }
+
+ private void RaiseDataFromDataChannelReady(string data) {
+ if (OnDataFromDataChannelReady != null)
+ OnDataFromDataChannelReady(peer_connection_id_, data);
+ }
+
+ private void RaiseFailureMessage(string msg) {
+ if (OnFailureMessage != null)
+ OnFailureMessage(peer_connection_id_, msg);
+ }
+
+ private void RaiseAudioBusReady(IntPtr data, int bits_per_sample,
+ int sample_rate, int number_of_channels, int number_of_frames) {
+ if (OnAudioBusReady != null)
+ OnAudioBusReady(peer_connection_id_, data, bits_per_sample, sample_rate,
+ number_of_channels, number_of_frames);
+ }
+
+ private void RaiseLocalSdpReadytoSend(string msg) {
+ if (OnLocalSdpReadytoSend != null)
+ OnLocalSdpReadytoSend(peer_connection_id_, msg);
+ }
+
+ private void RaiseIceCandiateReadytoSend(string msg) {
+ if (OnIceCandiateReadytoSend != null)
+ OnIceCandiateReadytoSend(peer_connection_id_, msg);
+ }
+
+ private LocalDataChannelReadyInternalDelegate localDataChannelReadyDelegate_ = null;
+ public event LocalDataChannelReadyDelegate OnLocalDataChannelReady;
+
+ private DataFromDataChannelReadyInternalDelegate dataFromDataChannelReadyDelegate_ = null;
+ public event DataFromDataChannelReadyDelegate OnDataFromDataChannelReady;
+
+ private FailureMessageInternalDelegate failureMessageDelegate_ = null;
+ public event FailureMessageDelegate OnFailureMessage;
+
+ private AudioBusReadyInternalDelegate audioBusReadyDelegate_ = null;
+ public event AudioBusReadyDelegate OnAudioBusReady;
+
+ private LocalSdpReadytoSendInternalDelegate localSdpReadytoSendDelegate_ = null;
+ public event LocalSdpReadytoSendDelegate OnLocalSdpReadytoSend;
+
+ private IceCandiateReadytoSendInternalDelegate iceCandiateReadytoSendDelegate_ = null;
+ public event IceCandiateReadytoSendDelegate OnIceCandiateReadytoSend;
+
+ private int peer_connection_id_ = -1;
+ }
+}
« no previous file with comments | « webrtc/examples/unityplugin/OWNERS ('k') | webrtc/examples/unityplugin/simple_peer_connection.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698