Android4.0的多媒体框架Nuplayer介绍
Android多媒体MediaPlayer使用详解

Android多媒体MediaPlayer使⽤详解现在的⼿机功能越来越丰富了,遥想10年前,MP3,MP4,MP5,还是很流⾏的,博主当时读⾼中时很想拥有⼀台,可以听⾳乐和看电影。
可是条件有限,学校也禁⽌此东西,所以只能偷偷的玩。
⽽现在我们的⼿机也很早以前就⽀持了这些功能,⽽且界⾯和功能也远远超过了MP4。
好吧,说多了,今天本⽂介绍的是Andriod系统⾃带的Mediaplayer,和VideoView实现简单的⾳乐和视频的播放,⾄于想做出如酷狗⾳乐这样的APP的话,只要想做,应该也不难,都是基于此实现了功能的扩展。
Android的MediaPlayer包含了Audio和Video的播放功能,在Android的界⾯上,Music和Video两个应⽤程序都是调⽤MediaPlaer来实现的。
⼀、播放⾳频⽂件⾸先看看MediaPlaer的⽣命周期下⾯是MediaPlayer提供的常⽤⽅法⽅法说明MediaPlayer构造⽅法create创建⼀个要播放的多媒体getCurrentPosition得到当前播放位置getDuration得到⽂件的时间getVideoHeight得到视频的⾼度getVideoWidth得到视频的宽度isLooping是否循环播放isPlaying是否正在播放pause暂停prepare准备(同步)prepareAsync准备(异步)release释放MediaPlayer对象相关的资源reset重置MediaPlayer对象为刚刚创建的状态seekTo指定播放的位置(以毫秒为单位的时间)setAudioStreamType设置流媒体的类型setDataSource设置多媒体数据来源(位置)setDisplay设置⽤SurfaceHolder来显⽰多媒体setLooping设置是否循环播放setOnButteringUpdateListener⽹络流媒体的缓冲监听setOnErrorListener设置错误信息监听setOnVideoSizeChangedListener视频尺⼨监听setScreenOnWhilePlaying设置是否使⽤SurfaceHolder来保持屏幕显⽰setVolume设置⾳量start开始播放stop停⽌播放MediaPlayer的⼯作流程是这样的:1,⾸先创建MediaPlaer对象; *2,然后调⽤setDataSource()⽅法来设置⾳频⽂件的路径;**3,再调⽤prepare()⽅法使MediaPlayer进⼊到准备状态;4,调⽤start⽅法就可以播放⾳频。
android多媒体框架

Android多媒体框架Android是目前全球使用最广泛的移动操作系统之一,拥有强大的多媒体功能支持。
在Android上,我们可以通过多媒体框架来实现音频、视频和图像的处理和播放。
本文将介绍Android多媒体框架的概念和相关API,帮助开发者更好地掌握Android多媒体开发的技术。
1. 多媒体框架概述Android多媒体框架是一组API和工具,用于处理和播放音频、视频和图像等多媒体资源。
它为开发者提供了丰富的功能和灵活的控制,可以实现高质量的多媒体应用。
Android的多媒体框架主要包括以下几个部分:MediaRecorder(音视频录制类):用于录制音频和视频。
MediaPlayer(音视频播放类):用于播放音频和视频。
Mediac(音视频编解码类):用于音视频的编解码。
MediaExtractor(音视频分离器类):用于将音视频文件分离成音频和视频轨道。
AudioTrack(音频播放类):用于音频的低级播放。
SoundPool(音频播放类):用于短音频的播放。
ImageReader(图像读取类):用于读取图像数据。
,Android还提供了一些其他的辅助类和接口,如MediaSession、MediaBrowser、MediaMetadataRetriever等,用于更高级的多媒体功能实现和交互。
2. 音频处理和播放音频是Android多媒体开发中非常重要的一部分。
在Android 上,我们可以使用MediaPlayer或AudioTrack来处理和播放音频。
MediaPlayer是Android中最常用的音频播放类,它可以播放本地文件或网络上的音频流。
我们可以通过setDataSource()方法设置音频源,通过prepareAsync()方法准备音频流,并通过start()方法开始播放。
AudioTrack是一个低级的音频播放类,它可以直接操作音频数据。
我们可以通过创建AudioTrack对象,并设置音频参数和缓冲区来进行音频播放。
安卓4.0系统文件夹全解析

