// temp10.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <Windows.h> int _tmain(int argc, _TCHAR* argv[]) { char* sdpLine="a=rtpmap:96 H264/90000\r\na=fmtp:96 packetization-mode=1;profile-level-id=640032;sprop-parameter-sets=J2QAMq2EBUViuKxUcQgKisVxWKjiECSFITk8nyfk/k/J8nm5s00IEkKQnJ5Pk/J/J+T5PNzZphcqAeAIn5ZsgAAB9AAA6mBwAAAPQkAAAPQkBe91lA==,KP4Briw=\r\na=control:track1\r\n"; //用下面的sdp数据,sdpLine开头的数据不符合此正则表达式,sscanf返回0,表示一个变量数据都没有解析出来。 //char* sdpLine="a=fmtp:96a=rtpmap:96 H264/90000\r\na=fmtp:96 packetization-mode=1;profile-level-id=640032;sprop-parameter-sets=J2QAMq2EBUViuKxUcQgKisVxWKjiECSFITk8nyfk/k/J8nm5s00IEkKQnJ5Pk/J/J+T5PNzZphcqAeAIn5ZsgAAB9AAA6mBwAAAPQkAAAPQkBe91lA==,KP4Briw=\r\na=control:track1\r\n"; unsigned rtpmapPayloadFormat=0; char codecName[10]={0}; unsigned rtpTimestampFrequency = 0; //只匹配sdpLine开头的数据是否符合此正则表达式,如果sdpLine开头的数据不符合此正则表达式。这 int count=sscanf(sdpLine, "a=rtpmap: %u %[^/]/%u", &rtpmapPayloadFormat, codecName, &rtpTimestampFrequency); printf("count=%d\n",count); //如果匹配成功,count为3,表示解析出了3个变量数据。 printf("payload=%u, codecName=%s, timestamp=%u\n",rtpmapPayloadFormat, codecName, rtpTimestampFrequency); getchar(); return 0; }
如图:
从live555的函数Boolean MediaSubsession::parseSDPAttribute_rtpmap(char const* sdpLine)里面学到的知识。
完。
原文:http://www.cnblogs.com/liyou-blog/p/4922884.html