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也是按照此种方法实现

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 2021年美赛A题思路与程序–已更新

    2021年美赛A题思路与程序–已更新美赛第一小题部分程序%预测的菌群的数量clc;clearall;y=input(‘请输入数据’);n=length(y);yy=ones(n,1);yy(1)=y(1);fori=2:nyy(i)=yy(i-1)+y(i)endB=ones(n-1,2);fori=1:(n-1)B(i,1)=-(yy(i)+yy(i+1))/2;B(i,2)=1;endBT=B’;forj=1:(n-1)YN(j)=y(j+1);endYN=YN’;A=inv(BT

  • 旋转编码器工作原理图_编码器工作原理图解

    旋转编码器工作原理图_编码器工作原理图解一、旋转编码器的原理和特点:旋转编码器是集光机电技术于一体的速度位移传感器。当旋转编码器轴带动光栅盘旋转时,经发光元件发出的光被光栅盘狭缝切割成断续光线,并被接收元件接收产生初始信号。该信号经后继电路处理后,输出脉冲或代码信号。其特点是体积小,重量轻,品种多,功能全,频响高,分辨能力高,力矩小,耗能低,性能稳定,可靠使用寿命长等特点。1、增量式编码器增量…

  • Singular Value Thresholding (SVT) 奇异值阈值

    Singular Value Thresholding (SVT) 奇异值阈值这个算法受到压缩感知中迭代算法的启发,在迭代过程中对矩阵进行SVD,然后将较小的奇异值设置为0,生成新的矩阵进行迭代。该算法运算速度快,对于高位低秩矩阵的恢复非常有效。

  • stm32直流电机控制—PID算法篇

    stm32直流电机控制—PID算法篇stm32直流电机控制—PID算法篇提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章Python机器学习入门之pandas的使用**加粗样式*提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录stm32直流电机控制—PID算法篇前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了

  • iOS iOS 地图与定位开发系列教程

    iOS iOS 地图与定位开发系列教程iPhoneSDK提供了三个类来管理位置信息:CLLocationCLLocationManager和CLLHeading(不常用)。除了使用GPS来获取当前的位置信息外,iPhone也可以基于WiFi基站和无线发射塔来获得位置信息。GPS的精度最高,可以精确到米级别,但是也最耗电。1、CLLocationCLLocation类代表一个位置信息,其中还包括了方向和速度。比如我在长安街188号以5公里/小时的速度往西走。CLLocation具有下面的属性和方法:@property.

  • SpringMVC面试题总结「建议收藏」

    SpringMVC面试题总结「建议收藏」前言:SpringMVC的面试题常见的也就那几种,本文我打算分为两个方向为大家介绍SpringMVC的面试题。第一部分将从源码的执行的角度分析SpringMVC(以后简称MVC)第二部分将从面试官常问的SpringMVC面试题取介绍SpringMVC源码介绍1.http://localhost:8000/hello这个路径的执行流程是怎么走的流程大致分析一下:首先会请求会进入前…

发表回复

您的电子邮箱地址不会被公开。

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