live555 rtsp服务器实战之createNewStreamSource

概述

        live555用于实际项目开发时,createNewStreamSource和doGetNextFrame是必须要实现的两个虚函数,一般会创建两个类来实现这两个函数:假如这两个类为H264LiveVideoServerMediaSubssion和H264FramedLiveSource;       

        H264LiveVideoServerMediaSubssion为实时视频会话类,用于实现createNewStreamSource虚函数;

        H264FramedLiveSource为实时视频帧资源类,用户实现doGetNextFrame函数;

        那么这两个函数是什么时候被调用以及他们的作用是什么呢?本节将详细介绍;

声明:该文章基于H264视频源为基础分析,其他源类似;

        由于这两个类主要是自定义虚函数,所以存在一定的继承关系,首先需要明确这两个类的继承关系(本章只介绍H264LiveVideoServerMediaSubssion):

        H264LiveVideoServerMediaSubssion:OnDemandServerMediaSubsession:ServerMediaSubsession:Medium

createNewStreamSource

本章介绍createNewStreamSource函数;

        虚函数createNewStreamSource声明于OnDemandServerMediaSubsession类:

virtual FramedSource* createNewStreamSource(unsigned clientSessionId,
                unsigned& estBitrate) = 0;

        可以看出声明时为纯虚函数(live555提供的对外接口,用户自定义实现),必须有子类对该函数进行实现;该函数用于获取媒体流源的资源对象,简单点说就是指明服务器调用哪个doGetNextFrame函数获取视频流;

        因此H264LiveVideoServerMediaSubssion类需要继承OnDemandServerMediaSubsession类;

        createNewStreamSource函数实现解析:

FramedSource* H264LiveVideoServerMediaSubssion::createNewStreamSource(unsigned clientSessionId, unsigned& estBitrate)
{
    /* Remain to do : assign estBitrate */
    estBitrate = 1000; // kbps, estimate

    //创建视频源
    H264FramedLiveSource* liveSource = H264FramedLiveSource::createNew(envir(), Server_datasize, Server_databuf, Server_dosent);
    if (liveSource == NULL)
    {
        return NULL;
    }

    // Create a framer for the Video Elementary Stream:
    return H264VideoStreamFramer::createNew(envir(), liveSource);
}

        上述代码就是最基础的虚函数createNewStreamSource的实现,其中H264FramedLiveSource就是视频源资源的类;也就是获取视频帧的函数doGetNextFrame所在的类;该函数主要做了两件事:

1. 创建h264帧资源类对象liveSource;目的是获取调用doGetNextFrame的方法;

2. 返回H264VideoStreamFramer类对象,并将h264帧资源类对象传递进去,最终liveSource赋值给StreamParser类中成员变量fInputSource和FramedFilter类的成员变量fInputSource;

        可以看出这两件事的目的都是为了告诉rtsp服务器怎么获取视频帧数据;关于fInputSource变量什么时候被使用的,请参考我的下篇文章:未知地址!哈哈哈!

        下节的doGetNextFrame分析才是重点,敬请期待!

相关推荐

  1. live555 rtsp服务器实战createNewStreamSource

    2024-07-16 07:00:03       27 阅读
  2. live555 rtsp服务器实战doGetNextFrame

    2024-07-16 07:00:03       22 阅读
  3. live555搭建实时播放rtsp服务器

    2024-07-16 07:00:03       21 阅读
  4. live555搭建流式rtsp服务器

    2024-07-16 07:00:03       55 阅读
  5. live555关于RTSP协议交互流程

    2024-07-16 07:00:03       16 阅读
  6. 实时流媒体传输开源库——Live555

    2024-07-16 07:00:03       50 阅读
  7. 实时流媒体传输开源库Live555

    2024-07-16 07:00:03       20 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-16 07:00:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-16 07:00:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-16 07:00:03       58 阅读
  4. Python语言-面向对象

    2024-07-16 07:00:03       69 阅读

热门阅读

  1. MATLAB的mat文件转换成json文件

    2024-07-16 07:00:03       31 阅读
  2. 统计学随笔

    2024-07-16 07:00:03       23 阅读
  3. 暂停cPanel / WHM帐户的方法

    2024-07-16 07:00:03       20 阅读
  4. .NET C# 使用 iText 生成PDF

    2024-07-16 07:00:03       17 阅读
  5. 服务器的rabbitmq的guest账号登不进去

    2024-07-16 07:00:03       28 阅读
  6. STO SS1 SS2 SLS 安全释义

    2024-07-16 07:00:03       21 阅读
  7. spring事务 @Transactional

    2024-07-16 07:00:03       26 阅读