安卓4.0系统文件夹全解析2012-05-26 01:15:23| 分类:学习|字号订阅现在android的版本有好几个,会存在不同之处,但里面的内容大致相同,灵活应用才是王道。
\system\app这个里面主要存放的是常规下载的应用程序,可以看到都是以APK格式结尾的文件。
在这个文件夹下的程序为系统默认的组件,自己安装的软件将不会出现在这里,而是\data\文件夹中。
\system\bin这个目录下的文件都是系统的本地程序,从bin文件夹名称可以看出是binary二进制的程序,里面主要是Linux系统自带的组件(命令)\system\etc从文件夹名称来看保存的都是系统的配置文件,比如APN接入点设置等核心配置。
\system\fonts字体文件夹,除了标准字体和粗体、斜体外可以看到文件体积最大的可能是中文字库,或一些unicode字库,从T-Mobile G1上可以清楚的看到显示简体中文正常,其中DroidSansFallback.ttf文件大小。
\system\frameworkframework主要是一些核心的文件,从后缀名为jar可以看出是是系统平台框架。
\system\liblib目录中存放的主要是系统底层库,一些so文件,如平台运行时库。
\system\media\system\media\audio铃声音乐文件夹,除了常规的铃声外还有一些系统提示事件音。
\system\sounds默认的音乐测试文件,仅有一个test.mid文件,用于播放测试的文件。
\system\usr用户文件夹,包含共享、键盘布局、时间区域文件等。
\system\app这个里面主要存放的是常规下载的应用程序,可以看到都是以APK格式结尾的文件。
在这个文件夹下的程序为系统默认的组件,自己安装的软件将不会出现在这里,而是\data\文件夹中。
\system\app\AlarmClock.apk 闹钟\system\app\AlarmClock.odex\system\app\Browser.apk 浏览器\system\app\Browser.odex\system\app\Bugreport.apk Bug报告\system\app\Bugreport.odex\system\app\Calculator.apk 计算器\system\app\Calculator.odex\system\app\Calendar.apk 日历\system\app\Calendar.odex\system\app\CalendarProvider.apk 日历提供\system\app\CalendarProvider.odex\system\app\Camera.apk 照相机\system\app\Camera.odex\system\app\com.amazon.mp3.apk 亚马逊音乐\system\app\Contacts.apk 联系人\system\app\Contacts.odex\system\app\DownloadProvider.apk 下载提供\system\app\DownloadProvider.odex\system\app\DrmProvider.apk DRM数字版权提供\system\app\DrmProvider.odex\system\app\Email.apk 电子邮件客户端\system\app\Email.odex\system\app\FieldTest.apk 测试程序\system\app\FieldTest.odex\system\app\GDataFeedsProvider.apk GoogleData提供\system\app\GDataFeedsProvider.odex\system\app\Gmail.apk Gmail电子邮件\system\app\Gmail.odex\system\app\GmailProvider.apk Gmail提供\system\app\GmailProvider.odex\system\app\GoogleApps.apk 谷歌程序包\system\app\GoogleApps.odex\system\app\GoogleSearch.apk 搜索工具\system\app\GoogleSearch.odex\system\app\gtalkservice.apk GTalk服务\system\app\gtalkservice.odex\system\app\HTMLViewer.apk HTML查看器\system\app\HTMLViewer.odex\system\app\IM.apk 即使通讯组件包含MSN、yahoo通\system\app\ImCredentialProvider.apk\system\app\ImProvider.apk\system\app\ImProvider.odex\system\app\Launcher.apk 启动加载器\system\app\Launcher.odex\system\app\Maps.apk 电子地图\system\app\Maps.odex\system\app\MediaProvider.apk 多媒体播放提供\system\app\MediaProvider.odex\system\app\Mms.apk 短信、彩信\system\app\Mms.odex\system\app\Music.apk 音乐播放器\system\app\Music.odex\system\app\MyFaves.apk T-Mobile MyFaves程序\system\app\MyFaves.odex\system\app\PackageInstaller.apk apk安装程序\system\app\PackageInstaller.odex\system\app\Phone.apk 电话拨号器\system\app\Phone.odex\system\app\Settings.apk 系统设置\system\app\Settings.odex\system\app\SettingsProvider.apk 设置提供\system\app\SettingsProvider.odex\system\app\SetupWizard.apk 设置向导\system\app\SetupWizard.odex\system\app\SoundRecorder.apk 录音工具\system\app\SoundRecorder.odex\system\app\Street.apk 街景地图\system\app\Street.odex\system\app\Sync.apk 同步程序\system\app\Sync.odex\system\app\Talk.apk 语音程序\system\app\Talk.odex\system\app\TelephonyProvider.apk 电话提供\system\app\TelephonyProvider.odex\system\app\Updater.apk 更新程序\system\app\Updater.odex\system\app\Vending.apk 制造商信息\system\app\Vending.odex\system\app\VoiceDialer.apk 语音拨号器\system\app\VoiceDialer.odex\system\app\**.apk **视频\system\app\**.odex\system\bin这个目录下的文件都是系统的本地程序,从bin文件夹名称可以看出是binary二进制的程序,里面主要是Linux系统自带的组件:\system\bin\akmd\system\bin\am\system\bin\app_process 系统进程\system\bin\dalvikvm Dalvik虚拟机宿主\system\bin\dbus-daemon 系统BUS总线监控\system\bin\debuggerd 调试器\system\bin\debug_tool 调试工具\system\bin\dexopt DEX选项\system\bin\dhcpcd DHCP服务器\system\bin\dumpstate 状态抓取器\system\bin\dumpsys 系统抓取器\system\bin\dvz\system\bin\fillup\system\bin\flash_image 闪存映像\system\bin\hciattach\system\bin\hcid HCID内核\system\bin\hostapd\system\bin\hostapd_cli\system\bin\htclogkernel\system\bin\input\system\bin\installd\system\bin\itr\system\bin\linker\system\bin\logcat Logcat日志打印\system\bin\logwrapper\system\bin\mediaserver\system\bin\monkey\system\bin\mountd 存储挂载器\system\bin\netcfg 网络设置\system\bin\ping Ping程序\system\bin\playmp3 MP3播放器\system\bin\pm 包管理器\system\bin\qemud QEMU虚拟机\system\bin\radiooptions 无线选项\system\bin\rild RIL组件\system\bin\sdptool\system\bin\sdutil\system\bin\service\system\bin\servicemanager 服务管理器\system\bin\sh\system\bin\ssltest SSL测试\system\bin\surfaceflinger 触摸感应驱动\system\bin\svc 服务\system\bin\system_server\system\bin\telnetd Telnet组件\system\bin\toolbox\system\bin\wlan_loader\system\bin\wpa_cli\system\bin\wpa_supplicant\system\etc从文件夹名称来看保存的都是系统的配置文件,比如APN接入点设置等核心配置。
Android多媒体分析

MediaPlayer播放器调用及Parser实现过程一、调用播放器 (Frameworks)在mediaPlayer中,根据前面打开的文件格式,分别调用三种播放器的一种。
分别为PVPlayer、MidiPlayer、VobisPlayer,下面说明具体步聚:1... 获取文件格式在MediaScanner.java JAVA程序中,可以得到以下几个文件信息:(1)文件格式,比如MP3,MP4等。
(2)文件类别:音频,视频。
(3)文件来源:本地,网络。
得到文件相关信息后,如果系统支持,则加入到播放列表,反之则DELETE 加载的相关资源。
获取具体信息的相关函数调用了MediaFile.java程序相关函数实现。
FILE:MediaScanner.java ../Frameworks/base/media/java/media MediaFile.java ../Frameworks/base/media/java/media2.创建播放器(MediaPlayer Service)在系统中,一共有三种播放器:(1) PVPlayer:一般的本地文件播放都用PVPLAYER(2) MidiPlayer:这个播放器目前还没有测试。
(3) VobisPlayer:通过URL网络播放。
在这一层中,主要在MediaPlayerService.cpp文件中实现,根据得到的播放格式(getPlayerType函数)创建相关的播放器(createPlayer)。
如果创建了PVPlayer,则直接进入了OpenCore,如果为另外两种播放器,需要对文件的一处理程序在同路径下分别有一个文件(Midifile.cpp和vorbisPlayer.cpp).FILE:MediaPlayerService.cpp ../Frameworks/base/media/Libmediaplayerservice/二、PVPlayer(OPENCORE)1.PVPlayer消息处理。
一篇关于stagefright的essay

