@@ -18,7 +18,13 @@ public class RTMPStreaming: ObservableObject {
18
18
19
19
private var rtmpStreams : [ RTMPStream ] = [ ]
20
20
private var rtmpConnections : [ RTMPConnection ] = [ ]
21
+ private var lastSampleBufferTimestamp : CMTime ?
21
22
23
+ // Properties for frame rate logging
24
+ private var frameCount : Int = 0
25
+ private var startTime : Date ?
26
+ private let logInterval : TimeInterval = 5.0 // Log every 5 seconds
27
+
22
28
public init ( renderSettings: RenderSettings ) {
23
29
self . renderSettings = renderSettings
24
30
setupRTMPStreams ( )
@@ -42,11 +48,34 @@ public class RTMPStreaming: ObservableObject {
42
48
}
43
49
44
50
private func configureRTMPStream( _ rtmpStream: RTMPStream , with streamSettings: LivestreamSettings ) {
45
- rtmpStream. videoSettings. videoSize = CGSize ( width: CGFloat ( renderSettings. width) , height: CGFloat ( renderSettings. height) )
46
- rtmpStream. videoSettings. profileLevel = streamSettings. profileLevel ?? kVTProfileLevel_H264_Main_AutoLevel as String
47
- rtmpStream. videoSettings. bitRate = streamSettings. bitRate ?? renderSettings. getDefaultBitrate ( )
48
- rtmpStream. videoSettings. maxKeyFrameIntervalDuration = 2
49
- rtmpStream. videoSettings. scalingMode = . trim
51
+ // rtmpStream.videoSettings.videoSize = CGSize(width: CGFloat(renderSettings.width), height: CGFloat(renderSettings.height))
52
+ // rtmpStream.videoSettings.profileLevel = streamSettings.profileLevel ?? kVTProfileLevel_H264_Main_AutoLevel as String
53
+ // rtmpStream.videoSettings.bitRate = streamSettings.bitRate ?? renderSettings.getDefaultBitrate()
54
+ // rtmpStream.videoSettings.profileLevel = kVTProfileLevel_H264_Baseline_AutoLevel as String
55
+ // rtmpStream.videoSettings.bitRate = 1200 * 1000
56
+ // rtmpStream.videoSettings.maxKeyFrameIntervalDuration = 2
57
+ // rtmpStream.videoSettings.scalingMode = .trim
58
+
59
+ let bitrate = renderSettings. getDefaultBitrate ( )
60
+ rtmpStream. frameRate = Double ( renderSettings. fps)
61
+ // stream.videoSettings.bitRateMode = .constant
62
+ // rtmpStream.sessionPreset = .hd1920x1080
63
+ rtmpStream. sessionPreset = . hd1920x1080
64
+ // let bitrate = 6800 * 1000 // 6800 Kbps in bps
65
+
66
+ rtmpStream. videoSettings = VideoCodecSettings (
67
+ videoSize: CGSize ( width: renderSettings. width, height: renderSettings. height) ,
68
+ bitRate: bitrate,
69
+ // renderSettings.getDefaultBitrate(),
70
+ // profileLevel: kVTProfileLevel_H264_Baseline_5_2 as String,
71
+ // profileLevel: kVTProfileLevel_H264_Baseline_AutoLevel as String,
72
+ profileLevel: kVTProfileLevel_H264_Main_AutoLevel as String ,
73
+ scalingMode: . trim,
74
+ bitRateMode: . constant,
75
+ maxKeyFrameIntervalDuration: 2
76
+ )
77
+
78
+ // rtmpStream.bitrateStrategy = VideoAdaptiveNetBitRateStrategy(mamimumVideoBitrate: VideoCodecSettings.default.bitRate)
50
79
}
51
80
52
81
public func startStreaming( ) {
@@ -60,6 +89,7 @@ public class RTMPStreaming: ObservableObject {
60
89
}
61
90
62
91
isStreaming = true
92
+ // resetFrameRateLogging()
63
93
}
64
94
65
95
public func stopStreaming( ) {
@@ -77,17 +107,39 @@ public class RTMPStreaming: ObservableObject {
77
107
78
108
public func appendSampleBuffer( _ sampleBuffer: CMSampleBuffer ) {
79
109
guard isStreaming else { return }
80
-
110
+
81
111
for rtmpStream in rtmpStreams {
82
112
rtmpStream. append ( sampleBuffer)
83
113
}
114
+
115
+ // logFrameRate()
84
116
}
85
117
86
118
@objc private func rtmpStatusHandler( _ notification: Notification ) {
87
119
// Handle RTMP status
120
+ print ( " RTMP STATUS " , notification)
88
121
}
89
122
90
123
@objc private func rtmpErrorHandler( _ notification: Notification ) {
124
+ print ( " RTMP ERROR " , notification)
91
125
// Handle RTMP error
92
126
}
127
+
128
+ private func resetFrameRateLogging( ) {
129
+ frameCount = 0
130
+ startTime = Date ( )
131
+ }
132
+
133
+ private func logFrameRate( ) {
134
+ frameCount += 1
135
+
136
+ guard let startTime = startTime else { return }
137
+
138
+ let elapsedTime = Date ( ) . timeIntervalSince ( startTime)
139
+ if elapsedTime >= logInterval {
140
+ let frameRate = Double ( frameCount) / elapsedTime
141
+ print ( " Current frame rate: \( frameRate) fps " )
142
+ resetFrameRateLogging ( )
143
+ }
144
+ }
93
145
}
0 commit comments