使用JRTPLIB 进行简单的数据发送(TCP版)

#include "rtptcpaddress.h"
#include "rtpsession.h"
#include "rtpsessionparams.h"
#include "rtptcptransmitter.h"
#include "rtpipv4address.h"
#include "rtptimeutilities.h"
#include "rtppacket.h"
#include "rtpabortdescriptors.h"

using namespace jrtplib;

void main()
{
#ifdef WIN32
    WSADATA dat;
    WSAStartup(MAKEWORD(2,2),&dat);
#endif
    RTPSession session;
    RTPAbortDescriptors m_descriptors;

    RTPSessionParams sessionparams;
    sessionparams.SetAcceptOwnPackets(true);
    sessionparams.SetOwnTimestampUnit(1.0/10.0);

    m_descriptors.Init();

    RTPTCPTransmissionParams transparams;
    transparams.SetCreatedAbortDescriptors(&m_descriptors);
    int status = session.Create(sessionparams,&transparams,RTPTransmitter::TCPProto);

    if (status < 0)
    {
        std::cerr << "[session.Create]" << QString::fromStdString(RTPGetErrorString(status));
        return;
    }

    //初始化socket
    SOCKET sockSrv = socket(AF_INET, SOCK_STREAM, 0);
    SOCKADDR_IN addrSrv;
    addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
    addrSrv.sin_family = AF_INET;
    addrSrv.sin_port = htons(9000);

    //连接服务器
    connect( sockSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));

    RTPTCPAddress addr(sockSrv);

    status = session.AddDestination(addr);
    if (status < 0)
    {
        std::cerr << "session.AddDestination" << QString::fromStdString(RTPGetErrorString(status));
        return;
    }

    session.SetDefaultPayloadType(96);
    session.SetDefaultMark(false);
    session.SetDefaultTimestampIncrement(160);
 
    //发送数据
    session.SendPacket(str.data(),str.length());

    RTPTime delay(0.020);
    session.BYEDestroy(delay,"Client End",9);
}

JRTPLIB中如果要使用TCP方式通信,则需要先建立socket,再将socket句柄传递给 RTPTCPAddress

猜你喜欢

转载自my.oschina.net/u/1250206/blog/1786928