一篇关于stagefright的essay1、前言本文将会描述stagefright漏洞原理、POC以及如何防御。
2 、详述先来看下攻击面和攻击向量这两个概念。
从技术角度讲攻击面指的是攻击者可以执行并进而攻击的代码,简单的讲就是代码中可能存在着的尚待挖掘的安全漏洞位置。
和攻击面关系紧密的就是攻击向量,同样从技术角度将攻击向量指的是攻击者实施行动的方式,用来描述执行攻击的方法,简单的讲攻击向量描述的攻击者是如何达到并触发任意给定的漏洞代码。
为了描述stagefright漏洞的攻击面和获得更多的攻击向量,有必要简要的分析分析一下stagefright框架在整个对媒体播放器(mediaplayer)框架中的地位和作用。
2.1 MediaPlayer概述Android 的MediaPlayer框架为系统提供多媒体(Audio和video)的播放功能,并提供应用MediaPlayer框架整体架构图从架构图中我们可以看到,MediaPlayer在本地框架中由MediaPlayerService负责多媒体的功能的对外服务接口,其中把多媒体播放相关的功能交由真正的多媒体播放器引擎StagefrightPlayer和nuplayerStagefrightPlayer。
MediaPlayerService把对多媒体文件的元数据解析和获取的功能委托给MetadataRetrieverClient,MetadataRetrieverClient只是起到功能中转作用,中的实现由StagefrightMetadataRetriever和MidiMetadataRetriever完成。
MediaPlayerService把对多媒体(Audio和video)的记录的功能委托给MediaRecorderClient,功能的最终实现者是StagefrightRecorder。
2.2 、攻击面stagefright漏洞的攻击面就是MediaPlayer多媒体架构中对多媒体文件的元数据解析的代码位置。
④NuPlayer播放框架之Renderer源码分析

