-
Notifications
You must be signed in to change notification settings - Fork 32
/
index.ts
56 lines (46 loc) · 1.46 KB
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import debug from "debug";
import { RtcpHeader } from "../header";
import { RtcpPacketConverter } from "../rtcp";
import { FullIntraRequest } from "./fullIntraRequest";
import { PictureLossIndication } from "./pictureLossIndication";
import { ReceiverEstimatedMaxBitrate } from "./remb";
const log = debug("werift/rtp/rtcp/psfb/index");
type Feedback =
| FullIntraRequest
| PictureLossIndication
| ReceiverEstimatedMaxBitrate;
export class RtcpPayloadSpecificFeedback {
static type = 206;
type = RtcpPayloadSpecificFeedback.type;
feedback!: Feedback;
constructor(props: Partial<RtcpPayloadSpecificFeedback> = {}) {
Object.assign(this, props);
}
serialize() {
const payload = this.feedback.serialize();
return RtcpPacketConverter.serialize(
this.type,
this.feedback.count,
payload,
this.feedback.length
);
}
static deSerialize(data: Buffer, header: RtcpHeader) {
let feedback: Feedback | undefined;
switch (header.count) {
case FullIntraRequest.count:
feedback = FullIntraRequest.deSerialize(data);
break;
case PictureLossIndication.count:
feedback = PictureLossIndication.deSerialize(data);
break;
case ReceiverEstimatedMaxBitrate.count:
feedback = ReceiverEstimatedMaxBitrate.deSerialize(data);
break;
default:
log("unknown psfb packet", header.count);
break;
}
return new RtcpPayloadSpecificFeedback({ feedback });
}
}