DT.Xamarin.AntMedia.WebRTC.Forms 1.2.2

Xamarin SDK for bindings to the native iOS and Android antmedia.io WebRTC SDK.

Install-Package DT.Xamarin.AntMedia.WebRTC.Forms -Version 1.2.2
dotnet add package DT.Xamarin.AntMedia.WebRTC.Forms --version 1.2.2
<PackageReference Include="DT.Xamarin.AntMedia.WebRTC.Forms" Version="1.2.2" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add DT.Xamarin.AntMedia.WebRTC.Forms --version 1.2.2
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: DT.Xamarin.AntMedia.WebRTC.Forms, 1.2.2"
For F# scripts that support #r syntax, copy this into the source code to reference the package.
CRITICAL thing about SDK It Does Not Support Any Simulator build for now

Xamarin Forms WebRTC Sample app

Prerequisites

you need up running Ant Media Server, detailed explanation here

How to use nuget

  • to project Core - add nuget package DT.Xamarin.AntMedia.WebRTC.Forms NuGet Package

  • add AntManagerIos.Init(); to AppDelegate.cs

      public override bool FinishedLaunching(UIApplication app, NSDictionary options)
          {
              AntManagerIos.Init();
              global::Xamarin.Forms.Forms.Init();
              LoadApplication(new App());
              return base.FinishedLaunching(app, options);
          }
    ...
    
  • Configure Android Intent for Nuget
    Open Android/MainActivity.cs Add code to OnCreate

using DT.Xamarin.AntMedia.WebRTC.Forms.Android;

       protected override void OnCreate(Bundle savedInstanceState)
        {
	...
            base.OnCreate(savedInstanceState);
 //Begin Inserted
            AntManagerDroid.Init(Intent);
//End Inserted

            global::Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
            LoadApplication(new App());
        }
  • add android and ios permissions usage

Modify Properties/AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.dreamteammobile.antmedia.dt_antmedia_tutorial_forms">
    <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />
    <application android:label="DT.AntMedia.Tutorial.Forms.Android" android:theme="@style/MainTheme"></application>
    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />
    <uses-feature android:glEsVersion="0x00020000" android:required="true" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
</manifest>

add Camera and Microphone Permissions usage description to Info.plist

	<key>NSCameraUsageDescription</key>
	<string>Camera access is required for video chat</string>
	<key>NSMicrophoneUsageDescription</key>
	<string>Microphone access is required for video chat</string>
  • add reference to framework on page or some view in Core project

    xmlns:ant="clr-namespace:DT.Xamarin.AntMedia.WebRTC.Forms;assembly=DT.Xamarin.AntMedia.WebRTC.Forms"
    

    and use special control AntWebRTCView

    <?xml version="1.0" encoding="utf-8"?>
    <ContentPage
      xmlns="http://xamarin.com/schemas/2014/forms"
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
      xmlns:ant="clr-namespace:DT.Xamarin.AntMedia.WebRTC.Forms;assembly=DT.Xamarin.AntMedia.WebRTC.Forms"
      x:Class="DT.AntMedia.Tutorial.Forms.MainPage">
      <Grid>
          <Grid.RowDefinitions>
              <RowDefinition/>
              <RowDefinition/>
          </Grid.RowDefinitions>
          <ant:AntWebRTCView
              x:Name="AntFrame1"
              Grid.Row="0"
              Server="ws://drmtm.us:5080/WebRTCAppEE/websocket"
              RenderingMode="ScaleAspectFit"
              WebRTCMode="Publish"
              Camera="Front"
              StreamID="stream1"
              ShowDebugLogs="True"
              InitMode="InitAndStartOnViewRender"
              />
    
          <ant:AntWebRTCView
              x:Name="AntFrame2"
              Grid.Row="1"
              Server="ws://drmtm.us:5080/WebRTCAppEE/websocket"
              RenderingMode="ScaleAspectFit"
              WebRTCMode="Play"
              StreamID="stream2"
              ShowDebugLogs="True"
              InitMode="InitAndStartOnViewRender"
              />
      </Grid>
    </ContentPage>
    

    You done! run and check

    for more control on view, change InitMode property

    <ant:AntWebRTCView
              x:Name="AntFrame"
              Grid.Column="0"
              Grid.ColumnSpan="3"
              Grid.Row="1"
              RenderingMode="ScaleAspectFit"
              WebRTCMode="Publish"
              Camera="Front"
              ShowDebugLogs="True"
              InitMode="InitOnViewRender"
              PlayStarted="AntFrame_Refresh"
              PlayFinished="AntFrame_Refresh"
              PublishStarted="AntFrame_Refresh"
              PublishFinished="AntFrame_Refresh"
              Error="AntFrame_Error"
              />
    

    set server address and token(token can be empty string)

          AntManager.Current.DefaultServer = InitialData.SERVER_URL;
          AntManager.Current.DefaultToken = InitialData.Token;
    

    to Start or Stop stream call where you need

          void SomeActionButton_Clicked(System.Object sender, System.EventArgs e)
          {
              if (AntFrame.IsPublishing || AntFrame.IsPlaying)
              {
                  AntFrame.Stop();
                  DelayedRestart();//if publishing that will make rendering from camera to layout as preview
              }
              else
              {
                  AntFrame.Start();
              }
          }
    
  • then you can use our Documentation for detailed description on controls

  • or simple Tutorial

What available in our sample

Simple copy of AntMedia sample app with all basic video call functions:

  • Start/Stop Publishing WebRTC stream
  • Start/Stop Playing WebRTC stream
  • Init to preview from camera before start publishing
  • Mute audio
  • Mute video
  • Switch camera

How to Run Sample

  1. Start from DT.Xamarin.AntMedia.Samples.sln

  2. replace constant to your server addres in DT.Configuration/InitialData.cs

public const string SERVER_ADDRESS = "domain-name.com:5080";
  1. Set Froms.Android or Forms.iOS project as Startup Project, click Run button in Visual Studio.
CRITICAL thing about SDK It Does Not Support Any Simulator build for now

Xamarin Forms WebRTC Sample app

Prerequisites

you need up running Ant Media Server, detailed explanation here

How to use nuget

  • to project Core - add nuget package DT.Xamarin.AntMedia.WebRTC.Forms NuGet Package

  • add AntManagerIos.Init(); to AppDelegate.cs

      public override bool FinishedLaunching(UIApplication app, NSDictionary options)
          {
              AntManagerIos.Init();
              global::Xamarin.Forms.Forms.Init();
              LoadApplication(new App());
              return base.FinishedLaunching(app, options);
          }
    ...
    
  • Configure Android Intent for Nuget
    Open Android/MainActivity.cs Add code to OnCreate

using DT.Xamarin.AntMedia.WebRTC.Forms.Android;

       protected override void OnCreate(Bundle savedInstanceState)
        {
	...
            base.OnCreate(savedInstanceState);
 //Begin Inserted
            AntManagerDroid.Init(Intent);
//End Inserted

            global::Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
            LoadApplication(new App());
        }
  • add android and ios permissions usage

Modify Properties/AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.dreamteammobile.antmedia.dt_antmedia_tutorial_forms">
    <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />
    <application android:label="DT.AntMedia.Tutorial.Forms.Android" android:theme="@style/MainTheme"></application>
    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />
    <uses-feature android:glEsVersion="0x00020000" android:required="true" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
</manifest>

