Linux下实时流媒体——RTP

以下为数据发送端代码,它负责向用户指定的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;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原文地址:RFC3550 RTP 中文版 英文版原文:RFC3550英文版 - RTP: A Transport ...
    云上听风阅读 14,588评论 0 13
  • 简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者...
    保川阅读 11,176评论 1 13
  • 简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者...
    JasonShi6306421阅读 4,991评论 0 1
  • 一、 简介 目前,在IP网络中实现实时语音、视频通信和应用已经成为网络应用的一个主流技术和发展方向,本文详细介绍I...
    ZMRWEGo阅读 18,105评论 0 16
  • RTP 参考文档 RFC3550/RFC3551 Real-time Transport Protocol)是用于...
    大草原之夜阅读 4,765评论 0 9