在mediastreamer2中,我看到了很多我不理解的奇怪代码。
static MSFilterMethod sender_methods[] = {
{MS_RTP_SEND_MUTE, sender_mute},
{MS_RTP_SEND_UNMUTE, sender_unmute},
{MS_RTP_SEND_SET_SESSION, sender_set_session},
{MS_RTP_SEND_SEND_DTMF, sender_send_dtmf},
{MS_RTP_SEND_SET_RELAY_SESSION_ID, sender_set_relay_session_id},
{MS_FILTER_GET_SAMPLE_RATE, sender_get_sr },
{MS_FILTER_GET_NCHANNELS, sender_get_ch },
{MS_RTP_SEND_SET_DTMF_DURATION, sender_set_dtmf_duration },
{MS_RTP_SEND_SEND_GENERIC_CN, sender_send_generic_cn },
{0, NULL}
};
和这个
MSFilterDesc ms_rtp_send_desc = {
MS_RTP_SEND_ID,
"MSRtpSend",
N_("RTP output filter"),
MS_FILTER_OTHER,
NULL,
1,
0,
sender_init,
NULL,
sender_process,
NULL,
sender_uninit,
sender_methods,
MS_FILTER_IS_PUMP
};
或
MSFilterDesc ms_rtp_send_desc = {
.id = MS_RTP_SEND_ID,
.name = "MSRtpSend",
.text = N_("RTP output filter"),
.category = MS_FILTER_OTHER,
.ninputs = 1,
.noutputs = 0,
.init = sender_init,
.process = sender_process,
.uninit = sender_uninit,
.methods = sender_methods,
.flags=MS_FILTER_IS_PUMP
};
在sender_methods中,那些"发件人_"是在同一个文件中的功能。我不知道如何调用其他函数。因为我没有看到这些功能出现在其他文件中。
整个项目在Github:https://github.com/BelledonneCommunications/mediastreamer2。
谢谢。
答案 0 :(得分:2)
以示例.init = sender_init
为例:这会将init
结构的MSFilterDesc
结构成员初始化为指向sender_init
函数的指针。要知道的两件事是structure initialization和pointers to functions。
对于其他人,第一个是结构数组的简单初始化。第二个是结构的简单初始化。