⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtp_ctrl.c

📁 linux下的sip voip程序
💻 C
字号:
#include <errno.h>#include "rtp_ctrl.h"#include "sound.h"void* Rtp_Ctrl(void* rtp_info){    int sock;    struct sockaddr_in term;    BYTE rtp_data[RTP_DATA_LEN];    RTP_INFO* info = (RTP_INFO*)rtp_info;    short buf[AUDIO_BUFF_SIZE];    int i;    term.sin_family = AF_INET;    term.sin_port = htons(info->send_port);    term.sin_addr.s_addr = inet_addr(info->send_addr);    sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);    open_soundr();    do{        if(*(info->psend_switch) == ok){            record_sound( buf );            for(i=0; i < AUDIO_BUFF_SIZE; i++){                (info->s_audio_data)[i] = g711encode(buf[i]);            }            info->rtp_header->seq = htons(info->seqnum);            info->rtp_header->ts = htonl(info->timestamp);            memcpy(rtp_data, info->rtp_header, RTP_HEADER_LEN);            memcpy(rtp_data+RTP_HEADER_LEN, info->s_audio_data, AUDIO_BUFF_SIZE);            sendto(sock, rtp_data, RTP_DATA_LEN, 0, (struct sockaddr*)&term, sizeof(term));            info->seqnum++;            info->timestamp += AUDIO_BUFF_SIZE;              info->rtp_header->m = 0;            memset(rtp_data , 0, RTP_DATA_LEN);            memset(info->s_audio_data, 0, AUDIO_BUFF_SIZE);        }    }while(*(info->psend_switch) != ng);    close_soundr();}void* Recv_Rtp(void* rtpinfo){    int sock;    struct sockaddr_in term;    unsigned char rtp_data[RTP_DATA_LEN];    int termsize;    int r_rtpsize;    unsigned short buf[AUDIO_BUFF_SIZE];    int i;    RTP_INFO* info = (RTP_INFO*)rtpinfo;    char error[256];    static int status = 0;    memset(&term, 0, sizeof(term));    term.sin_family = AF_INET;    term.sin_port = htons(info->recv_port);    term.sin_addr.s_addr = htonl(INADDR_ANY);    sock = socket(AF_INET,  SOCK_DGRAM, IPPROTO_UDP);    if(bind(sock, (struct sockaddr *)&term, sizeof(term)) < 0){        debug("Error!!socket create failed.\n");        return;    }    termsize = sizeof(term);    open_soundp();    do{        if(r_rtpsize = recvfrom(sock, rtp_data, RTP_DATA_LEN,            0, (struct sockaddr*)&term, &termsize) < 0){            debug("Error!!recvfrom failed.\n");            strcpy(error, strerror(errno));            printf("%s\n", error);            continue;        }        memcpy(info->r_audio_data,             rtp_data + RTP_HEADER_LEN, AUDIO_BUFF_SIZE);        for(i=0; i < AUDIO_BUFF_SIZE; i++){            buf[i] = g711decode((info->r_audio_data)[i]);        }        memset(rtp_data, 0, RTP_DATA_LEN);        play_sound(buf);    }while(*(info->psend_switch) != ng);    close_soundp();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -