Skip to content

Commit ceba345

Browse files
fix video or audio stream not starting bug, refactor start stop transmission
1 parent 73f20c8 commit ceba345

File tree

4 files changed

+71
-19
lines changed

4 files changed

+71
-19
lines changed

Assets/SimpleWebRTC/Runtime/Scenes/WebRTC-SingleClient-STUNConnection.unity

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2744,6 +2744,10 @@ PrefabInstance:
27442744
propertyPath: IsVideoAudioSender
27452745
value: 1
27462746
objectReference: {fileID: 0}
2747+
- target: {fileID: 2360244695844763642, guid: 2884c322692e8cb4fa7aeed7d35cb11a, type: 3}
2748+
propertyPath: IsVideoAudioReceiver
2749+
value: 1
2750+
objectReference: {fileID: 0}
27472751
- target: {fileID: 2360244695844763642, guid: 2884c322692e8cb4fa7aeed7d35cb11a, type: 3}
27482752
propertyPath: WebSocketConnectionChanged.m_PersistentCalls.m_Calls.Array.size
27492753
value: 0
@@ -2756,6 +2760,10 @@ PrefabInstance:
27562760
propertyPath: WebSocketConnectionChanged.m_PersistentCalls.m_Calls.Array.data[1].m_CallState
27572761
value: 2
27582762
objectReference: {fileID: 0}
2763+
- target: {fileID: 4742940825921038815, guid: 2884c322692e8cb4fa7aeed7d35cb11a, type: 3}
2764+
propertyPath: m_Enabled
2765+
value: 1
2766+
objectReference: {fileID: 0}
27592767
- target: {fileID: 5412547114386104584, guid: 2884c322692e8cb4fa7aeed7d35cb11a, type: 3}
27602768
propertyPath: m_Name
27612769
value: Client-STUNConnection

Assets/SimpleWebRTC/Runtime/Scripts/Connections/WebRTCConnection.cs