④NuPlayer播放框架之Renderer源码分析[时间:2016-11] [状态:Open][关键词:android,nuplayer,开源播放器,播放框架,渲染器,render]0 导读之前我们分析了NuPlayer的实现代码,本⽂将重点聚焦于其中的⼀部分——渲染器(Renderer)。
从功能安排来说,Renderer的主要功能有:⾳视频原始数据缓存操作⾳频播放(到声卡)视频显⽰(到显卡)⾳视频同步其他辅助播放器控制的操作其他获取渲染状态/属性的接⼝接下来主要从Renderer的对外接⼝和实现说明下其中的处理逻辑。
本⽂是我的NuPlayer播放框架的第四篇。
1 NuPlayer::Renderer对外接⼝及主要成员// code frome ~/frameworks/av/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.hstruct NuPlayer::Renderer : public AHandler {Renderer(const sp<MediaPlayerBase::AudioSink> &sink,const sp<AMessage> ¬ify, uint32_t flags = 0);static size_t AudioSinkCallback(MediaPlayerBase::AudioSink *audioSink,void *data, size_t size, void *me,MediaPlayerBase::AudioSink::cb_event_t event);// 缓冲⾳视频原始数据void queueBuffer(bool audio,const sp<ABuffer> &buffer, const sp<AMessage> ¬ifyConsumed);void queueEOS(bool audio, status_t finalResult);status_t setPlaybackSettings(const AudioPlaybackRate &rate /* sanitized */);status_t getPlaybackSettings(AudioPlaybackRate *rate /* nonnull */);status_t setSyncSettings(const AVSyncSettings &sync, float videoFpsHint);status_t getSyncSettings(AVSyncSettings *sync /* nonnull */, float *videoFps /* nonnull */);void flush(bool audio, bool notifyComplete);void signalTimeDiscontinuity();void signalAudioSinkChanged();void signalDisableOffloadAudio();void signalEnableOffloadAudio();void pause();void resume();void setVideoFrameRate(float fps);status_t getCurrentPosition(int64_t *mediaUs);int64_t getVideoLateByUs();status_t openAudioSink( const sp<AMessage> &format, bool offloadOnly,bool hasVideo, uint32_t flags, bool *isOffloaded);void closeAudioSink();private:struct QueueEntry {sp<ABuffer> mBuffer;sp<AMessage> mNotifyConsumed;size_t mOffset;status_t mFinalResult;int32_t mBufferOrdinal;};static const int64_t kMinPositionUpdateDelayUs;sp<MediaPlayerBase::AudioSink> mAudioSink;bool mUseVirtualAudioSink;sp<AMessage> mNotify;Mutex mLock;uint32_t mFlags;List<QueueEntry> mAudioQueue; // ⾳频缓冲List<QueueEntry> mVideoQueue; // 视频缓冲uint32_t mNumFramesWritten;sp<VideoFrameScheduler> mVideoScheduler;sp<MediaClock> mMediaClock;float mPlaybackRate; // audio track rate}⾸先看到的是Renderer本⾝是AHandler的⼦类。
Android应用多窗口模式开发指南

Android应用多窗口模式开发指南Android操作系统自4.0版本开始引入了多窗口模式,这使得在同一时间可以在屏幕上同时运行多个应用程序。
多窗口模式为用户提供了更加便捷和高效的多任务处理体验。
本文将为开发人员提供一个Android应用多窗口模式开发的指南,以帮助他们实现这一功能。
一、概述多窗口模式是指在Android设备的屏幕上同时显示多个应用程序界面,用户可以在这些应用程序之间自由切换和操作。
多窗口模式既可以在手机上使用,也可以在平板电脑等大屏设备上使用。
对于开发人员来说,实现多窗口模式需要考虑以下几个方面:1. 界面适配:多窗口模式下,应用程序的界面需要适配不同的屏幕尺寸和分辨率,以保证用户在不同设备上都能获得良好的用户体验。
2. 交互设计:多窗口模式下,用户需要能够方便地在不同应用程序之间切换和操作,因此应用程序的交互设计需要符合用户的使用习惯。
3. 数据共享:多窗口模式下,用户可能需要在不同应用程序之间共享数据,应用程序需要支持数据的无缝传输和共享。
二、使用多窗口模式在Android应用中使用多窗口模式需要进行以下几个步骤:1. 声明支持多窗口模式:在应用程序的清单文件(AndroidManifest.xml)中,需要在<application>标签中添加以下属性:android:resizeableActivity="true"。
这样声明之后,应用程序才能在多窗口模式下运行。
2. 适配界面布局:为了适应不同屏幕尺寸和分辨率,在设计应用程序的界面布局时,可以使用百分比布局或者约束布局等灵活的布局方式,避免使用具体的像素值。
3. 响应多窗口模式事件:在应用程序中,需要对多窗口模式下的事件进行处理,比如窗口大小变化事件、窗口焦点变化事件等。
可以通过注册监听器来处理这些事件,确保应用程序可以正确响应用户的操作。
4. 支持数据共享:在多窗口模式下,用户可能需要在不同应用程序之间共享数据,开发人员可以通过使用系统提供的共享机制来实现数据的传输。
【优质文档】androidppt播放器-推荐word版 (6页)

