📄 synstreamon.c
字号:
/*------------------------------------------------------------------------- * synstreamon.c - synstreamon *------------------------------------------------------------------------- */#include <syn.h>#include <stdlib.h>#include <strings.h>#include <util.h>#include <sample.h>/*------------------------------------------------------------------------ * synstreamon - turn on a stream a synchronization layer. Clkrt is the * stream's media clockrate in Hz. Parameters is a type-specific (e.g., * sample, frame, or packet) structure that contains type-specific * parameters. *------------------------------------------------------------------------ */intsynstreamon(struct synsession *pssn, ssrc_t ssrc, int type, int clkrt, mediatime_t jitthresh, void *parameters){ struct synstream *psstm; unsigned int leeway; /* * Check that the stream still exists at the * RTP layer. I.e., we did not miss a timedout * event. */ if (rtpctl(pssn->ssn_session, RTP_CTL_STREAM_NULL, NULL, 0, ssrc) == ERROR) return ERROR; if ((psstm = malloc(sizeof(struct synstream))) == NULL) return ERROR; memset(psstm, 0, sizeof(struct synstream)); /* * Turn on the events needed for the stream at * the synchronization layer. */ eventqfilterssrc(&pssn->ssn_events, EVENT_RTP_HEAD, ssrc, TRUE); eventqfilterssrc(&pssn->ssn_events, EVENT_RTCP_SDES_CNAME, ssrc, TRUE); eventqfilterssrc(&pssn->ssn_events, EVENT_RTCP_BYE, ssrc, TRUE); eventqfilterssrc(&pssn->ssn_events, EVENT_PARTICIPANT_TIMEOUT, ssrc, TRUE); eventqfilterssrc(&pssn->ssn_events, EVENT_PARTICIPANT_ENCODING, ssrc, TRUE); eventqfilterssrc(&pssn->ssn_events, EVENT_PARTICIPANT_SEQGAP, ssrc, TRUE); eventqfilterssrc(&pssn->ssn_events, EVENT_RTCP_SR, ssrc, TRUE); pthread_mutex_init(&psstm->sstm_readmutex, NULL); pthread_cond_init(&psstm->sstm_readcond, NULL); psstm->sstm_readflags = SYN_READ_FLUSH | SYN_READ_BLOCK; psstm->sstm_ssrc = ssrc; psstm->sstm_clkrt = clkrt; psstm->sstm_type = type; psstm->sstm_jitthresh = jitthresh; psstm->sstm_parameters = parameters; if (htadd(pssn->ssn_ssrcs, ssrc, (void *) psstm) == ERROR) { htdel(pssn->ssn_events.eq_ssrcs, psstm->sstm_ssrc); free(psstm); return ERROR; } leeway = SYN_DEFAULT_LEEWAY; synctl(pssn, SYN_CTL_STREAM_SETLEEWAY, (char *) &leeway, ssrc); synrebuffer(pssn, ssrc); /* * Turn the stream on at the RTP layer. */ rtpstreamon(pssn->ssn_session, ssrc, clkrt); return OK;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -