Category Archives: General

Docker support for awrtc_signaling

From now on a docker based setup is supported for the signaling server. With this setting up a new signaling server should only take a few minutes including getting a SSL certificate from letsencrypt.

Requirements:

  • basic understanding of the linux command line, ssh and docker
  • a linux server with docker and docker-compose installed (tested with ubuntu 22)
  • a public domain that points to your servers IP address
  • an open TCP port 80 and 443

For more info please check out the awrtc_signaling_docker github repository.

Holo Video Chat is now available at the Unity Asset Store

You can find it here: Holo Video Chat

Holo Video Chat contains a port of the WebRTC Video Chat plugin for UWP x86, x64 and ARM 32 for the HoloLens 2. It includes the same ICall, IMediaNetwork and IVideoInput C# interfaces that are available for the other platforms.

Holo Video Chat is compatible to WebRTC Video Chat on a network level and it can be used to connect the HoloLens 2 to all other platforms including browser based apps developed on top of awrtc_browser.

For more information check out the Holo Video Chat guide!

V0.9858 Release Notes

  • Deprecated Unity 2018 LTS support. Lowest version is now Unity 2019 LTS for Unity examples. The C# API itself should continue to work with older Unity versions
  • Mac: Update to MacOSX SDK 12.3
  • iOS: Update to iOS SDK 15.5
  • Windows: Switched to Visual Studio Clang build pipeline for x86 and x64 builds. This might change some performance characteristics.
  • Android : Update to NDK 23 and SDK API 31
  • Android: Updated AndroidManifest.xml & build pipeline to work with latest Android versions without generating warnings
  • Android: Due to a security issue in older WebRTC versions the play store with show a warning using the older versions. Please update as soon as possible.
  • Native: Updated native WebRTC library to WebRTC104.
  • Native: Native log level is now correctly set if the asset runs in the Unity Editor
  • Native: Fixed flag MAINTAIN_RESOLUTION in UnityCallFactory. Setting this to true should stop automatic downscaling on all native platforms by setting the content hint to Detail
  • Native: The VideoInput API can now force & change resolutions on the fly via the UpdateFrame method. This can be used to dynamically scale down the video to reduce memory and CPU usage. The Width/Height values in MediaConfig are ignored.
  • Native: The VideoInput API should now support a wider range of framerates and allow changing framerates on the fly
  • Native: Added CommonNetworkConfig.PeerConnectionTimeout. This value allows setting a timeout for establishing the direct peer to peer connection
  • WebGL: Fixed log levels being set incorrectly for the JavaScript side backend
  • WebGL: TextureFrame and FrameProcessor have been updated to reduce the risk of memory leaks if a frame is not used e.g. due to Exceptions in user code. IFrame.Dispose must still be called though!
  • WebGL: updated third party dependencies
  • WebGL: Using the webrtc-adapter to help with cross browser compatibility can now be deactivated.
  • WebGL: Errors during video/audio device configuration are now correctly moved from JavaScript to C#
  • UnityCallFactory will now warn and automatically set Application.runInBackground=true if not done so by the app developer

