Exemplo n.º 1
0
void sdp_a_rtpmap_test(void)
{
	int payload = 0;
	int rate = 0;
	char encoding[32];
	char parameters[64];

	assert(0 == sdp_a_rtpmap("96 L8/8000", &payload, encoding, &rate, parameters));
	assert(96 == payload && 8000 == rate && 0 == strcmp(encoding, "L8") && '\0' == parameters[0]);

	assert(0 == sdp_a_rtpmap("97 L16/8000", &payload, encoding, &rate, parameters));
	assert(97 == payload && 8000 == rate && 0 == strcmp(encoding, "L16") && '\0' == parameters[0]);

	assert(0 == sdp_a_rtpmap("98 L16/11025/2", &payload, encoding, &rate, parameters));
	assert(98 == payload && 11025 == rate && 0 == strcmp(encoding, "L16") && 0==strcmp("2", parameters));
}
Exemplo n.º 2
0
// RFC 6184 RTP Payload Format for H.264 Video
// 8.2.1. Mapping of Payload Type Parameters to SDP
// m=video 49170 RTP/AVP 98
// a=rtpmap:98 H264/90000
// a=fmtp:98 profile-level-id=42A01E;
//			 packetization-mode=1;
//			 sprop-parameter-sets=<parameter sets data>
static void rtsp_media_onattr(void* param, const char* name, const char* value)
{
	int i;
	int payload = -1;
	struct rtsp_media_t* media;

	media = (struct rtsp_media_t*)param;

	if(name)
	{
		if(0 == strcmp("rtpmap", name))
		{
			int rate = 0;
			char encoding[sizeof(media->avformats[i].encoding)];
			if(strlen(value) < sizeof(encoding)) // make sure encoding have enough memory space
			{
				sdp_a_rtpmap(value, &payload, encoding, &rate, NULL);
				for(i = 0; i < media->avformat_count; i++)
				{
					if(media->avformats[i].fmt == payload)
					{
						media->avformats[i].rate = rate;
						strlcpy(media->avformats[i].encoding, encoding, sizeof(media->avformats[i].encoding));
						break;
					}
				}
			}
		}
		else if(0 == strcmp("fmtp", name))
		{
			payload = atoi(value);
			for(i = 0; i < media->avformat_count; i++)
			{
				if(media->avformats[i].fmt == payload)
				{
					if(0 == strcmp("H264", media->avformats[i].encoding))
					{
						struct sdp_a_fmtp_h264_t h264;
						memset(&h264, 0, sizeof(h264));
						sdp_a_fmtp_h264(value, &payload, &h264);
						if(h264.flags & SDP_A_FMTP_H264_SPROP_PARAMETER_SETS)
						{
							strlcpy(media->avformats[i].spspps, h264.sprop_parameter_sets, sizeof(media->avformats[i].spspps));
						}
					}
					else if(0 == strcmp("mpeg4-generic", media->avformats[i].encoding))
					{
						struct sdp_a_fmtp_mpeg4_t mpeg4;
						memset(&mpeg4, 0, sizeof(mpeg4));
						sdp_a_fmtp_mpeg4(value, &payload, &mpeg4);
					}
					break;
				}
			}
		}
	}
}