📄 rtsp_testapp.c
字号:
if (isdigit(str[i])) {
num[j++] = str[i];
j %= 64; /* avoid illegal access */
} else {
num[j++] = '\0';
player->rtp_server_port = strtol(num,&endptr,10);
j = 0;
state = REACH_TAG; /* get only first value */
}
break;
case REACH_CLPORT:
if (isdigit(str[i])) {
num[j++] = str[i];
j %= 64; /* avoid illegal access */
} else {
num[j++] = '\0';
player->rtp_client_port = strtol(num,&endptr,10);
j = 0;
state = REACH_TAG; /* get only first value */
}
break;
case REACH_SRVPORT:
if (isdigit(str[i])) {
num[j++] = str[i];
j %= 64; /* avoid illegal access */
} else {
num[j++] = '\0';
player->rtp_server_port = strtol(num,&endptr,10);
j = 0;
state = REACH_TAG; /* get only first value */
}
break;
case REACH_TTL:
if (isdigit(str[i])) {
num[j++] = str[i];
j %= 64; /* avoid illegal access */
} else {
num[j++] = '\0';
player->rtp_ttl = strtol(num,&endptr,10);
j = 0;
state = REACH_TAG;
}
break;
case REACH_DEST:
if (isdigit(str[i]) ||
str[i] == '.') {
num[j++] = str[i];
j %= 64; /* avoid illegal access */
} else if(str[i] == ':'){
num[j++] = '\0';
/* convert IP string to NGuint */
// inet_addr(num, &player->rtp_ip);
player->rtp_ip = inet_addr(num);
j = 0;
state = REACH_CLPORT;
}else{
num[j++] = '\0';
/* convert IP string to NGuint */
player->rtp_ip = inet_addr(num);
j = 0;
state = REACH_TAG;
}
break;
case REACH_SRC:
if (isdigit(str[i]) ||
str[i] == '.') {
num[j++] = str[i];
j %= 64; /* avoid illegal access */
} else {
num[j++] = '\0';
/* convert IP string to NGuint */
player->rtp_ip = inet_addr(num);
j = 0;
state = REACH_TAG;
}
break;
case REACH_SSRC:
break;
}
i++;
/* process terminating NULL so the last tag is correctly detected */
if (str[i-1]=='\0')
break;
}
}
static int rtsp (char *server)
{
int ret;
/*char * temp;*/
rtsp_command_t cmd;
rtsp_decode_t *decode;
session_desc_t *sdp=NULL;
media_desc_t *media;
sdp_decode_info_t *sdpdecode;
rtsp_session_t *session;
int dummy;
char transport_buf[200];
memset(&cmd, 0, sizeof(rtsp_command_t));
rtsp_client = (rtsp_client_t*)rtsp_create_client(server, &ret);
if (rtsp_client == NULL) {
Rtsp_Printf("No client created - error %d\n", ret);
return (1);
}
if (rtsp_send_describe(rtsp_client, &cmd, &decode) != RTSP_RESPONSE_GOOD) {
Rtsp_Printf("Describe response not good\n");
free_decode_response(decode);
free_rtsp_client(rtsp_client);
return(1);
}
sdpdecode = set_sdp_decode_from_memory(decode->body);
if (sdpdecode == NULL) {
Rtsp_Printf("Couldn't get sdp decode\n");
free_decode_response(decode);
free_rtsp_client(rtsp_client);
return(1);
}
if (sdp_decode(sdpdecode, &sdp, &dummy) != 0) {
Rtsp_Printf("Couldn't decode sdp\n");
free_decode_response(decode);
free_rtsp_client(rtsp_client);
return (1);
}
Rtsp_Free(sdpdecode,__LINE__,__FILE__);
convert_relative_urls_to_absolute (sdp, server);
free_decode_response(decode);
decode = NULL;
sprintf(transport_buf,transport_str,6000,6001);
cmd.transport = transport_buf;
#if 0
#if 1
cmd.transport = "RTP/AVP;unicast;client_port=4588-4589";
#else
cmd.transport = "RTP/AVP/TCP;unicast"/*interleaved=0-1"*/;
#endif
#endif
media = sdp->media;
dummy = rtsp_send_setup(rtsp_client,
media->control_string,
&cmd,
&session,
&decode, 0);
if (dummy != RTSP_RESPONSE_GOOD) {
/* Rtsp_Printf("Response to setup is %d\n", dummy);
*/
sdp_free_session_desc(sdp);
free_decode_response(decode);
free_rtsp_client(rtsp_client);
return (1);
}
rtsp_client->session=strdup(session->session);
player=Rtsp_Malloc(sizeof(player_t),__LINE__,__FILE__);
memset(player, 0, sizeof(player_t));
if(player==NULL)
return FALSE;
media = (sdp->media)->next;
parse_transport_str( decode->transport );
while(media!=NULL)
{
free_decode_response(decode);
sprintf(transport_buf,transport_str,player->rtp_client_port,player->rtp_client_port + 1);
cmd.transport = transport_buf;
dummy = rtsp_send_setup(rtsp_client,
media->control_string,
&cmd,
&session,
&decode, 1);
if (dummy != RTSP_RESPONSE_GOOD) {
Rtsp_Printf("Response to setup is %d\n", dummy);
sdp_free_session_desc(sdp);
free_decode_response(decode);
free_rtsp_client(rtsp_client);
return (1);
}
media = media->next;
}
parse_transport_str( decode->transport );
sdp_free_session_desc(sdp);
free_decode_response(decode);
cmd.transport = NULL;
player->state=SETUP;
return (0);
}
static int RPLAY (void)
{
rtsp_command_t cmd;
rtsp_decode_t *decode;
int dummy;
char ipaddr[40];
if(player->state & PAUSE)
{
memset(&cmd, 0, sizeof(rtsp_command_t));
cmd.transport = NULL;
cmd.range = "npt=0.0-30.0";
dummy = rtsp_send_aggregate_play(rtsp_client,rtsp_client->url, &cmd, &decode);
/*dummy = rtsp_send_play(session, &cmd, &decode);*/
if (dummy != RTSP_RESPONSE_GOOD) {
printf("response to play is %d\n", dummy);
}
free_decode_response(decode);
player->state=PLAY;
}
else
{
memset(&cmd, 0, sizeof(rtsp_command_t));
cmd.transport = NULL;
cmd.range = "npt=0.0-30.0";
dummy = rtsp_send_aggregate_play(rtsp_client,rtsp_client->url, &cmd, &decode);
/*dummy = rtsp_send_play(session, &cmd, &decode);*/
if (dummy != RTSP_RESPONSE_GOOD) {
printf("response to play is %d\n", dummy);
}
free_decode_response(decode);
player->state=PLAY;
}
return TRUE;
}
static int RPAUSE (void)
{
rtsp_command_t cmd;
rtsp_decode_t *decode;
int dummy;
memset(&cmd, 0, sizeof(rtsp_command_t));
cmd.transport = NULL;
/*cmd.range = "npt=0-10.12390";*/
dummy = rtsp_send_aggregate_pause(rtsp_client,rtsp_client->url, &cmd, &decode);
// dummy = rtsp_send_play(session, &cmd, &decode);
if (dummy != RTSP_RESPONSE_GOOD) {
printf("response to play is %d\n", dummy);
return FALSE;
}
free_decode_response(decode);
player->state =PAUSE ;
/*stop the video*/
return TRUE;
}
static int RSTOP (void)
{
rtsp_decode_t *decode;
int dummy;
dummy = rtsp_send_aggregate_teardown(rtsp_client,rtsp_client->url, NULL, &decode);
/* printf("Teardown response %d\n", dummy);
*/
free_decode_response(decode);
free_rtsp_client(rtsp_client);
rtsp_client=NULL;
if(player->state && (PLAY|PAUSE))
{
// IPTV_Stop();
}
player->state=0;
// Rtsp_Free(player);
return TRUE;
}
void test_rtsp_main(void)
{
static char* server="rtsp://192.168.1.15:8554/robot.mpg";
rtsp(server);
RPLAY();
RPAUSE();
RSTOP();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -