void rtp_send_init() { ortp_init(); ortp_scheduler_init(); ortp_set_log_level_mask(ORTP_DEBUG | ORTP_MESSAGE | ORTP_WARNING | ORTP_ERROR); // ortp_set_log_level_mask(ORTP_ERROR); }
int main(int argc, char *argv[]) { RtpSession *session; unsigned char buffer[160]; int i; FILE *infile; char *ssrc; uint32_t user_ts=0; int tel=0; if (argc<4){ printf(help); return -1; } ortp_init(); ortp_scheduler_init(); /* set the telephony event payload type to 96 in the av profile.*/ rtp_profile_set_payload(&av_profile,96,&payload_type_telephone_event); session=rtp_session_new(RTP_SESSION_SENDONLY); rtp_session_set_scheduling_mode(session,1); rtp_session_set_blocking_mode(session,1); rtp_session_set_remote_addr(session,argv[2],atoi(argv[3])); rtp_session_set_send_payload_type(session,0); ssrc=getenv("SSRC"); if (ssrc!=NULL) { printf("using SSRC=%i.\n",atoi(ssrc)); rtp_session_set_ssrc(session,atoi(ssrc)); } infile=fopen(argv[1],"rb"); if (infile==NULL) { perror("Cannot open file"); return -1; } signal(SIGINT,stophandler); while( ((i=fread(buffer,1,160,infile))>0) && (runcond) ) { //ortp_message("Sending packet."); rtp_session_send_with_ts(session,buffer,i,user_ts); user_ts+=160; tel++; if (tel==50){ tel=0; ortp_message("Sending telephony event packet."); rtp_session_send_dtmf(session,'*',user_ts); user_ts+=160+160+160; /* the duration of the dtmf */ } } fclose(infile); rtp_session_destroy(session); ortp_exit(); ortp_global_stats_display(); return 0; }
void rtp_init(void) { ortp_init(); ortp_scheduler_init(); ortp_set_log_level_mask(ORTP_ERROR); register_config_context( "input", "rtp", start_block, end_block, config_statements ); }
int main(int argc, char *argv[]) { RtpSession *session; unsigned char buffer[160]; int err; FILE *outfile; uint32_t ts=0; int have_more; if (argc<3){ printf("%s",help); return -1; } ortp_init(); ortp_scheduler_init(); /* set the telephony event payload type to 96 in the av profile.*/ rtp_profile_set_payload(&av_profile,96,&payload_type_telephone_event); session=rtp_session_new(RTP_SESSION_RECVONLY); rtp_session_set_scheduling_mode(session,1); rtp_session_set_blocking_mode(session,1); rtp_session_set_local_addr(session,"0.0.0.0",atoi(argv[2])); rtp_session_set_payload_type(session,0); /* register for telephony events */ rtp_session_signal_connect(session,"telephone-event",(RtpCallback)recv_tev_cb,0); outfile=fopen(argv[1],"wb"); if (outfile==NULL) { perror("Cannot open file"); return -1; } signal(SIGINT,stophandler); while(runcond) { have_more=1; while (have_more){ err=rtp_session_recv_with_ts(session,buffer,160,ts,&have_more); if (err>0) { size_t ret = fwrite(buffer,1,err,outfile); assert( ret == err ); } } ts+=160; //ortp_message("Receiving packet."); } fclose(outfile); rtp_session_destroy(session); ortp_exit(); ortp_global_stats_display(); printf("Total dtmf events received: %i\n",dtmf_count); return 0; }
void MastTool::enable_scheduling() { // Enable packet scheduling ortp_scheduler_init(); // Enable session scheduling and blocking rtp_session_set_scheduling_mode(session, TRUE); rtp_session_set_blocking_mode(session, TRUE); }
int os_sound_init() { ortp_init(); ortp_scheduler_init(); ortp_set_debug_file("oRTP",NULL); #ifdef SPEEX_SUPPORT rtp_profile_set_payload(&av_profile,115,&lpc1015); rtp_profile_set_payload(&av_profile,110,&speex_nb); rtp_profile_set_payload(&av_profile,111,&speex_wb); #endif return 0; }
void rtp_init() { sem_init(&rtp_semaphore,0,1); ortp_init(); ortp_scheduler_init(); ortp_set_log_file (stdout); ortp_set_log_level_mask(ORTP_DEBUG|ORTP_MESSAGE|ORTP_WARNING|ORTP_ERROR); jittcomp=100; timestamp_jump_limit = 500; adapt=1; rtp_connected = 0; rtp_listening = 0; rtp_initialized = 1; }
int yy_init( int port) { RtpSession *session; ortp_init(); ortp_scheduler_init(); ortp_set_log_level_mask( ORTP_DEBUG | ORTP_MESSAGE | ORTP_WARNING | ORTP_ERROR); session = rtp_session_new(RTP_SESSION_RECVONLY); rtp_session_set_scheduling_mode(session, 1); rtp_session_set_blocking_mode(session, 1); rtp_session_set_local_addr(session, "0.0.0.0", port); rtp_session_set_connected_mode(session, TRUE); rtp_session_set_symmetric_rtp(session, TRUE); // rtp_session_enable_adaptive_jitter_compensation(session,adapt); // rtp_session_set_jitter_compensation(session,jittcomp); rtp_session_set_payload_type(session, 0); return (int) session; }
int main(int argc, char*argv[]) { RtpSession *session; unsigned char buffer[32]; int err; uint32_t ts=0; int stream_received=0; FILE *outfile; int local_port; int have_more; int i; int format=0; int soundcard=0; int sound_fd=0; int jittcomp=40; bool_t adapt=TRUE; /* init the lib */ if (argc<3){ printf("%s",help); return -1; } local_port=atoi(argv[2]); if (local_port<=0) { printf("%s",help); return -1; } for (i=3;i<argc;i++) { if (strcmp(argv[i],"--noadapt")==0) adapt=FALSE; if (strcmp(argv[i],"--format")==0){ i++; if (i<argc){ if (strcmp(argv[i],"mulaw")==0){ format=MULAW; }else if (strcmp(argv[i],"alaw")==0){ format=ALAW; }else{ printf("Unsupported format %s\n",argv[i]); return -1; } } } else if (strcmp(argv[i],"--soundcard")==0){ soundcard=1; } else if (strcmp(argv[i],"--with-jitter")==0){ i++; if (i<argc){ jittcomp=atoi(argv[i]); printf("Using a jitter buffer of %i milliseconds.\n",jittcomp); } } } outfile=fopen(argv[1],"wb"); if (outfile==NULL) { perror("Cannot open file for writing"); return -1; } if (soundcard){ sound_fd=sound_init(format); } ortp_init(); ortp_scheduler_init(); ortp_set_log_level_mask(ORTP_DEBUG|ORTP_MESSAGE|ORTP_WARNING|ORTP_ERROR); signal(SIGINT,stop_handler); session=rtp_session_new(RTP_SESSION_RECVONLY); rtp_session_set_scheduling_mode(session,1); rtp_session_set_blocking_mode(session,1); rtp_session_set_local_addr(session,"0.0.0.0",atoi(argv[2])); rtp_session_set_connected_mode(session,TRUE); rtp_session_set_symmetric_rtp(session,TRUE); rtp_session_enable_adaptive_jitter_compensation(session,adapt); rtp_session_set_jitter_compensation(session,jittcomp); rtp_session_set_payload_type(session,0); rtp_session_signal_connect(session,"ssrc_changed",(RtpCallback)ssrc_cb,0); rtp_session_signal_connect(session,"ssrc_changed",(RtpCallback)rtp_session_reset,0); fwrite("#!AMR\n",1,6,outfile); // write(sound_fd,"#!AMR\n",err); while(cond) { have_more=1; while (have_more){ err=rtp_session_recv_with_ts(session,buffer,32,ts,&have_more); if (err>0) stream_received=1; /* this is to avoid to write to disk some silence before the first RTP packet is returned*/ if ((stream_received) && (err>0)) { size_t ret = fwrite(buffer,1,err,outfile); int ii; for(ii =0 ; ii < 32 ; ii ++) printf("%x " ,buffer[ii]); printf("\n"); // while(1); if (sound_fd>0){ ret = write(sound_fd,buffer,err); if (ret==-1){ fprintf(stderr,"write to sound card failed (%s)",strerror(errno)); } } } } ts+=160; //ortp_message("Receiving packet."); } rtp_session_destroy(session); ortp_exit(); ortp_global_stats_display(); return 0; }
int main(int argc, char *argv[]) { RtpSession *session; unsigned char buffer[160]; int i; FILE *infile; char *ssrc; uint32_t packet_ts=0,send_ts=0; uint32_t send_ts_inc=160; int clockslide=0; int jitter=0; if (argc<4){ printf("%s",help); return -1; } for(i=4;i<argc;i++){ if (strcmp(argv[i],"--with-clockslide")==0){ i++; if (i>=argc) { printf("%s",help); return -1; } clockslide=atoi(argv[i]); ortp_message("Using clockslide of %i milisecond every 50 packets.",clockslide); }else if (strcmp(argv[i],"--with-ptime")==0){ ortp_message("Ptime related jitter will be added to outgoing stream."); i++; if (i>=argc) { printf("%s",help); return -1; } jitter=atoi(argv[i]); send_ts_inc=jitter*8; } } ortp_init(); ortp_scheduler_init(); ortp_set_log_level_mask(NULL, ORTP_MESSAGE|ORTP_WARNING|ORTP_ERROR); session=rtp_session_new(RTP_SESSION_SENDONLY); rtp_session_set_scheduling_mode(session,1); rtp_session_set_blocking_mode(session,1); rtp_session_set_connected_mode(session,TRUE); rtp_session_set_remote_addr(session,argv[2],atoi(argv[3])); rtp_session_set_payload_type(session,0); ssrc=getenv("SSRC"); if (ssrc!=NULL) { printf("using SSRC=%i.\n",atoi(ssrc)); rtp_session_set_ssrc(session,atoi(ssrc)); } #ifndef _WIN32 infile=fopen(argv[1],"r"); #else infile=fopen(argv[1],"rb"); #endif if (infile==NULL) { perror("Cannot open file"); return -1; } signal(SIGINT,stophandler); while( ((i=fread(buffer,1,160,infile))>0) && (runcond) ) { mblk_t *m=rtp_session_create_packet(session,RTP_FIXED_HEADER_SIZE,buffer,i); __rtp_session_sendm_with_ts(session,m,packet_ts,send_ts); packet_ts+=160; if ((send_ts+send_ts_inc)<=packet_ts){ send_ts+=send_ts_inc; } if (clockslide!=0 && send_ts%(160*50)==0){ ortp_message("Clock sliding of %i miliseconds now",clockslide); rtp_session_make_time_distorsion(session,clockslide); } } fclose(infile); rtp_session_destroy(session); ortp_exit(); ortp_global_stats_display(); return 0; }
int main(int argc, char *argv[]) { RtpSession *session[STREAMS_COUNT]; gint i; gint filefd[STREAMS_COUNT]; gint port; guint32 user_ts=0; gint channels; SessionSet *set; gchar *filename; if (argc<4){ printf(help); return -1; } channels=atoi(argv[3]); if (channels==0){ printf(help); return -1; } ortp_init(); ortp_scheduler_init(); ortp_set_debug_file("oRTP",NULL); /* set the telephony event payload type to 96 in the av profile.*/ rtp_profile_set_payload(&av_profile,96,&payload_type_telephone_event); port=atoi(argv[2]); p_channel_id = (int *)g_malloc(channels*sizeof(int)); for (i=0;i<channels;i++){ session[i]=rtp_session_new(RTP_SESSION_RECVONLY); rtp_session_set_scheduling_mode(session[i],1); rtp_session_set_blocking_mode(session[i],0); rtp_session_set_local_addr(session[i],"0.0.0.0",port); rtp_session_set_recv_payload_type(session[i],0); rtp_session_set_recv_buf_size(session[i],256); p_channel_id[i] = i; /* register for telephony events */ rtp_session_signal_connect(session[i],"telephone-event",(RtpCallback)recv_tev_cb,&p_channel_id[i]); port+=2; } filename=g_malloc(strlen(argv[1])+8); for (i=0;i<channels;i++){ sprintf(filename,"%s%4.4d.dat",argv[1],i); #ifndef _WIN32 filefd[i]=open(filename,O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP); #else filefd[i]=open(filename,_O_BINARY | O_WRONLY | O_CREAT | O_TRUNC); #endif if (filefd[i]<0) g_error("Could not open %s for writing: %s",filename,strerror(errno)); } signal(SIGINT,stophandler); /* create a set */ set=session_set_new(); while(runcond) { int k; for (k=0;k<channels;k++){ /* add the session to the set */ session_set_set(set,session[k]); } /* and then suspend the process by selecting() */ session_set_select(set,NULL,NULL); for (k=0;k<channels;k++){ if (session_set_is_set(set,session[k])){ rtp2disk(session[k],user_ts,filefd[k]); } } user_ts+=160; } for (i=0;i<channels;i++){ close(filefd[i]); rtp_session_destroy(session[i]); } session_set_destroy(set); g_free(p_channel_id); g_free(filename); ortp_exit(); ortp_global_stats_display(); return 0; }
int main(int argc, char *argv[]) { RtpSession *session[STREAMS_COUNT]; int i; int filefd[STREAMS_COUNT]; int port; uint32_t user_ts=0; int channels; SessionSet *set; char *filename; if (argc<4){ printf("%s",help); return -1; } channels=atoi(argv[3]); if (channels==0){ printf("%s",help); return -1; } ortp_init(); ortp_scheduler_init(); port=atoi(argv[2]); recvbuf=ortp_malloc(160); for (i=0;i<channels;i++){ session[i]=rtp_session_new(RTP_SESSION_RECVONLY); rtp_session_set_scheduling_mode(session[i],1); rtp_session_set_blocking_mode(session[i],0); rtp_session_set_local_addr(session[i],"0.0.0.0",port,port+1); rtp_session_set_payload_type(session[i],0); rtp_session_enable_adaptive_jitter_compensation(session[i], TRUE); rtp_session_set_recv_buf_size(session[i],256); port+=2; } filename=ortp_malloc(strlen(argv[1])+15); for (i=0;i<channels;i++){ sprintf(filename,"%s%4.4d.dat",argv[1],i); #ifndef _WIN32 filefd[i]=open(filename,O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP); #else filefd[i]=open(filename,_O_BINARY | O_WRONLY | O_CREAT | O_TRUNC); #endif if (filefd[i]<0) ortp_error("Could not open %s for writing: %s",filename,strerror(errno)); } signal(SIGINT,stophandler); /* create a set */ set=session_set_new(); while(runcond) { int k; for (k=0;k<channels;k++){ /* add the session to the set */ session_set_set(set,session[k]); //printf("session_set_set %d\n", k); } /* and then suspend the process by selecting() */ k=session_set_select(set,NULL,NULL); if (k==0) printf("warning: session_set_select() is returning 0...\n"); for (k=0;k<channels;k++){ if (session_set_is_set(set,session[k])){ rtp2disk(session[k],user_ts,filefd[k]); //printf("session_set_is_set %d\n", k); } else { //printf("warning: session %i is not set !\n",k); } } user_ts+=160; } printf("Exiting\n"); for (i=0;i<channels;i++){ close(filefd[i]); rtp_session_destroy(session[i]); } session_set_destroy(set); ortp_free(filename); ortp_exit(); ortp_global_stats_display(); ortp_free(recvbuf); return 0; }
int ph_media_init() { static int first_time = 1; #if USE_CODECS ph_media_codecs_init(); #endif /* !USE_CODECS */ if (!first_time) return 0; first_time = 0; ortp_init(); rtp_profile_set_payload(&av_profile, PH_MEDIA_DTMF_PAYLOAD, &telephone_event); rtp_profile_set_payload(&av_profile, PH_MEDIA_ILBC_PAYLOAD, &ilbc); ortp_scheduler_init(); ortp_set_debug_file("oRTP",NULL); tg_init_sine_table(); // eXosip_sdp_negotiation_remove_audio_payloads(); #if 0 g_g723Drivers = 0; g_gsmDrivers = 0; acmDriverEnum( acmDriverEnumCallback, 0, ACM_DRIVERENUMF_DISABLED ); if(g_g723Drivers == 0) { } /* ! fprintf(stderr, "No G723 decoders found!\n" ); */ else { #if 0 eXosip_sdp_negotiation_add_codec(osip_strdup("4"), NULL, osip_strdup("RTP/AVP"), NULL, NULL, NULL, NULL,NULL, osip_strdup("4 G723/8000")); #endif } if(g_gsmDrivers == 0) { /* ! fprintf(stderr, "No GSM decoders found!\n" ); */ } else { eXosip_sdp_negotiation_add_codec(osip_strdup("3"), NULL, osip_strdup("RTP/AVP"), NULL, NULL, NULL, NULL,NULL, osip_strdup("3 GSM/8000")); } /* add A-Law & Mu-Law */ eXosip_sdp_negotiation_add_codec(osip_strdup("0"), NULL, osip_strdup("RTP/AVP"), NULL, NULL, NULL, NULL,NULL, osip_strdup("0 PCMU/8000")); eXosip_sdp_negotiation_add_codec(osip_strdup("8"), NULL, osip_strdup("RTP/AVP"), NULL, NULL, NULL, NULL,NULL, osip_strdup("8 PCMA/8000")); #endif return 0; }
int main(int argc, char*argv[]) { RtpSession *session; #ifndef SBUS unsigned char buffer[160]; #else unsigned char buffer[SBUS_FRAME_SIZE]; #endif int err; uint32_t ts=0; int stream_received=0; FILE *outfile; int local_port; int have_more; int i; int format=0; int soundcard=0; int sound_fd=0; int jittcomp=40; bool_t adapt=TRUE; #ifdef SBUS RtpProfile prof; #endif /* init the lib */ if (argc<3){ printf("%s",help); return -1; } local_port=atoi(argv[2]); if (local_port<=0) { printf("%s",help); return -1; } for (i=3;i<argc;i++) { if (strcmp(argv[i],"--noadapt")==0) adapt=FALSE; if (strcmp(argv[i],"--format")==0){ i++; if (i<argc){ if (strcmp(argv[i],"mulaw")==0){ format=MULAW; }else if (strcmp(argv[i],"alaw")==0){ format=ALAW; }else{ printf("Unsupported format %s\n",argv[i]); return -1; } } } else if (strcmp(argv[i],"--soundcard")==0){ soundcard=1; } else if (strcmp(argv[i],"--with-jitter")==0){ i++; if (i<argc){ jittcomp=atoi(argv[i]); printf("Using a jitter buffer of %i milliseconds.\n",jittcomp); } } } outfile=fopen(argv[1],"wb"); if (outfile==NULL) { perror("Cannot open file for writing"); return -1; } #ifdef SBUS setvbuf(outfile, NULL, _IONBF, 0); #endif if (soundcard){ sound_fd=sound_init(format); } ortp_init(); ortp_scheduler_init(); ortp_set_log_level_mask(ORTP_DEBUG|ORTP_MESSAGE|ORTP_WARNING|ORTP_ERROR); signal(SIGINT,stop_handler); session=rtp_session_new(RTP_SESSION_RECVONLY); rtp_session_set_scheduling_mode(session,1); rtp_session_set_blocking_mode(session,1); rtp_session_set_local_addr(session,"0.0.0.0",atoi(argv[2]),-1); rtp_session_set_connected_mode(session,TRUE); rtp_session_set_symmetric_rtp(session,TRUE); rtp_session_enable_adaptive_jitter_compensation(session,adapt); rtp_session_set_jitter_compensation(session,jittcomp); #ifndef SBUS rtp_session_set_payload_type(session,0); #else rtp_profile_clear_all(&prof); //rtp_profile_set_name(&prof, "SBUS"); rtp_profile_set_payload(&prof, 71, &payload_type_sbus); rtp_session_set_profile(session, &prof); rtp_session_set_payload_type(session, 71); #endif rtp_session_signal_connect(session,"ssrc_changed",(RtpCallback)ssrc_cb,0); rtp_session_signal_connect(session,"ssrc_changed",(RtpCallback)rtp_session_reset,0); while(cond) { have_more=1; while (have_more){ #ifndef SBUS err=rtp_session_recv_with_ts(session,buffer,160,ts,&have_more); #else err=rtp_session_recv_with_ts(session,buffer,SBUS_FRAME_SIZE,ts,&have_more); #endif if (err>0) stream_received=1; /* this is to avoid to write to disk some silence before the first RTP packet is returned*/ if ((stream_received) && (err>0)) { #ifdef SBUS clock_gettime(CLOCK_REALTIME, &tsnew); printf("%09ld\n", tsnew.tv_nsec); #endif size_t ret = fwrite(buffer,1,err,outfile); if (sound_fd>0){ ret = write(sound_fd,buffer,err); if (ret==-1){ fprintf(stderr,"write to sound card failed (%s)",strerror(errno)); } } } } #ifndef SBUS ts+=160; #else ts+=70; #endif //ortp_message("Receiving packet."); } rtp_session_destroy(session); ortp_exit(); ortp_global_stats_display(); return 0; }
int __cdecl main(int argc, char *argv[]) { FILE * infile = NULL; SessionSet * pSessionSet = NULL; int nCounter = 0; UINT32 m_nUser_Timestamp = 0; ProductVersion(); if (GetCommandArguments(argc, argv) != 0) { printf("==> Sorry dude...\n"); Sleep(1000); return -1; } printf("==> Starting the RTP Sender test\n"); // =============== INSTALL THE CONTROL HANDLER =============== if (SetConsoleCtrlHandler( (PHANDLER_ROUTINE) ctrlHandlerFunction, TRUE) == 0) { printf("==> Cannot handle the CTRL-C...\n"); } printf("==> Timestamp increment will be %i\n" , m_nTimestamp_Inc); printf("==> Packet size will be %i\n" , m_nPacket_Size); m_pBuffer = (char *) ortp_malloc(m_nPacket_Size); ortp_init(); ortp_scheduler_init(); printf("==> Scheduler initialized\n"); m_SSRC = getenv("SSRC"); m_nPort = atoi(argv[3]); for (nCounter=0; nCounter < m_nChannels; nCounter++) { //printf("==> Channel [#%d]\n", nCounter); m_Session[nCounter] = rtp_session_new(RTP_SESSION_SENDONLY); rtp_session_set_scheduling_mode(m_Session[nCounter],1); rtp_session_set_blocking_mode(m_Session[nCounter],0); rtp_session_set_remote_addr(m_Session[nCounter],argv[2], m_nPort); rtp_session_set_send_payload_type(m_Session[nCounter],0); if (m_SSRC != NULL) { rtp_session_set_ssrc(m_Session[nCounter],atoi(m_SSRC)); } m_nPort+=2; } infile=fopen(argv[1],"rb"); if (infile==NULL) { printf("==> Cannot open file !!!!"); Sleep(1000); return -1; } // printf("==> Open file\n"); /* Create a set */ pSessionSet = session_set_new(); // printf("==> Session set\n"); while( ((nCounter= (int) fread(m_pBuffer,1,m_nPacket_Size,infile))>0) && (m_bExit == FALSE) ) { int k; //g_message("Sending packet."); for (k=0;k<m_nChannels;k++){ /* add the session to the set */ session_set_set(pSessionSet,m_Session[k]); //printf("==> Session set set %d\n", k); } /* and then suspend the process by selecting() */ session_set_select(NULL,pSessionSet,NULL); //printf("==> Session set select\n"); for (k=0;k<m_nChannels;k++) { //printf("---\n"); /* this is stupid to do this test, because all session work the same way, as the same user_ts is used for all sessions, here. */ if (session_set_is_set(pSessionSet,m_Session[k])) { //printf("==> Session set is set %d\n", k); rtp_session_send_with_ts(m_Session[k],m_pBuffer,nCounter,m_nUser_Timestamp); //g_message("packet sended !"); } } m_nUser_Timestamp+=m_nTimestamp_Inc; } fclose(infile); printf("==> Close file\n"); for(nCounter=0;nCounter<m_nChannels;nCounter++) { rtp_session_destroy(m_Session[nCounter]); } session_set_destroy(pSessionSet); // Give us some time Sleep(250); ortp_exit(); ortp_global_stats_display(); ortp_free(m_pBuffer); printf("==> Remove the CTRL-C handler...\n"); SetConsoleCtrlHandler( (PHANDLER_ROUTINE) ctrlHandlerFunction, FALSE); // Wait for an input key printf("Waiting for exit : "); for (nCounter = 0; nCounter < 4*5; nCounter++) { printf("."); Sleep(250); } return 0; }
int main(int argc, char *argv[]) { RtpSession *session; unsigned char buffer[160]; int i; FILE *infile; char *ssrc; uint32_t user_ts=0; int clockslide=0; int jitter=0; if (argc<4){ printf("%s", help); return -1; } for(i=4;i<argc;i++){ if (strcmp(argv[i],"--with-clockslide")==0){ i++; if (i>=argc) { printf("%s", help); return -1; } clockslide=atoi(argv[i]); ortp_message("Using clockslide of %i milisecond every 50 packets.",clockslide); }else if (strcmp(argv[i],"--with-jitter")==0){ ortp_message("Jitter will be added to outgoing stream."); i++; if (i>=argc) { printf("%s", help); return -1; } jitter=atoi(argv[i]); } } ortp_init(); ortp_scheduler_init(); ortp_set_log_level_mask(NULL, ORTP_MESSAGE|ORTP_WARNING|ORTP_ERROR); session=rtp_session_new(RTP_SESSION_SENDONLY); rtp_session_set_scheduling_mode(session,1); rtp_session_set_blocking_mode(session,1); rtp_session_set_connected_mode(session,TRUE); rtp_session_set_remote_addr(session,argv[2],atoi(argv[3])); rtp_session_set_payload_type(session,0); ssrc=getenv("SSRC"); if (ssrc!=NULL) { printf("using SSRC=%i.\n",atoi(ssrc)); rtp_session_set_ssrc(session,atoi(ssrc)); } #ifndef _WIN32 infile=fopen(argv[1],"r"); #else infile=fopen(argv[1],"rb"); #endif if (infile==NULL) { perror("Cannot open file"); return -1; } signal(SIGINT,stophandler); while( ((i=fread(buffer,1,160,infile))>0) && (runcond) ) { rtp_session_send_with_ts(session,buffer,i,user_ts); user_ts+=160; if (clockslide!=0 && user_ts%(160*50)==0){ ortp_message("Clock sliding of %i miliseconds now",clockslide); rtp_session_make_time_distorsion(session,clockslide); } /*this will simulate a burst of late packets */ if (jitter && (user_ts%(8000)==0)) { ortp_message("Simulating late packets now (%i milliseconds)",jitter); ortp_sleep_ms(jitter); } } fclose(infile); rtp_session_destroy(session); ortp_exit(); ortp_global_stats_display(); return 0; }