add Camera and Microphone Permissions usage description to Info.plist

	<key>NSCameraUsageDescription</key>
	<string>Camera access is required for video chat</string>
	<key>NSMicrophoneUsageDescription</key>
	<string>Microphone access is required for video chat</string>
  • add reference to framework on page or some view in Core project

    xmlns:ant="clr-namespace:DT.Xamarin.AntMedia.WebRTC.Forms;assembly=DT.Xamarin.AntMedia.WebRTC.Forms"
    

    and use special control AntWebRTCView

    <?xml version="1.0" encoding="utf-8"?>
    <ContentPage
      xmlns="http://xamarin.com/schemas/2014/forms"
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
      xmlns:ant="clr-namespace:DT.Xamarin.AntMedia.WebRTC.Forms;assembly=DT.Xamarin.AntMedia.WebRTC.Forms"
      x:Class="DT.AntMedia.Tutorial.Forms.MainPage">
      <Grid>
          <Grid.RowDefinitions>
              <RowDefinition/>
              <RowDefinition/>
          </Grid.RowDefinitions>
          <ant:AntWebRTCView
              x:Name="AntFrame1"
              Grid.Row="0"
              Server="ws://drmtm.us:5080/WebRTCAppEE/websocket"
              RenderingMode="ScaleAspectFit"
              WebRTCMode="Publish"
              Camera="Front"
              StreamID="stream1"
              ShowDebugLogs="True"
              InitMode="InitAndStartOnViewRender"
              />
    
          <ant:AntWebRTCView
              x:Name="AntFrame2"
              Grid.Row="1"
              Server="ws://drmtm.us:5080/WebRTCAppEE/websocket"
              RenderingMode="ScaleAspectFit"
              WebRTCMode="Play"
              StreamID="stream2"
              ShowDebugLogs="True"
              InitMode="InitAndStartOnViewRender"
              />
      </Grid>
    </ContentPage>
    

    You done! run and check

    for more control on view, change InitMode property

    <ant:AntWebRTCView
              x:Name="AntFrame"
              Grid.Column="0"
              Grid.ColumnSpan="3"
              Grid.Row="1"
              RenderingMode="ScaleAspectFit"
              WebRTCMode="Publish"
              Camera="Front"
              ShowDebugLogs="True"
              InitMode="InitOnViewRender"
              PlayStarted="AntFrame_Refresh"
              PlayFinished="AntFrame_Refresh"
              PublishStarted="AntFrame_Refresh"
              PublishFinished="AntFrame_Refresh"
              Error="AntFrame_Error"
              />
    

    set server address and token(token can be empty string)

          AntManager.Current.DefaultServer = InitialData.SERVER_URL;
          AntManager.Current.DefaultToken = InitialData.Token;
    

    to Start or Stop stream call where you need

          void SomeActionButton_Clicked(System.Object sender, System.EventArgs e)
          {
              if (AntFrame.IsPublishing || AntFrame.IsPlaying)
              {
                  AntFrame.Stop();
                  DelayedRestart();//if publishing that will make rendering from camera to layout as preview
              }
              else
              {
                  AntFrame.Start();
              }
          }
    
  • then you can use our Documentation for detailed description on controls

  • or simple Tutorial

What available in our sample

Simple copy of AntMedia sample app with all basic video call functions:

  • Start/Stop Publishing WebRTC stream
  • Start/Stop Playing WebRTC stream
  • Init to preview from camera before start publishing
  • Mute audio
  • Mute video
  • Switch camera

How to Run Sample

  1. Start from DT.Xamarin.AntMedia.Samples.sln

  2. replace constant to your server addres in DT.Configuration/InitialData.cs

public const string SERVER_ADDRESS = "domain-name.com:5080";
  1. Set Froms.Android or Forms.iOS project as Startup Project, click Run button in Visual Studio.

Release Notes

Custom Forms SDK based on native bindings of Ant Media Free WebRTC SDKs made by DreamTeam-Mobile

for Documentation, how to use this SDK, Tutorial and Xamarin samples go to https://github.com/DreamTeamMobile/Xamarin.AntMedia.Samples

native versions:

WebRTCAndroidFramework_29_July_2020-sf0vyq
WebRTCiOSReferenceProject_10_Aug_2020-o0odv5

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version History

Version Downloads Last updated
1.2.2 94 1/18/2021
1.2.1 34 1/18/2021
1.1.0 99 12/3/2020
1.0.9 64 12/3/2020
1.0.8 79 12/3/2020
1.0.7 38 12/3/2020
1.0.6 179 11/8/2020
1.0.3 97 11/3/2020
1.0.2 97 11/3/2020
1.0.1 109 11/3/2020
1.0.0 137 11/3/2020
0.9.9 165 10/30/2020
0.9.8 100 10/30/2020
0.9.7 133 10/21/2020
0.9.6 137 10/21/2020
0.9.5 82 10/20/2020
0.9.4 116 10/20/2020
0.9.3 131 10/20/2020
0.9.2 130 10/19/2020
0.9.1 111 10/19/2020
0.9.0 121 10/19/2020