コード例 #1
0
ファイル: main.cpp プロジェクト: jeff-cn/media-server
static int udpserver_create(const char* ip, int port)
{
    int ret;
    socket_t socket;
    struct sockaddr_in addr;

    // new a UDP socket
    socket = socket_udp();
    if(socket_error == socket)
        return 0;

    // reuse addr
    socket_setreuseaddr(socket, 1);

    // bind
    if(ip && ip[0])
    {
        ret = socket_addr_ipv4(&addr, ip, (unsigned short)port);
        if(0 == ret)
            ret = socket_bind(socket, (struct sockaddr*)&addr, sizeof(addr));
    }
    else
    {
        ret = socket_bind_any(socket, (unsigned short)port);
    }

    if(0 != ret)
    {
        socket_close(socket);
        return 0;
    }

    return socket;
}
コード例 #2
0
void H264FileSource::RTPPacket(void* param, void *packet, size_t bytes, uint64_t time)
{
	H264FileSource *self = (H264FileSource*)param;
	assert(self->m_packet == packet);

	struct sockaddr_in addrin;
	socket_addr_ipv4(&addrin, self->m_ip.c_str(), self->m_port[0]);
	int r = socket_sendto(self->m_socket[0], packet, bytes, 0, (struct sockaddr*)&addrin, sizeof(addrin));
	assert(r == (int)bytes);
	rtp_onsend(self->m_rtp, packet, bytes, time);
}
コード例 #3
0
int H264FileSource::SendRTCP()
{
	// make sure have sent RTP packet

	time64_t clock = time64_now();
	int interval = rtp_rtcp_interval(m_rtp);
	if(0 == m_rtcp_clock || m_rtcp_clock + interval < clock)
	{
		char rtcp[1024] = {0};
		size_t n = rtp_rtcp_report(m_rtp, rtcp, sizeof(rtcp));

		// send RTCP packet
		struct sockaddr_in addrin;
		socket_addr_ipv4(&addrin, m_ip.c_str(), m_port[1]);
		socket_sendto(m_socket[1], rtcp, n, 0, (struct sockaddr*)&addrin, sizeof(addrin));

		m_rtcp_clock = clock;
	}
	
	return 0;
}