Lines changed: 59 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
using NativeWebSocket;
2+
using System.Collections;
3+
using Unity.WebRTC;
24
using UnityEngine;
35
using UnityEngine.Events;
46
using UnityEngine.UI;
@@ -56,6 +58,8 @@ public class WebRTCConnection : MonoBehaviour {
5658
public UnityEvent AudioTransmissionReceived;
5759

5860
private WebRTCManager webRTCManager;
61+
private VideoStreamTrack videoStreamTrack;
62+
private AudioStreamTrack audioStreamTrack;
5963

6064
private void Awake() {
6165
SimpleWebRTCLogger.EnableLogging = ShowLogs;
@@ -117,28 +121,22 @@ private void Update() {
117121

118122
if (StartStopVideoTransmission && !IsVideoTransmissionActive && IsVideoAudioSender) {
119123
IsVideoTransmissionActive = !IsVideoTransmissionActive;
120-
StreamingCamera.gameObject.SetActive(IsVideoTransmissionActive);
121-
webRTCManager.AddVideoTrack(StreamingCamera, VideoResolution.x, VideoResolution.y);
124+
StartVideoTransmission();
122125
}
123126

124127
if (!StartStopVideoTransmission && IsVideoTransmissionActive) {
125128
IsVideoTransmissionActive = !IsVideoTransmissionActive;
126-
StreamingCamera.gameObject.SetActive(IsVideoTransmissionActive);
127-
webRTCManager.RemoveVideoTrack();
129+
StopVideoTransmission();
128130
}
129131

130132
if (StartStopAudioTransmission && !IsAudioTransmissionActive && IsVideoAudioSender) {
131133
IsAudioTransmissionActive = !IsAudioTransmissionActive;
132-
StreamingAudioSource.gameObject.SetActive(IsAudioTransmissionActive);
133-
StreamingAudioSource.Play();
134-
webRTCManager.AddAudioTrack(StreamingAudioSource);
134+
StartAudioTransmission();
135135
}
136136

137137
if (!StartStopAudioTransmission && IsAudioTransmissionActive) {
138138
IsAudioTransmissionActive = !IsAudioTransmissionActive;
139-
StreamingAudioSource.Stop();
140-
StreamingAudioSource.gameObject.SetActive(IsAudioTransmissionActive);
141-
webRTCManager.RemoveAudioTrack();
139+
StopAudioTransmission();
142140
}
143141
}
144142

@@ -254,29 +252,78 @@ public void SendDataChannelMessageToPeer(string targetPeerId, string message) {
254252
}
255253

256254
public void StartVideoTransmission() {
255+
StopCoroutine(StartVideoTransmissionAsync());
256+
StartCoroutine(StartVideoTransmissionAsync());
257+
}
258+
259+
private IEnumerator StartVideoTransmissionAsync() {
260+
261+
StreamingCamera.gameObject.SetActive(true);
262+
263+
// camera activation delay?
264+
yield return new WaitForSeconds(1f);
265+
257266
if (IsVideoTransmissionActive) {
258267
// for restarting without stopping
259268
webRTCManager.RemoveVideoTrack();
260-
webRTCManager.AddVideoTrack(StreamingCamera, VideoResolution.x, VideoResolution.y);
261269
}
270+
videoStreamTrack = StreamingCamera.CaptureStreamTrack(VideoResolution.x, VideoResolution.y);
271+
webRTCManager.AddVideoTrack(videoStreamTrack);
272+
262273
StartStopVideoTransmission = true;
274+
IsVideoTransmissionActive = true;
263275
}
264276

265277
public void StopVideoTransmission() {
278+
279+
StopCoroutine(StartVideoTransmissionAsync());
280+
281+
StreamingCamera.gameObject.SetActive(false);
282+
283+
webRTCManager.RemoveVideoTrack();
284+
266285
StartStopVideoTransmission = false;
286+
IsVideoTransmissionActive = false;
267287
}
268288

269289
public void StartAudioTransmission() {
290+
StopCoroutine(StartAudioTransmissionAsync());
291+
StartCoroutine(StartAudioTransmissionAsync());
292+
}
293+
294+
private IEnumerator StartAudioTransmissionAsync() {
295+
296+
StopCoroutine(StartAudioTransmissionAsync());
297+
298+
StreamingAudioSource.gameObject.SetActive(IsAudioTransmissionActive);
299+
300+
// audio activation delay?
301+
yield return new WaitForSeconds(1f);
302+
303+
StreamingAudioSource.Play();
304+
270305
if (IsAudioTransmissionActive) {
271306
// for restarting without stopping
272307
webRTCManager.RemoveAudioTrack();
273-
webRTCManager.AddAudioTrack(StreamingAudioSource);
274308
}
309+
audioStreamTrack = new AudioStreamTrack(StreamingAudioSource) {
310+
Loopback = true
311+
};
312+
webRTCManager.AddAudioTrack(audioStreamTrack);
313+
275314
StartStopAudioTransmission = true;
315+
IsAudioTransmissionActive = true;
276316
}
277317

278318
public void StopAudioTransmission() {
319+
320+
StreamingAudioSource.Stop();
321+
StreamingAudioSource.gameObject.SetActive(IsAudioTransmissionActive);
322+
323+
webRTCManager.RemoveAudioTrack();
324+
279325
StartStopAudioTransmission = false;
326+
IsAudioTransmissionActive = false;
280327
}
281328
}
282329
}

Assets/SimpleWebRTC/Runtime/Scripts/Connections/WebRTCManager.cs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -459,8 +459,7 @@ public void SendViaDataChannel(string targetPeerId, string message) {
459459
senderDataChannels[targetPeerId]?.Send(message);
460460
}
461461

462-
public void AddVideoTrack(Camera streamingCamera, int width, int height) {
463-
var videoStreamTrack = streamingCamera.CaptureStreamTrack(width, height);
462+
public void AddVideoTrack(VideoStreamTrack videoStreamTrack) {
464463

465464
// optional video stream preview
466465
if (connectionGameObject.OptionalPreviewRawImage != null) {
@@ -486,10 +485,8 @@ public void RemoveVideoTrack() {
486485
}
487486
}
488487

489-
public void AddAudioTrack(AudioSource streamingAudioSource) {
490-
var audioStreamTrack = new AudioStreamTrack(streamingAudioSource) {
491-
Loopback = true
492-
};
488+
public void AddAudioTrack(AudioStreamTrack audioStreamTrack) {
489+
493490
foreach (var peerConnection in peerConnections) {
494491
audioTrackSenders.Add(peerConnection.Key, peerConnection.Value.AddTrack(audioStreamTrack));
495492
}

Assets/SimpleWebRTC/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "com.firedragongamestudio.simplewebrtc",
33
"displayName": "SimpleWebRTC",
4-
"version": "1.0.7",
4+
"version": "1.0.8",
55
"unity": "2022.3",
66
"description": "Unity-based WebRTC wrapper that facilitates peer-to-peer audio, video, and data communication over WebRTC.",
77
"dependencies": {

0 commit comments

Comments
 (0)