V0.9856 release notes

  • Examples: Signaling & TURN server urls have been updated
  • CallApp: CallApp will now always use secure websockets by default
  • CallApp: The app now uses the new FrameProcessor to convert platform specific formats into Unity Texture2D. Using I420p can reduced CPU overhead by moving some conversion to the GPU.
  • New MediaConfig default values: sending Video and Audio is now off by default
  • Improved logging. ICall/IMediaNetwork and peers now have a global ID to allow associating log messages with individual instances. Log messages are prefixed with “awrtc:”
  • log level can now be set via SetLogLevel/SetNativeLogLevel
  • Fixed misleading warning log & issue with dropping signaling messages that arrive after a call already successfully connects
  • Removed various obsolete classes & method
  • Improved error messages given by UnityCallFactory & websockets
  • Removed .NET 3.5 backwards compatibility
  • Added NetworkConfig.KeepSignalingAlive to keep the signaling connection active
  • KeepSignalingAlive and IsConference=true now allows custom server side code to start & shutdown client side peers by connecting/disconnecting a signaling connection.
  • ConnectionId’s for signaling and MediaNetwork connectionIds are the same now
  • VideoInput: Shared API added for all supported platforms including WebGL
  • VideoInput: Added information for use with HDR
  • Native: CommonNetworkConfig can now be used to create Calls/MediaNetwork instances with custom signaling network / custom websocket timeouts
  • Native: Several old create methods removed from the factory classes. Use the create methods that get NetworkConfig as argument instead.
  • Native: Added codec settings in NativeMediaConfig(experimental) to priotize codecs or change other codec specific settings
  • Native: NativeMediaConfig.AudioAccess (experimental): Can be used to request emiting AudioFrame events with raw PCM for each incoming connection
  • Native: Proxy support added (experimental)
  • WebGL: Added support for Screen Capture API. Enabled via Unity_Media_EnableScreenCapture(“Screen capture”)
  • WebGL: Fixed memory leak if multiple streams are active in parallel that use the “Native” pixel format.
  • WebGL: updated npm dependencies
  • Android x64 support added
  • Android: Removed all WebCamTexture references to ensure Unity does not automatically add the Camera permission if it is removed from the AndroidManifest.xml
  • Android: Fixed a bug causing log message to be truncated
  • Android: added proguard-user.txt with rules to ensure proguard doesn’t strip required java components
  • iOS: Added workaround for hardware decoding issues with resolutions greater than 720p
  • awrtc_borwser (experimental): Added an alternative peer configuration enabled via SINGLE_NEGOTIATION=true. It will allow setting up the peer for video & audio but allows enabling/disabling these without renegotiation
  • ConferenceApp: Added randomly generated usernames to show how ICall.Send can be used to tell different users apart and keep a reference between username & ConnectionId
  • Ice Restart (experimental) NetworkConfig.MaxIceRestart can be set to allow several reconnection attempts before a connection is treated as disconnected.
  • Reconfigure (experimental): ICall/IMediaNetwork.Configure can now be called at run-time to change settings without reconnecting. This requires an active signaling connection (KeepSignalingAlive=true).

V0.9854

The version on the asset store has been updated to V0.9854. If you want to use WebRTC Video Chat with Unity 2021.2 make sure to update the asset to the latest version!

Note from now on the old iOS arm 32 bit devices are no longer supported (iPhone 5C and below) and iOS 12 or higher is required.

See Changelog for details.

iOS 14 issue

Update: This is now part of the latest asset store release and no manual changes are needed.

There is a new issue for iOS 14 under following conditions:

  • Your app is designed for iOS & distributed publicly
  • Your app is sending audio (accessing the microphone)
  • Your app will stop calls during its lifetime but continue running for a longer time

In this case iOS might continue showing the microphone indicator light. This is due to an earlier iOS 13 hotfix to workaround a bug with older Unity versions that could cause a crash or audio to stop working if the audio layer is being shut down. By now the latest Unity 2018 LTS & Unity 2019 LTS version do not have this issue anymore.

You can deactivate the workaround by editing the UnityCallFactory.cs and replace the line

WebRtcCSharp.IosHelper.IosKeepAudioActive(true);

with

WebRtcCSharp.IosHelper.IosKeepAudioActive(false);

All future versions of the asset will contain this as well.

V0.9845

V0.9845 is now available in the asset store containing several bugfixes.

Changelog:

  • Unity 2018.4.22f1
  • WebGL: fix for Chrome 81 issues. Chrome 81 returns an invalid device ID if the user didn’t allow camera access yet. This could result in an overconstrained error
  • WebGL: fixed issue that could cause some users not to disconnect correctly  for conference calls
  • Native: fixed an issue that can cause a connection to fail randomly even on a stable network
  • Android: fixed an issue that could cause a crash randomly if the call is shutting down while the local camera was active
  • Android: fixed an issue that could cause a delay in remote video playback
  • iOS: Improved build pipeline to better support several Unity versions & better error messages
  • Mac: signed & notarised + updated Info.plist for app store releases
  • Cleanup log output
  • Example apps are updated to use EnsureInit to allow them to run in WebGL without changes
  • CallApp: the app will now keep the chat panel open if the call ends
  • CallApp: fixed an issue that could make it difficult to shut down the app if the rejoin option is active & the system is offline

Patch for V0.9844 ready / new V0.9845

This fixes the following issues:

  • Issues with camera access in Chrome 81. Chrome won’t return a list of video devices anymore until the user allows Camera access first. The list of video devices will now be available after the first call to ICall.Configure or IMediaNetwork.Configure and after the user pressed “Allow”
  • Fix for some connections failing even with a stable network
  • Android video delay issues on some devices

Download here Link removed. Please use the latest release from the asset store

Note that this is a nightly build and the mac version isn’t signed / notarised yet. The complete V0.9845 update will be released in the next few days.