Android中基于NuPlayer的RTSP框架学习

2023-10-24 23:38

本文主要是介绍Android中基于NuPlayer的RTSP框架学习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、整体框架图

Android中基于NuPlayer的RTSP框架如下图所示(该图来自网上)。


整个图主要分为两个部分,一部分是NuPlayer的架构,另一部分则是实现了基于RTSP的流媒体播放功能,即RTSPSource。当然还有一些其他的Source,如图中的HTTPLiveSource,还有图中没有画出的GenericSource、StreamingSource等,他们是并列关系,实现了不同的播放功能。

二、NuPlayer架构

1、NuPlayerDriver是对NuPlayer的封装,与NuPlayerDriver处于并列位置的是StagefrightPlayer,他们都继承MediaPlayerInterface接口。通过NuPlayer来实现播放的功能。

2、NuPlayer真正实现了播放的功能,通过各个Source的接口来得到数据流的信息和解码数据本身。在Stagefright媒体框架中,和NuPlayer处于相同地位的是AwesomePlayer。

三、RTSP功能实现架构

1、RTSPSource是NuPlayer架构的Source,给NuPlayer输送媒体需据信息和媒体数据。在整个NuPlayer架构中,与RTSPSource并列的Source有HTTPLiveSource、GenericSource、StreamingSource,还有一个MP4Source,他们都继承NuPlayer::Source。

2、MyHandler是核心,其中包含ARTSPConnection和ARTPConnection两大部分。MyHandler负责向Server端发送Request和处理Response,并负责将待解码的媒体数据传送给RTSPSource。

3、AnotherPacketSource在RTSPSource中作为mAudioTrack和mVideoTrack,他虽然继承了MediaSource接口,但是并没有使用read来读数据,而是通过dequeueAccessUnit接口来获得数据。RTSPSource通过调用queueAccessUnit结构将数据保存到这里。

4、ARTSPConnection负责维护RTSP的socket,发送Request,循环接收Server端数据,响应Server的Request。这里只是接收Response,真正的处理在MyHandler里。

5、ARTPConnection负责维护RTP和RTCP的socket,接收RTP和RTCP包,周期性发送RTCP包。需要说明的一点是,如果传输RTP和RTCP数据使用的是TCP,那么会共用RTSP的socket;如果用的是UDP,那么针对每个stream都会创建两个socket,一个用于传输RTP数据,一个用于传输RTCP数据。

6、ARTPSource,每个RTP数据流都有一个ARTPSource,后者会创建一个ARTPAssembler。依据处理数据流的压缩格式,实例化对应格式的Assembler。在ARTPSource中实现的一个最主要而且重要的功能就是根据SeqNum对RTP包进行排序。

7、ARTPAssembler对ARTPConnection接收到的数据进行处理,说的简单一点就将接收到的媒体数据进行重组,以满足解码器的要求。如AVC数据,他会把单一NAL,NAL分片和复合NAL分别处理后,都以单独NAL的形式回调传给RTSPSource,存放在AnotherPacketSource中,供decoder端使用。目前支持的Assembler有一下几种,他们都继承ARTPAssembler。

(1)AAVCAssembler

(2)AMPEG4AudioAssembler

(3)AH263Assembler

(4)AAMRAssembler

(5)AMPEG4ElementaryAssembler

(6)ARawAudioAssembler

(7)AMPEG2TSAssembler

8、APacketSource用来包存和设置每个stream的属性。针对每个stream都会创建一个APacketSource。


待序。

这篇关于Android中基于NuPlayer的RTSP框架学习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/278531

相关文章

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

如何解决idea的Module:‘:app‘platform‘android-32‘not found.问题

《如何解决idea的Module:‘:app‘platform‘android-32‘notfound.问题》:本文主要介绍如何解决idea的Module:‘:app‘platform‘andr... 目录idea的Module:‘:app‘pwww.chinasem.cnlatform‘android-32

Android实现打开本地pdf文件的两种方式

《Android实现打开本地pdf文件的两种方式》在现代应用中,PDF格式因其跨平台、稳定性好、展示内容一致等特点,在Android平台上,如何高效地打开本地PDF文件,不仅关系到用户体验,也直接影响... 目录一、项目概述二、相关知识2.1 PDF文件基本概述2.2 android 文件访问与存储权限2.

Android Studio 配置国内镜像源的实现步骤

《AndroidStudio配置国内镜像源的实现步骤》本文主要介绍了AndroidStudio配置国内镜像源的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、修改 hosts,解决 SDK 下载失败的问题二、修改 gradle 地址,解决 gradle

在Android平台上实现消息推送功能

《在Android平台上实现消息推送功能》随着移动互联网应用的飞速发展,消息推送已成为移动应用中不可或缺的功能,在Android平台上,实现消息推送涉及到服务端的消息发送、客户端的消息接收、通知渠道(... 目录一、项目概述二、相关知识介绍2.1 消息推送的基本原理2.2 Firebase Cloud Me

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Python GUI框架中的PyQt详解

《PythonGUI框架中的PyQt详解》PyQt是Python语言中最强大且广泛应用的GUI框架之一,基于Qt库的Python绑定实现,本文将深入解析PyQt的核心模块,并通过代码示例展示其应用场... 目录一、PyQt核心模块概览二、核心模块详解与示例1. QtCore - 核心基础模块2. QtWid

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda