@@ -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