Skip to content

Commit 8829e89

Browse files
committed
RTSPFormatPCM: format() correction
1 parent 556e85a commit 8829e89

File tree

1 file changed

+17
-36
lines changed

1 file changed

+17
-36
lines changed

src/AudioTools/Communication/RTSP/RTSPFormat.h

Lines changed: 17 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -138,16 +138,16 @@ class RTSPFormatPCM : public RTSPFormat {
138138
* @return const char*
139139
*/
140140
const char *format(char *buffer, int len) override {
141-
snprintf(buffer, len,
142-
"s=Microphone\r\n" // Stream Name
143-
"c=IN IP4 0.0.0.0\r\n" // Connection Information
144-
"t=0 0\r\n" // start / stop - 0 -> unbounded and permanent session
145-
"m=audio 0 RTP/AVP %d\r\n" // UDP sessions with format 10 or 11
146-
"a=rtpmap:%s\r\n"
147-
"a=rate:%i\r\n", // provide sample rate
148-
rtpPayloadType(), payloadFormat(), sampleRate());
149-
LOGI("ftsp format: %s", buffer);
150-
return (const char *)buffer;
141+
int pt = rtpPayloadType();
142+
snprintf(buffer, len,
143+
"s=Microphone\r\n"
144+
"c=IN IP4 0.0.0.0\r\n"
145+
"t=0 0\r\n"
146+
"m=audio 0 RTP/AVP %d\r\n"
147+
"a=rtpmap:%d L16/%d/%d\r\n",
148+
pt, pt, sampleRate(), channels());
149+
LOGI("ftsp format: %s", buffer);
150+
return (const char *)buffer;
151151
}
152152

153153
/**
@@ -170,19 +170,12 @@ class RTSPFormatPCM : public RTSPFormat {
170170
AudioInfo defaultConfig() override { return AudioInfo(16000, 1, 16); }
171171

172172
int rtpPayloadType() override {
173-
int result = 0;
174-
switch (channels()) {
175-
case 1:
176-
result = 11;
177-
break;
178-
case 2:
179-
result = 10;
180-
break;
181-
default:
182-
LOGE("unsupported audio type");
183-
break;
173+
// Static assignments per RFC 3551 only valid for 44100Hz mono/stereo
174+
if (cfg.sample_rate == 44100) {
175+
if (channels() == 1) return 11; // L16 mono 44.1kHz
176+
if (channels() == 2) return 10; // L16 stereo 44.1kHz
184177
}
185-
return result;
178+
return 96; // dynamic otherwise
186179
}
187180

188181
protected:
@@ -210,20 +203,8 @@ class RTSPFormatPCM : public RTSPFormat {
210203
// see https://en.wikipedia.org/wiki/RTP_payload_formats
211204
// 11 L16/%i/%i
212205
const char *payloadFormat() {
213-
switch (channels()) {
214-
case 1:
215-
snprintf(payload_fromat, 30, "%d L16/%i/%i", rtpPayloadType(),
216-
sampleRate(), channels());
217-
break;
218-
case 2:
219-
snprintf(payload_fromat, 30, "%d L16/%i/%i", rtpPayloadType(),
220-
sampleRate(), channels());
221-
break;
222-
default:
223-
LOGE("unsupported audio type");
224-
break;
225-
}
226-
return payload_fromat;
206+
snprintf(payload_fromat, sizeof(payload_fromat), "%d L16/%i/%i", rtpPayloadType(), sampleRate(), channels());
207+
return payload_fromat; // legacy usage retained for callers
227208
}
228209
};
229210

0 commit comments

Comments
 (0)