live555 h265_live555推流rtsp

live555 h265_live555推流rtsp基于live555的视频直播DM368IPNCRTSP分析本文是我对TIDM368IPNCRTSP直播部分的代码分析。approIPNC视频流直播部分用的RTSP,基于live555,通过改写wis-streamer实现的,在live555官网上有wis-streamer的代码下载,appro将其修改,在framedsource中加入了GetAVData接口,这样i

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

基于live555的视频直播 DM368IPNC RTSP分析

本文是 我对TI DM368IPNC RTSP直播部分的代码分析。

appro IPNC视频流直播部分用的RTSP,基于live555,通过改写wis-streamer实现的,在live555官网上有wis-streamer的代码下载,appro将其修改,在framedsource中加入了GetAVData接口,这样ipnc就可以直播了。

感慨:C++ 真的太好用了

现在懒了,文字部分就直接复制出来,源文档使用的是excel,

基于live555的视频直播 DM368IPNC RTSP分析

一、描述

appro利用live555实现了三种视频流以及一种音频流的直播
1、MJPEG Video
2、H264 Video
3、MPEG4 Video
4、PCM Audio

live555是一个开源的RTSP C++类库,默认实现音视频文件的点播,但是可以通过继承相关类,重写相关方法实现视频直播

live555提供的实现直播的通用步骤是:

截图来自之前的《live555分析与开发.xlsx》

appro也是按照此种方法实现

二、Appro的添加的live555源文件

之所以文件复杂,是由于实现了多种音视频流,如果只留其一,源文件将非常简洁

下图是appro源码的UML类图

APPROInput类 类似于设计模式中的简单工厂模式,用于创建具体的FramedSource,对于WISServerMediaSubsession类来说,处理FramedSource的接口是相同的,
但是对于FramedSource来说,VideoSource与AudioSource的具体的帧获取是不同的,
这样,就需要利用APPROInput来分别创建VideoSource和AudioSource。

类APPROInput的videoSource()方法 返回VideoOpenFileSource类的实例
类APPROInput的audioSource()方法 返回AudioOpenFileSource类的实例

三、重要的FramedSource

FramedSource类的doGetNextFrame()方法用于获得音视频的帧数据,子类需要实现这个方法

OpenFileSource中的incomingDataHandler1,调用了虚函数readFromFile,这个函数与底层相关,
所有由OpenFileSource的子类 VideoOpenFIleSource和AudioOpenFileSource类实现

在appro的ipnc中,不管是视频还是音频数据,均是通过GetAVData()函数来获得,
所以VideoOpenFileSource类和AudioOpenFIleSource类的readFromFile方法中封装了GetAVData()这个函数。

具体获得哪种类型的数据是由类OpenFileSource中的属性APPROInput &fInput来传递的

在main函数中有关FramedSource操作的所有代码如下图,以H264为例
启示:在移植appro的live555到高清相机中,我认为最好的方法就是按照IPNC的GetAVData()函数结构,
封装高清相机的GetAVData()函数,高层的live555RTSP部分可不做任何改动

四、RTSP直播 main主程序

这与普通的live555 rtsp service结构并无太多区别,只是由于要传输的视频类型较多,所以多了很多if else,这部分比较简单,不作分析。

appro也是按照此种方法实现

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/170214.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月13日 下午2:46
下一篇 2022年8月13日 下午2:46


相关推荐

  • 如何安装Java?

    如何安装Java?在本文中,我们将研究如何安装Java,在Windows操作系统中安装Java,如何检查已安装的版本以及设置环境变量。因此,让我们开始吧。如何安装Java?Java支持许多平台,例如Windows,Linux,Solaris等。这些平台具有自己的安装方法。在本教程中,我们将介绍32位和64位OS的安装过程Windows操作系统。Windows操作系统中的Java安装在Windows操作系统中,32位和64位Windows操作系统都具有类似的Java安装方式。主要区别在于它们的安装软件包。如何检查主机

    2022年7月9日
    24
  • java常用的英语单词_有趣的英文单词

    java常用的英语单词_有趣的英文单词资源共享学习交流群号:769674658(快满)qq交流二群(296389054)(一)Java基础 public公有的 private私有的 protected保护的 …

    2022年8月10日
    7
  • JS全局变量和局部变量

    JS全局变量和局部变量全局变量和局部变量在看了一个博主写的关于js全局变量的的介绍后,自己也跟着做了一下,并且记录在这里。原博客地址:谈谈JS的全局变量跟局部变量。博主说的比较详细,也比我的表达好,如果不是没耐心,建议去看看原博主的文章先上一段代码:<scripttype=”text/javascript”>vara=1;functiontest(){ alert(a); a=4; aler

    2022年5月26日
    36
  • ETL是什么_ETL平台

    ETL是什么_ETL平台一、ETL发展的背景信息是现代企业的重要资源,是企业运用科学管理、决策分析的基础。据统计,数据量每经过2-3年时间就会成倍增长,这些数据蕴含着巨大的商业价值,而企业所关注的通常只占总数据量的2%~4

    2022年8月6日
    8
  • C语言——经典200道实例【基础例题100道——进阶例题100道】[通俗易懂]

    C语言——经典200道实例【基础例题100道——进阶例题100道】[通俗易懂]目录:===============================基础例题100道===============================1.输出”Hello,World!”2.输出整数3.输出单个字符4.输出浮点数5.输出双精度(double)数6.两个整数相加7.两个浮点数相乘8.字符转ASCII码(1)一次读取长字符,并一个一个显示…

    2022年6月20日
    27
  • C++中关键字volatile和mutable用法

    C++中关键字volatile和mutable用法C C 中的 volatile 关键字和 const 对应 用来修饰变量 用于告诉编译器该变量值是不稳定的 可能被更改 使用 volatile 注意事项 1 编译器会对带有 volatile 关键字的变量禁用优化 Avolatilespe

    2026年3月18日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号