Linux下实时流媒体——RTP

2019-07-22  本文已影响0人  锋之律

以下为数据发送端代码,它负责向用户指定的IP地址和端口,不断地发送RTP数据包:

#include <stdio.h>
#include <string.h>
#include "rtpsession.h"

// 错误处理函数
void checkerror(int err)
{
    if (err < 0)
    {
        char *errstr = RTPGetErrorString(err);
        printf("Error:%s\\n", errstr);
        exit(-1);
    }
}

int main(int argc, char **argv)
{
    RTPSession sess;
    unsigned long destip;
    int destport;
    int portbase = 6000;
    int status, index;
    char buffer[128];

    // 获得接收端的IP地址和端口号
    destip = inet_addr(argv[1]);
    destip = ntohl(destip);
    destport = atoi(argv[2]);

    // 创建RTP会话
    status = sess.Create(portbase);
    checkerror(status);

    // 指定RTP数据接收端
    status = sess.AddDestination(destip, destport);
    checkerror(status);

    // 设置RTP会话默认参数
    sess.SetDefaultPayloadType(0);
    sess.SetDefaultMark(false);
    sess.SetDefaultTimeStampIncrement(10);

    // 发送流媒体数据
    index = 1;
    do
    {
        sprintf(buffer, "%d: RTP packet", index++);
        sess.SendPacket(buffer, strlen(buffer));
        printf("Send packet !\\n");
    } while (1);

    return 0;
}

以下为数据接收端代码,它负责从指定的端口不断地读取RTP数据包:

#include <stdio.h>
#include "rtpsession.h"
#include "rtppacket.h"

// 错误处理函数
void checkerror(int err)
{
    if (err < 0)
    {
        char *errstr = RTPGetErrorString(err);
        printf("Error:%s\\n", errstr);
        exit(-1);
    }
}

int main(int argc, char **argv)
{
    RTPSession sess;
    int localport;
    int status;

    // 获得用户指定的端口号
    localport = atoi(argv[1]);

    // 创建RTP会话
    status = sess.Create(localport);
    checkerror(status);

    do
    {
        // 接受RTP数据
        status = sess.PollData();
        // 检索RTP数据源
        if (sess.GotoFirstSourceWithData())
        {
            do
            {
                RTPPacket *packet;
                // 获取RTP数据报
                while ((packet = sess.GetNextPacket()) != NULL)
                {
                    printf("Got packet !//n");
                    // 删除RTP数据报
                    delete packet;
                }
            } while (sess.GotoNextSourceWithData());
        }
    } while (1);

    return 0;
}
上一篇 下一篇

猜你喜欢

热点阅读