
Android多媒体
介绍Android多媒体开发相关的技术,包括本地音视频的播放与录制,以及流媒体的播放。
ameyume
蓝蓝的天,白云朵朵。
展开
-
Android Q中外部存储盘路径正则表达式的理解
AndroidQ的ModernMediaScanner.java文件中以下两个正则表达式,具体该怎么解读? private static final Pattern PATTERN_VISIBLE = Pattern.compile( "(?i)^/storage/[^/]+(?:/[0-9]+)?(?:/Android/sandbox/([^/]+))?$"...原创 2019-10-14 11:42:09 · 1488 阅读 · 0 评论 -
FLV文件格式看这三篇文章就够了
1. 流媒体-FLV格式详解及数据分析2. flv文件格式解析3. flv格式详解+实例剖析对于音频Tag,如图:分析如下:先看下tag header定义:对照tag header定义,可知08表示音频tag,后面的3字节00 00 07表示数据部分的长度大小为7,即从stream id后面的长度为7;3字节的时间戳00 00 00和1字节扩展时间戳00 都是0...原创 2019-01-13 11:38:42 · 873 阅读 · 0 评论 -
MediaRecorder framework层的处理流程
本文主要分析framework层MediaRecorder.cpp文件对应的MediaRecorder类的处理流程。MediaRecorder.cpp通过android_media_MediaRecorder.cpp JNI层与Java API类MediaRecorder.java相互关联。下面通过对MediaRecorder类的几个主要函数进行分析来学习MediaRecorder的结构和原创 2012-08-14 23:55:39 · 5798 阅读 · 1 评论 -
MediaMetadataRetriever类取得媒体文件信息
API说明:MediaMetadataRetriever class provides a unified interface for retrieving frame and meta data from an input media file.MediaMetadataRetriever类提供了一个统一的接口用于从一个输入媒体文件中取得帧和元数据。API官方链接:http://deve原创 2012-08-10 00:00:20 · 30193 阅读 · 4 评论 -
MediaPlayer中创建AudioTrack的过程
MediaPlayer中创建AudioTrack的过程使用MediaPlayer播放音视频时,会创建AudioTrack对象用于播放音频数据。下面就来看看MediaPlayer创建AudioTrack的过程:1.创建AudioTrack对象MediaPlayer类中并没有直接创建AudioTrack,而是把创建AudioTrack对象的操作放在了MediaPlayerServi原创 2012-06-04 17:12:28 · 7450 阅读 · 0 评论 -
MediaPlayer和AudioTrack播放Audio的区别与联系
播放声音可以用MediaPlayer和AudioTrack,两者都提供了java API供应用开发者使用。虽然都可以播放声音,但两者还是有很大的区别的。其中最大的区别是MediaPlayer可以播放多种格式的声音文件,例如MP3,AAC,WAV,OGG,MIDI等。MediaPlayer会在framework层创建对应的音频解码器。而AudioTrack只能播放已经解码的PCM流,如果是文原创 2012-05-31 10:30:50 · 23372 阅读 · 3 评论 -
StagefrightPlayer取得当前播放位置和总时长
1. StagefrightPlayer计算取得的播放时长和总时长的单位是微秒(us),需要四舍五入为整数秒,用于播放器显示时长和播放进度。在计算时,是按照四舍五入的方式来计算的,即小于500ms的舍去,不计入时长;大于等于500ms的按照1s计入时长。这一点需要特别注意,因为在播放较短的文件时,在更新进度条时滑动块可能移动的不平滑。计算方法如下:status_t Stag原创 2012-05-10 15:08:32 · 3329 阅读 · 0 评论 -
AwesomePlayer类的seek操作介绍
AwesomePlayer类的seek操作介绍1.执行音频seek的地方(mAudioPlayer->seekTo)只有两处,一处是在seekAudioIfNecessary_l函数中,另外一处是在finishSeekIfNecessary函数中。2.执行seekAudioIfNecessary_l函数的地方有两处,一处是在seekTo_l函数中,另外一处是在play_l函数中。原创 2012-05-24 16:30:45 · 4173 阅读 · 1 评论 -
理解ICS Surface和SurfaceFlinger的处理流程
首先看下ISurfaceComposer接口ISurfaceComposer定义了基础接口,供客户端和Server端交互使用。ISurfaceComposer接口的派生类图示:------------------------------------------------------------------接口ISurfaceComposerClient->Bn原创 2012-03-16 10:30:44 · 4164 阅读 · 0 评论 -
ICS4.0.3创建NuPlayer的处理流程
ICS4.0.3中播放RTSP流媒体使用的播放器框架是NuPlayer,现在就分析创建NuPlayer的处理流程。1.创建Nulayer所做的处理在NuPlayerDriver::NuPlayerDriver()构造函数中:1.1 创建了ALooper对象mLooper,并调用了 mLooper->start函数,优先级为PRIORITY_AUDIO。 在ALooper:原创 2012-03-16 10:39:13 · 15625 阅读 · 12 评论 -
rtsp流媒体buffer填充的处理过程
NuPlayer流媒体播放器中从网络上取得的rtp包在解码和显示时所用buffer的填充和清空的机制,与stagefright框架播放本地视频时的处理流程类似。都是通过回调函数fillbuffer及emptybuffer来实现的。NuPlayer中的ACodec与Stagefright中的OMXCodec的作用相似。以下是rtsp流媒体中填充待解码的buffer,以及把解码后的buff原创 2012-03-23 16:53:32 · 12247 阅读 · 5 评论 -
设置RTSP, RTP和RTCP端口号
1.设置RTSP端口号设置RTSP端口号的处理位于ARTSPConnection.cpp文件中,首先从url中获取端口号,如果读取不到,则设置为默认端口554。代码处理如下:ARTSPConnection::ParseURL( const char *colonPos = strchr(host->c_str(), ':'); if (colonPos != NUL原创 2012-03-13 09:42:30 · 33275 阅读 · 1 评论 -
Android ICS创建StagefrightPlayer播放器的过程
ICS相比GB,在创建播放器时有少许变化。MediaPlayer::setDataSource(const sp& player)函数只是简单的把函数名改为MediaPlayer::attachNewPlayer(const sp& player),内部处理基本没有变化。MediaPlayerService类去掉了MediaPlayerService::create的重载函数,并且在cre原创 2011-12-14 14:58:49 · 3889 阅读 · 2 评论 -
RTSP连接服务器和从服务器接收数据的处理流程
RTSP连接服务器是否成功,以及是否从服务器接收到实际播放的数据,主要是判断两个linux select函数的执行结果。1.连接服务器的处理过程ARTSPConnection::onConnect(const sp &msg) int err = ::connect( mSocket, (const struct sockaddr *)&remote,原创 2011-12-27 17:50:23 · 5012 阅读 · 2 评论 -
视频码率,帧率和分辨率的联系与区别
视频码率,帧率和分辨率到底哪一个影响电影的清晰度码率:影响体积,与体积成正比:码率越大,体积越大;码率越小,体积越小。码率就是数据传输时单位时间传送的数据位数,一般我们用的单位是kbps即千位每秒。也就是取样率(并不等同与采样率,采样率的单位是Hz,表示每秒采样的次数),单位时间内取样率越大,精度就越高,处理出来的文件就越接近原始文件,但是文件体积与取样率是成正比的,所以几乎所有的编...原创 2012-03-01 09:23:50 · 143012 阅读 · 19 评论 -
AudioPlayer的处理流程
首先需要注意的是,AudioPlayer处理的是已经解码后的数据1.创建AudioPlayer对象(1)在 AwesomePlayer::play_l()函数中创建了AudioPlayer对象,并且在AwesomePlayer.cpp文件中,只在此函数中创建过AudioPlayer对象 if (mAudioSource != NULL) { if (mAudioP原创 2012-03-05 13:16:12 · 11853 阅读 · 2 评论 -
NuPlayer reset处理流程
1.NuPlayerDriver::reset() mPlayer->resetAsync();// 执行异步reset while (mResetInProgress) { // 等待reset完成,如果5秒未完成,则会出现ANR mCondition.wait(mLock); }2.NuPlayer::resetAsync()发送kWhatRe原创 2012-03-12 10:23:50 · 6800 阅读 · 1 评论