Skip to content

Instantly share code, notes, and snippets.

@recursivecodes
Created September 6, 2023 17:14
Show Gist options
  • Save recursivecodes/f42d9bf2f0d9fa17391cd7c37ea74a64 to your computer and use it in GitHub Desktop.
Save recursivecodes/f42d9bf2f0d9fa17391cd7c37ea74a64 to your computer and use it in GitHub Desktop.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Unity.WebRTC;
using UnityEngine.Networking;
public class WebRTCPublish : MonoBehaviour{
RTCPeerConnection peerConnection;
MediaStreamTrack track;
Camera cam;
void Start() {
StartCoroutine(WebRTC.Update());
peerConnection = new RTCPeerConnection();
peerConnection.OnIceConnectionChange = state => { Debug.Log(state); };
cam = GetComponent<Camera>();
track = cam.CaptureStreamTrack(1280, 720);
peerConnection.AddTrack(track);
StartCoroutine(DoWHIP());
}
IEnumerator DoWHIP() {
peerConnection.AddTransceiver(TrackKind.Audio);
var offer = peerConnection.CreateOffer();
yield return offer;
var offerDesc = offer.Desc;
var opLocal = peerConnection.SetLocalDescription(ref offerDesc);
yield return opLocal;
var filteredSdp = "";
foreach (string sdpLine in offer.Desc.sdp.Split("\r\n")) {
if (!sdpLine.StartsWith("a=extmap")) {
filteredSdp += sdpLine + "\r\n";
}
}
using (UnityWebRequest www = new UnityWebRequest("https://g.webrtc.live-video.net:4443/v2/offer")) {
www.uploadHandler = new UploadHandlerRaw(System.Text.Encoding.ASCII.GetBytes(filteredSdp));
www.downloadHandler = new DownloadHandlerBuffer();
www.method = UnityWebRequest.kHttpVerbPOST;
www.SetRequestHeader("Content-Type", "application/sdp");
www.SetRequestHeader("Authorization", "Bearer [Twitch Stream Key]");
yield return www.SendWebRequest();
if (www.result != UnityWebRequest.Result.Success) {
Debug.Log(www.error);
}
else {
var answer = new RTCSessionDescription { type = RTCSdpType.Answer, sdp = www.downloadHandler.text };
var opRemote = peerConnection.SetRemoteDescription(ref answer);
yield return opRemote;
if (opRemote.IsError) {
Debug.Log(opRemote.Error);
}
}
}
}
void OnDestroy() {
peerConnection.Close();
peerConnection.Dispose();
track.Dispose();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment