Skip to content

Commit 745990d

Browse files
committed
Add mediaStreamSet event
1 parent 2985c6b commit 745990d

File tree

2 files changed

+29
-4
lines changed

2 files changed

+29
-4
lines changed

README.md

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -584,12 +584,12 @@ callSession.on("disposed", () => {
584584

585585
### CallSession Events
586586

587-
### `answered` event
587+
#### `answered` event
588588

589589
- Triggered when the call is answered.
590590
- Note: There is a [known issue](#known-issue) affecting outbound calls.
591591

592-
### `disposed` event
592+
#### `disposed` event
593593

594594
- For answered calls, this event is triggered when either you or the remote peer
595595
hangs up.
@@ -598,7 +598,7 @@ callSession.on("disposed", () => {
598598
- For outbound calls, if call failed (for example, invalid callee number), it
599599
will be disposed automatically. So, this event will be triggered.
600600

601-
### `failed` event
601+
#### `failed` event
602602

603603
- This is for outbound call only. It means the outbound call was not successful
604604
- It may be caused by invalid target number
@@ -643,6 +643,22 @@ if (callSession.state === "failed" || callSession.state === "disposed") {
643643
Failed call sessions will be disposed automatically, so the state will become
644644
"disposed". "failed" is just a temporary state.
645645

646+
#### `mediaStreamSet` event
647+
648+
This is triggered when `callSession.mediaStream` is set. An interesting use case
649+
is to apply noise reduction to this object.
650+
651+
```ts
652+
callSession.on("mediaStreamSet", (mediaStream) => {
653+
console.log("a new mediaStream object is set");
654+
});
655+
```
656+
657+
When you make an outbound call: `const callSession = await webPhone.call(...)`,
658+
at the time that you get the `callSession` object, `callSession.mediaStream` is
659+
already set. It would be too late to subscribe for `mediaStreamSet` event. In
660+
such case you can access `callSession.mediaStream` directly.
661+
646662
#### Where is the `ringing` event?
647663

648664
`ringing` event is implicit.

src/call-session/index.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class CallSession extends EventEmitter {
3333
public localPeer: string;
3434
public remotePeer: string;
3535
public rtcPeerConnection: RTCPeerConnection;
36-
public mediaStream?: MediaStream;
36+
public _mediaStream?: MediaStream;
3737
public audioElement: HTMLAudioElement;
3838
public state: "init" | "ringing" | "answered" | "disposed" | "failed" =
3939
"init";
@@ -49,6 +49,14 @@ class CallSession extends EventEmitter {
4949
this.webPhone = webPhone;
5050
}
5151

52+
public get mediaStream(): MediaStream | undefined {
53+
return this._mediaStream;
54+
}
55+
public set mediaStream(stream: MediaStream) {
56+
this._mediaStream = stream;
57+
this.emit("mediaStreamSet", stream);
58+
}
59+
5260
// for inbound call, this.sipMessage?.headers["Call-Id"] will be the call id
5361
// for outbound call, this._callId will be the call id. Once the call session is out of "init" state, this.sipMessage will be set
5462
private _callId = uuid();
@@ -228,6 +236,7 @@ class CallSession extends EventEmitter {
228236
// note: we can't dispose the call session here
229237
// otherwise the caller will not be able to talk to the flip target
230238
// after the flip target answers the call, manually dispose the call session
239+
// todo: review this part
231240
return flipResult;
232241
}
233242

0 commit comments

Comments
 (0)