最小的RTSP sample code 测试Cradio获取的网络收音机buffer(xxxx)
#include "stdio.h"
//#include <string.h>
#include<conio.h>
#include<winsock2.h>
#include <ws2tcpip.h>
#include <windows.h>
#pragma comment(lib, "ws2_32.lib")
#define BUF_SZIE 1412
#define DEBUG 1
/
//Declare
/
unsigned short GetBindPort(SOCKET m_s);
SOCKET CreateUDPSocket();
SOCKET CreateTCPSocket();
/
//define function
/
unsigned short GetBindPort(SOCKET m_s)
{
struct sockaddr_in addrBnd;
int addrlen;
unsigned short m_BindPort;
addrlen = sizeof(struct sockaddr_in);
getsockname(m_s,(struct sockaddr *)&addrBnd,&addrlen);
m_BindPort = ntohs(addrBnd.sin_port);
return m_BindPort;
}
SOCKET CreateUDPSocket()
{
SOCKET s;
int nRet;
struct sockaddr_in addrBnd;
WSADATA wsd;
if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)
{
printf("WSAStartup failed!\n");
// return ;
}
s = socket(AF_INET, SOCK_DGRAM,0);
if(s == INVALID_SOCKET)
return INVALID_SOCKET;
addrBnd.sin_family = AF_INET;
addrBnd.sin_addr.S_un.S_addr = INADDR_ANY;
addrBnd.sin_port = 0;
nRet = bind(s,(struct sockaddr *)&addrBnd,sizeof(struct sockaddr_in));
if(nRet == SOCKET_ERROR)
{
closesocket(s);
return SOCKET_ERROR;
}
return s;
}
SOCKET CreateTCPSocket()
{
SOCKET s;
struct sockaddr_in addrBnd;
int nServAddlen;
int retVal;
s = socket(AF_INET, SOCK_STREAM,0);
if(s == INVALID_SOCKET)
return INVALID_SOCKET;
addrBnd.sin_family = AF_INET;
addrBnd.sin_addr.s_addr = inet_addr("119.147.104.148");
addrBnd.sin_port = htons(554);
nServAddlen = sizeof(addrBnd);
retVal=connect(s,(LPSOCKADDR)&addrBnd, sizeof(addrBnd));
if(SOCKET_ERROR == retVal)
{
// #ifdef DEBUG
printf("connect failed!\n");
// #endif
closesocket(s);
return INVALID_SOCKET;
}
else
{
printf("=============SOCKET ok===========\n");
}
return s;
}
void StreamMain()//int* a
{
char buf[BUF_SZIE];//send packet buffer size
char buf1[BUF_SZIE*5];//send packet buffer size
int retVal;
int count = 0;
unsigned short clientRTPPortNum, clientRTCPPortNum;
SOCKET s;
struct sockaddr_in addrto;
BOOL bsocket;
int i;
struct timeval UDPtv_timeToDelay;
char *smsg="this is a test";
BOOL opt = TRUE;
int nlen = 0;
int ret = 0;
SOCKET tcpm_s;
SOCKET udpm_s;
int bytesRead;
unsigned sum = 0;
int A;
int ii;
fd_set rdfs;
fd_set readfds;
WSADATA wsd;
if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)
{
printf("WSAStartup failed!\n");
return ;
}
tcpm_s = CreateTCPSocket();
// udpm_s = CreateUDPSocket();
printf("C radio\n");
clientRTPPortNum = GetBindPort( udpm_s );
clientRTCPPortNum = clientRTPPortNum + 1;
memset(buf,'\0',1000);
strcpy(buf, "DESCRIBE rtsp://live.cri.cn/oldies.wsx RTSP/1.0\r\n"\
"User-Agent: WMPlayer/11.0.5721.5262 guid/3300AD50-2C39-46C0-AE0A-628F3C1EE203\r\n"\
"Accept: application/sdp\r\n"\
"Accept-Charset: UTF-8, *;q=0.1\r\n"\
"Cookie: vjuids=60f10259.13145afd551.0.f0fdaf1a7634; vjlast=1311144687.1311144687.10\r\n"\
"X-Accept-Authentication: Negotiate, NTLM, Digest, Basic\r\n"\
"Accept-Language: zh-CN, *;q=0.1\r\n"\
"CSeq: 1\r\n"\
"Supported: com.microsoft.wm.srvppair, com.microsoft.wm.sswitch, com.microsoft.wm.eosmsg, com.microsoft.wm.predstrm, com.microsoft.wm.startupprofile\r\n\r\n"\
);
retVal = send(tcpm_s, buf, strlen(buf), 0);
if (retVal == -1)
printf("===========retVal == -1==========\n");
memset(buf1, '\0', BUF_SZIE*5);
bytesRead = recv(tcpm_s, (char*)buf1, BUF_SZIE*5, 0);
printf("bytestread:%d buf:%s\n", bytesRead, buf1);
memset(buf,'\0',1000);
strcpy((char*)buf,"SETUP rtsp://live.cri.cn/oldies.wsx/rtx RTSP/1.0\r\n"
"User-Agent: WMPlayer/11.0.5721.5262 guid/3300AD50-2C39-46C0-AE0A-628F3C1EE203\r\n"
"Accept-Charset: UTF-8, *;q=0.1\r\n"
"Cookie: vjuids=60f10259.13145afd551.0.f0fdaf1a7634; vjlast=1311144687.1311144687.10\r\n"
"X-Accept-Authentication: Negotiate, NTLM, Digest, Basic\r\n"
"Accept-Language: zh-CN, *;q=0.1\r\n"
"CSeq: 2\r\n"
"X-Playlist-Gen-Id: 1960605\r\n"
"Transport: RTP/AVP/UDP;unicast;client_port=1690-1691;ssrc=3c7b5050;mode=PLAY\r\n\r\n"
);
memset(buf1, '\0', BUF_SZIE*5);
retVal = send(tcpm_s, buf, strlen(buf), 0);
bytesRead = recv(tcpm_s, (char*)buf1, BUF_SZIE*5, 0);
printf("bytestread2:%d buf:%s\n",bytesRead, buf1);
//PGET_PARAMETER
memset(buf,'\0',1000);
strcpy((char*)buf,"GET_PARAMETER rtsp://live.cri.cn/oldies.wsx RTSP/1.0\r\n"
"Content-Length: 0\r\n"
"User-Agent: WMPlayer/11.0.5721.5262 guid/3300AD50-2C39-46C0-AE0A-628F3C1EE203\r\n"
"Accept-Charset: UTF-8, *;q=0.1\r\n"
"Cookie: vjuids=60f10259.13145afd551.0.f0fdaf1a7634; vjlast=1311144687.1311144687.10\r\n"
"X-Accept-Authentication: Negotiate, NTLM, Digest, Basic\r\n"
"Accept-Language: zh-CN, *;q=0.1\r\n"
"Content-Type: application/x-rtsp-packetpair\r\n"
"CSeq: 3\r\n"
"Supported: com.microsoft.wm.srvppair, com.microsoft.wm.sswitch, com.microsoft.wm.eosmsg, com.microsoft.wm.predstrm, com.microsoft.wm.startupprofile\r\n\r\n"
);
retVal = send(tcpm_s, buf, strlen(buf), 0);
memset(buf1, '\0', BUF_SZIE*5);
bytesRead = recv(tcpm_s, (char*)buf1, BUF_SZIE*5, 0);
printf(" PGET_PARAMETER bytestread3:%d buf:%s\n",bytesRead, buf1);
//SETUP
memset(buf,'\0',1000);
strcpy((char*)buf,"SETUP rtsp://live.cri.cn/oldies.wsx/audio RTSP/1.0\r\n"
"User-Agent: WMPlayer/11.0.5721.5262 guid/3300AD50-2C39-46C0-AE0A-628F3C1EE203\r\n"
"Accept-Charset: UTF-8, *;q=0.1\r\n"
"Cookie: vjuids=60f10259.13145afd551.0.f0fdaf1a7634; vjlast=1311144687.1311144687.10\r\n"
"X-Accept-Authentication: Negotiate, NTLM, Digest, Basic\r\n"
"Accept-Language: zh-CN, *;q=0.1\r\n"
"CSeq: 4\r\n"
"X-Playlist-Gen-Id: 1960605\r\n"
"Transport: RTP/AVP/TCP;unicast;interleaved=0-1;ssrc=8ba1f1f1;mode=PLAY\r\n\r\n"
);
retVal = send(tcpm_s, buf, strlen(buf), 0);
memset(buf1, '\0', BUF_SZIE*5);
bytesRead = recv(tcpm_s, (char*)buf1, BUF_SZIE*5, 0);
printf(" SETUP bytestread4:%d buf:%s\n",bytesRead, buf1);
//PLAY
memset(buf,'\0',1000);
strcpy((char*)buf,"PLAY rtsp://live.cri.cn/oldies.wsx RTSP/1.0\r\n"
"X-Playlist-Seek-Id: 1960605\r\n"
"User-Agent: WMPlayer/11.0.5721.5262 guid/3300AD50-2C39-46C0-AE0A-628F3C1EE203\r\n"
"Accept-Charset: UTF-8, *;q=0.1\r\n"
"Cookie: vjuids=60f10259.13145afd551.0.f0fdaf1a7634; vjlast=1311144687.1311144687.10\r\n"
"X-Accept-Authentication: Negotiate, NTLM, Digest, Basic\r\n"
"Accept-Language: zh-cn, *;q=0.1\r\n"
"Session: 2603072080947965665\r\n"
"CSeq: 5\r\n"
"Range: npt=0.000-\r\n"
"Bandwidth: 483299\r\n"
"X-Accelerate-Streaming: AccelDuration=18000;AccelBandwidth=2147483647\r\n\r\n"
);
retVal = send(tcpm_s, buf, strlen(buf), 0);
memset(buf1, '\0', BUF_SZIE*5);
bytesRead = recv(tcpm_s, (char*)buf1, BUF_SZIE*5, 0);
printf(" PLAY bytestread4:%d buf:%s\n",bytesRead, buf1);
//PLAY
memset(buf,'\0',1000);
strcpy((char*)buf,"PLAY rtsp://live.cri.cn/oldies.wsx RTSP/1.0\r\n"
"X-Playlist-Seek-Id: 1960605\r\n"
"User-Agent: WMPlayer/11.0.5721.5262 guid/3300AD50-2C39-46C0-AE0A-628F3C1EE203\r\n"
"Accept-Charset: UTF-8, *;q=0.1\r\n"
"Cookie: vjuids=60f10259.13145afd551.0.f0fdaf1a7634; vjlast=1311144687.1311144687.10\r\n"
"X-Accept-Authentication: Negotiate, NTLM, Digest, Basic\r\n"
"Accept-Language: zh-cn, *;q=0.1\r\n"
"Session: 2603072080947965665\r\n"
"CSeq: 5\r\n"
"Range: npt=0.000-\r\n"
"Bandwidth: 483299\r\n"
"X-Accelerate-Streaming: AccelDuration=18000;AccelBandwidth=2147483647\r\n\r\n"
);
retVal = send(tcpm_s, buf, strlen(buf), 0);
memset(buf1, '\0', BUF_SZIE*5);
bytesRead = recv(tcpm_s, (char*)buf1, BUF_SZIE*5, 0);
printf(" PLAY bytestread4:%d buf:%s\n",bytesRead, buf1);
//SET_PARAMETER
memset(buf,'\0',1000);
strcpy((char*)buf,"SET_PARAMETER rtsp://live.cri.cn/oldies.wsx RTSP/1.0\r\n"
"Content-Length: 220\r\n"
"User-Agent: WMPlayer/11.0.5721.5262 guid/3300AD50-2C39-46C0-AE0A-628F3C1EE203\r\n"
"Accept-Charset: UTF-8, *;q=0.1\r\n"
"Cookie: vjuids=60f10259.13145afd551.0.f0fdaf1a7634; vjlast=1311144687.1311144687.10\r\n"
"X-Accept-Authentication: Negotiate, NTLM, Digest, Basic\r\n"
"Accept-Language: zh-cn, *;q=0.1\r\n"
"Session: 2603072080947965665\r\n"
"Content-Type: application/x-wms-Logconnectstats;charset=UTF-8\r\n"
"CSeq: 6\r\n\r\n"
"<XML><Summary></Summary><c-dns>-</c-dns><c-ip>0.0.0.0</c-ip><c-os>Windows_XP</c-os><c-osversion>5.1.0.2600</c-"
"osversion><date>2012-07-13</date><time>06:01:21</time><c-cpu>Pentium</c-cpu><transport>TCP</transport></XML>\r\n"
);
retVal = send(tcpm_s, buf, strlen(buf), 0);
memset(buf1, '\0', BUF_SZIE*5);
bytesRead = recv(tcpm_s, (char*)buf1, BUF_SZIE*5, 0);
printf(" SET_PARAMETER bytestread5:%d buf:%s\n",bytesRead, buf1);
while (1)
{
bytesRead = recv(tcpm_s, (char*)buf1, BUF_SZIE*5, 0);
}
return ;
}
void main()
{
StreamMain();
}