LocalVideoTrackOptions.kt
2.6 KB
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package io.livekit.android.room.track
import org.webrtc.RtpParameters
class LocalVideoTrackOptions(
var isScreencast: Boolean = false,
var position: CameraPosition = CameraPosition.FRONT,
var captureParams: VideoCaptureParameter = VideoPreset169.QHD.capture
)
data class VideoCaptureParameter(
val width: Int,
val height: Int,
val maxFps: Int,
)
data class VideoEncoding(
val maxBitrate: Int,
val maxFps: Int,
) {
fun toRtpEncoding(
rid: String? = null,
scaleDownBy: Double = 1.0,
): RtpParameters.Encoding {
return RtpParameters.Encoding(rid, true, scaleDownBy).apply {
numTemporalLayers = 1
maxBitrateBps = maxBitrate
maxFramerate = maxFps
// only set on the full track
if (scaleDownBy == 1.0) {
networkPriority = 3 // high, from priority.h in webrtc
bitratePriority = 4.0
} else {
networkPriority = 1 // low, from priority.h in webrtc
bitratePriority = 1.0
}
}
}
}
enum class VideoCodec(val codecName: String) {
VP8("vp8"),
H264("h264"),
}
enum class CameraPosition {
FRONT,
BACK
}
interface VideoPreset {
val capture: VideoCaptureParameter
val encoding: VideoEncoding
}
/**
* 16:9 Video presets along with suggested bitrates
*/
enum class VideoPreset169(
override val capture: VideoCaptureParameter,
override val encoding: VideoEncoding,
) : VideoPreset {
QVGA(
VideoCaptureParameter(320, 180, 15),
VideoEncoding(125_000, 15),
),
VGA(
VideoCaptureParameter(640, 360, 30),
VideoEncoding(400_000, 30),
),
QHD(
VideoCaptureParameter(960, 540, 30),
VideoEncoding(800_000, 30),
),
HD(
VideoCaptureParameter(1280, 720, 30),
VideoEncoding(2_500_000, 30),
),
FHD(
VideoCaptureParameter(1920, 1080, 30),
VideoEncoding(4_000_000, 30),
)
}
/**
* 4:3 Video presets along with suggested bitrates
*/
enum class VideoPreset43(
override val capture: VideoCaptureParameter,
override val encoding: VideoEncoding,
) : VideoPreset {
QVGA(
VideoCaptureParameter(240, 180, 15),
VideoEncoding(100_000, 15),
),
VGA(
VideoCaptureParameter(480, 360, 30),
VideoEncoding(320_000, 30),
),
QHD(
VideoCaptureParameter(720, 540, 30),
VideoEncoding(640_000, 30),
),
HD(
VideoCaptureParameter(960, 720, 30),
VideoEncoding(2_000_000, 30),
),
FHD(
VideoCaptureParameter(1440, 1080, 30),
VideoEncoding(3_200_000, 30),
)
}