本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!== 本文为word格式,下载后可方便编辑和修改! ==androidppt播放器篇一:Android4.0的多媒体框架Nuplayer介绍Android4.x的RTSP框架学习——NuPlayer介绍本文介绍如下内容:播放框架介绍 RTSP源介绍HTTP流媒体的区别要研究的点NuPlayer框图:概述:1. 整个播放框架是基于ALooper、AHandler和Amessage实现的消息机制的。
2. 从MediaPlayerService看,有RTSP和http且为m3u8的url会用NuPlayerDriver,前者就走RTSPSource后者走HTTPLiveSource(还没看呢)。
3. 分播放框架和RTSP源两部分来介绍,他们之间耦合很低,可以分开看代码。
播放框架:1. NuPlayerDriver是对NuPlayer的封装,前者继承MediaPlayerInterface接口,后者实现播放的功能。
2. NuPlayer通过RTSPSource接口得到数据流的信息和解码数据本身,RTSPSource的接口有start、getFormat、getDuration、seekTo、dequeueAccessUnit、feedMoreTSData和stop。
后面会对NuPlayer做详细介绍。
3. Decoder的核心是ACodec,后者相当于stagefright的OMXCodec,实例化一个OMX的Client,调用OMX组件,实现Decode功能。
4. ACodec有几个跟OMX状态对应的内部类,这里有个状态机的概念。
如果一个msg的Handler为Acodec,那么他对应的处理函数就对应其所在状态的onMessageReceived实现。
看ACodec代码要了解OMX的一些概念,否则找不到调用关系了,有些流程是要靠OMX回调来串联的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Android4.x 的RTSP 框架学习
——NuPlayer 介绍
本文介绍如下内容:
播放框架介绍 RTSP 源介绍
HTTP 流媒体的区别 要研究的点
NuPlayer 框图:
NuPlayer
NuPlayerDriver
ALooper
<<接口>>
MediaPlayerInterface
NuPlayer::Renderer
NuPlayer::Decoder
ACodec::UninitializedState
AHierarchicalStateMachine
ACodec ACodec::UninitializedState
ACodec::LoadedToIdleState ACodec::IdleToExecutingState ACodec::ExecutingState
ACodec::ExecutingToIdleState ACodec::IdleToLoadedState ACodec::FlushingState
AHandler
1
*
*
11*
<<接口>>NuPlayer::Source
*1
NuPlayer::HTTPLiveSource
NuPlayer::RTSPSource
ALooper
1*
MyHandler
*
1
ARTPConnection ARTSPConnection ALooper
1*
mNetLooper for
ARTPConnection
ARTPSource
ARTPAssembler AAVCAssembler
AAVCAssembler
AMPEG4AudioAssembler AH263Assembler AAMRAssembler AAMRAssembler
AMPEG4ElementaryAssembler ARawAudioAssembler
AnotherPacketSource
<<接口>>MediaSource
APacketSource
*
1
*
1*
1OMX AHandler
概述:
1.整个播放框架是基于ALooper、AHandler和Amessage实现的消息机制的。
2.从MediaPlayerService看,有RTSP和http且为m3u8的url会用NuPlayerDriver,前者
就走RTSPSource后者走HTTPLiveSource(还没看呢)。
3.分播放框架和RTSP源两部分来介绍,他们之间耦合很低,可以分开看代码。
播放框架:
1.NuPlayerDriver是对NuPlayer的封装,前者继承MediaPlayerInterface接口,后者实现
播放的功能。
2.NuPlayer通过RTSPSource接口得到数据流的信息和解码数据本身,RTSPSource的接口
有start、getFormat、getDuration、seekTo、dequeueAccessUnit、feedMoreTSData和stop。
后面会对NuPlayer做详细介绍。
3.Decoder的核心是ACodec,后者相当于stagefright的OMXCodec,实例化一个OMX的
Client,调用OMX组件,实现Decode功能。
4.ACodec有几个跟OMX状态对应的内部类,这里有个状态机的概念。
如果一个msg的
Handler为Acodec,那么他对应的处理函数就对应其所在状态的onMessageReceived实现。
看ACodec代码要了解OMX的一些概念,否则找不到调用关系了,有些流程是要靠OMX回调来串联的。
5.Render,奇怪,我始终没能找到google组件软解的显示是在哪里实现的,期待debug。
6.Android4.0引入了SurfaceTexture的概念,在给组件分配输出buffer时有两种方式可选,
分配一段内存buffer,或是从显示模块分配buffer,后者显然更高效。
前者还需要再做一次格式转换,后者貌似由OMX完成。
7.OMX组件,在qcom平台上有两套组件plugin,qcom的和google的,qcom在
libstagefrighthw.so中。
google的组件和库命名规则为"OMX.google. aac.decaac.decoder"//对应动态库libstagefright_soft_aacdec.so
RTSP源:
1.RTSPSource的与播放框架接口,是播放框架的数据源。
其主要接口有:
2.AnotherPacketSource在RTSPSource中作为mAudioTrack和mVideoTrack,他虽然继承
了MediaSource接口,但是并没有使用read来读数据,而是通过dequeueAccessUnit接
口,Server端的压缩流通过queueAccessUnit保存到这里。
3.MyHandler是核心,其中包含ARTSPConnection和ARTPConnection两大部分。
MyHandler负责向Server端发送Request和处理Response。
4.ARTSPConnection负责维护RTSP socket,发送Request,循环接收Server端数据,响应
Server的Request。
这里只是接收Response,真正的处理在MyHandler侧。
5.代码使用的RTSP请求有DESCRIBE,其Response中有SDP信息,接下来是SETUP,
将本端的端口信息等发给服务器,然后是PLAY。
为了保持RTSP链接,还要周期性发OPTIONS。
6.ARTPConnection负责RTP和RTCP两个socket,接收RTP和RTCP包,周期性发送RTCP
包。
Public接口:
Private接口:
7.每个RTP数据流都有一个ARTPSource,后者会创建一个ARTPAssembler。
依据处理数
据流的压缩格式,实例化对应格式的Assembler。
ARTPAssembler的Public接口:
ARTPAssembler的Private接口:
8.ARTPAssembler对ARTPConnection接收到的数据进行处理,如A VC数据,他会把单一
NAL,NAL分片和复合NAL分别处理后,都以单独NAL的形式回调传给RTSPSource,存放在AnotherPacketSource中,供decoder端使用。
HTTP的比较:
1.HTTPLive还没看。
2.普通的http和rtsp最大的区别是什么呢?
HTTP流媒体是本地解析,而RTSP流媒体是server段解析。
HTTP流媒体通过HTTP 协议,下载一定buffer量的server端文件到本地,利用本地的parser,像播放文件一样解析,播放。
而RTSP流媒体,从server端得到的就是可解码流。
HTTP在实现seek时,是丢掉当前所有buffer内容的。
要研究的点:
1,RTSP协议,request和response数据包的解析。
2,RTSP播放过程的管理。
Seek过程为,先向Server端发一个PAUSE,带响应后再发一个带时间点的PLAY请求。
3,SDP协议。
4,RTP和RTCP协议,要了解接收到的RTP包头字段的信息。
5,RTSP协议,要了解接收到RTCP SR(SendReprot)和发送出的RR(Receive Report)信息。
6,如A VC要了解NAL单元信息。