Android Media
文章平均质量分 74
一个学渣的自我救赎
这个作者很懒,什么都没留下…
展开
-
Android MediaCodec
MediaCodec是Android音视频中相当重要的一个API。MediaCodec类可以用于使用一些基本的多媒体编解码器(音视频编解码组件),它是Android基本的多媒体支持基础架构的一部分通常和 MediaExtractor, MediaSync, MediaMuxer, MediaCrypto, MediaDrm, Image, Surface, and AudioTrack 一起使用。广义而言,编解码器处理输入数据以生成输出数据。它异步处理数据并使用一组输入和输出缓冲区。原创 2024-05-06 20:21:36 · 918 阅读 · 0 评论 -
Android13 MediaCodec创建流程分析
static MediaCodec createDecoderByType(String type):实例化支持给定MIME类型(如"video/avc")的输入数据的首选解码器。static MediaCodec createEncoderByType(String type):实例化支持给定MIME类型(如"video/avc")的输出数据的首选编码器。原创 2024-05-06 20:27:05 · 730 阅读 · 0 评论 -
Android13 MediaCodec configure流程分析
上述方法的主要处理如下:1、调用MediaCodec的handleSetSurface方法,设置Surface2、调用ACodecBufferChannel的setCrypto方法,设置加密3、调用ACodecBufferChannel的setDescrambler方法,设置解码器4、调用MediaCodec的onSetParameters方法,设置参数5、调用ACodec的initiateConfigureComponent方法,启动配置组件。原创 2024-05-06 21:35:51 · 1150 阅读 · 0 评论 -
Android MediaSource
Source 在播放器中起着拉流(Streaming)和解复用(demux)的作用,Source 设计的好坏直接影响到播放器的基础功能,NuPlayer::Source 是一个抽象类,定义了 Source 实现所需要的基本接口,例如 prepareAsync,start,dequeueAccessUnit等,除此之外还包含了一些共有的方法,例如 Callback发送 等。原创 2024-05-06 19:38:42 · 1108 阅读 · 0 评论 -
Android GenericSource代码分析
GenericSource 名为通用 source,但是往往它会被用来当作本地播放的 Source,由于本地播放的码流文件会有形形色色的封装格式,所以这个 source 会依赖解封装(demux)服务 media.extractor。除了依赖解封装外,source 还需要一个 IO 来读取码流,这个 IO 被封装在 DataSource中。原创 2024-05-06 19:46:59 · 852 阅读 · 0 评论 -
Android13 HTTPLiveSource代码分析
上面的代码主要是根据URL返回M3U文件,获取对应的BandwidthIndex,如果熟悉M3U文件,可以知道M3U有一级索引和二级索引。内部主要构建了一个LiveSession对象。网络请求,开始取播放列。原创 2024-05-06 19:50:18 · 344 阅读 · 0 评论 -
Android13 NuPlayer::start流程分析
这个方法的主要处理如下:1、调用Source的start方法,开始NuPlayer Source2、调用performSeek方法3、创建Renderer对象4、创建一个RendererLooper,并开始这个Looper5、调用Renderer的setPlaybackSettings方法,配置Playback速率等内容6、调用Renderer的setVideoFrameRate方法,设置视频帧率7、调用VideoDecoder的setRenderer方法,设置视频渲染器。原创 2024-05-06 18:28:10 · 1063 阅读 · 0 评论 -
Android NuPlayer
MediaPlayer的核心是NuPlayer实现视频的解码、渲染、同步、输出。NuPlayer基于StagefrightPlayer的基础类构建,利用了底层ALooper/AHandler机制来进行异步解码播放,ALooper轮询队列中的消息,把消息推送道AHandler中处理,最后通过handleMessage函数回调,做相应的逻辑处理。原创 2024-05-06 18:13:47 · 742 阅读 · 0 评论 -
Android13 MediaPlayerService setAudioStreamType流程分析
【代码】Android13 MediaPlayerService setAudioStreamType流程分析。原创 2024-05-06 14:10:31 · 152 阅读 · 0 评论 -
Android13 MediaPlayerService setParameters流程分析
【代码】Android13 MediaPlayerService setParameters流程分析。原创 2024-05-06 14:08:24 · 320 阅读 · 0 评论 -
Android13 MediaPlayerService start流程分析
上面方法会调用MediaPlayerBase的setLooping方法和start方法,并返回start的执行结果,setLooping方法我们不在这里分析,我们继续分析MediaPlayerBase的start方法。原创 2024-05-06 13:59:04 · 417 阅读 · 0 评论 -
Android13 MediaPlayerService prepareAsync流程分析
首先在每次MediaPlayer调用create创建的时候,会调用一次prepare,这个时候会走入NuPlayerDriver::prepareAsync中的STATE_UNPREPARED,之后会先调用stop一下,从而将NuPlayer播放器的状态切换为STATE_STOPPED态,之后再次调用prepare进入NuPlayerDriver::prepareAsync的STATE_STOPPED流程。原创 2024-05-06 14:01:25 · 334 阅读 · 0 评论 -
Android13 MediaPlayerService setDataSource流程分析
上面方法主要处理如下:调用MediaPlayerFactory的getPlayerType,获取playerType。调用setDataSource_pre方法。调用MediaPlayerBase的setDataSource方法,然后将结果作为参数调用setDataSource_post方法。原创 2024-05-06 14:06:56 · 486 阅读 · 0 评论 -
Android13 MediaPlayerService创建流程分析
MediaPlayerService在媒体播放框架中是一个很重要的服务,它运行在mediaserver进程中。通过new的方式,创建MediaPlayerService服务实例,并注册进系统的实现(要注意,注册的服务名称是“media.player”)。上面代码主要步骤如下:通过new的方式创建NuPlayerFactory对象。调用registerFactory_l方法。原创 2024-05-06 13:56:13 · 207 阅读 · 0 评论 -
Android13 MediaPlayer prepare流程分析
我们从MediaPlayer的prepare方法开始,prepare是一个同步方法,直到MediaPlayer已经准备好数据即将播放,也就是播放器回调了onPrepared方法,进入Prepared状态。原创 2024-05-06 13:23:52 · 1039 阅读 · 0 评论 -
Android13 MediaPlayer 创建流程分析
MediaPlayer可以通过两种方法进行创建。方法一:通过new一个MediaPlayer对象的方法进行创建,MediaPlayer的构造函数如下:方法二:通过MediaPlayer的create方法进行创建。原创 2024-05-06 12:50:15 · 963 阅读 · 0 评论 -
Android MediaPlayer
MediaPlayer是Android系统中一个用于播放本地或网络上的音视频文件的类,它可以播放多种音视频格式,例如MP3、MP4、3GP、AVI、MKV、FLV等。MediaPlayer功能非常强大,提供了丰富的属性和方法,可以满足多种音视频播放的需求,其中包括:设置音频文件资源:MediaPlayer可以通过setDataSource()方法设置要播放的音视频文件的资源。原创 2024-05-06 12:41:47 · 2066 阅读 · 0 评论 -
Android13 MediaPlayer start流程分析
上面方法主要处理如下:调用baseStart方法,也就是父类PlayerBase的baseStart方法。调用stayAwake方法,保持电源唤醒状态。调用_start方法,_start是一个native方法,因此会通过JNI调用android_media_MediaPlayer_start方法。原创 2024-05-06 12:58:25 · 576 阅读 · 0 评论 -
Android13 MediaPlayer setDisplay流程分析
上面方法主要处理如下:调用_setVideoSurface方法,设置Video Surface。调用updateSurfaceScreenOn方法,更新Surface到屏幕上。原创 2024-05-06 13:28:41 · 362 阅读 · 0 评论 -
Android13 AAudioStream_read流程分析
【代码】Android13 AAudioStream_read流程分析。原创 2024-05-07 08:30:39 · 257 阅读 · 0 评论 -
Android13 AAudioStream_write流程分析
1、调用AudioEndpoint的setDataReadCounter方法,设置数据读取计数器。2、调用writeNowWithConversion方法。原创 2024-05-07 08:27:56 · 497 阅读 · 1 评论 -
Android AHandler
AHandler是Android native层实现的一个异步消息机制,在这个机制中所有的处理都是异步的,将变量封装到一个消息AMessage结构体中,然后放到队列中去,后台专门有一个线程ALooper会从这个队列中取出消息然后分发执行,执行函数就是AHandler实例的onMessageReceived。在Android中AHandler机制在Android多媒体框架中使用。发送的消息按照是否需要答复,分为普通消息和需答复消息。原创 2024-05-06 22:08:25 · 720 阅读 · 0 评论 -
Android MediaProjection
MediaProjection是Android提供的一个API,它允许应用程序捕获和录制设备屏幕上的内容。通过使用MediaProjection API,应用程序可以捕获屏幕上的视频和音频,并将其保存为视频文件或流式传输到网络。MediaProjection API还可以用于创建屏幕截图和屏幕录制应用程序。使用MediaProjection API需要以下步骤:获取MediaProjectionManager实例。原创 2024-05-06 21:59:26 · 1076 阅读 · 0 评论 -
Android MediaRecorder
MediaRecorder是Android平台上的一个多媒体录制类,它可以用于录制音频和视频数据流。它的整体架构包括录制数据流框架和StagefrightRecorder。使用MediaRecorder可以通过设置一些参数来控制录制的音频和视频的质量、格式、编码等。原创 2024-05-06 21:57:01 · 403 阅读 · 0 评论 -
Android MediaExtractor
MediaExtractor是Android系统中的媒体解封装库,它可以从视频或音频文件中提取媒体轨道的数据,例如视频、音频、字幕等,并将其分离出来,提供给应用程序进行解码、处理和播放。需要注意的是,MediaExtractor只能解封装媒体文件中的音视频等媒体轨道,而不能解析整个媒体文件的结构。如果需要解析整个媒体文件的结构,需要使用其他库或框架。MediaExtractor支持的格式包括但不限于MP4、3GP、MKV、FLV等。break;原创 2024-05-06 21:54:14 · 528 阅读 · 0 评论 -
Android MediaMuxer
MediaMuxer是Android提供的一个用于音视频封装的类,可以将音频和视频数据封装成一个完整的音视频文件。它可以将多个音频和视频轨道合并成一个文件,并且可以对音视频进行编码和封装。MediaMuxer的使用需要先构造MediaMuxer对象,然后添加音视频轨道,最后调用start()方法开始合成音视频文件。在添加音视频轨道时,需要先构造MediaFormat对象,设置音视频的编码格式、采样率、码率等参数,然后调用addTrack()方法将轨道添加到MediaMuxer中。原创 2024-05-06 21:52:00 · 418 阅读 · 0 评论 -
Android OpenMAX
OpenMAX™是一个免版税的跨平台API标准,通过支持跨多个操作系统和芯片平台开发、集成和编程加速多媒体组件,提供了全面的流媒体编解码器和应用程序可移植性。OpenMAX API将与处理器一起发布,使库和编解码器的用户能够快速有效地充分利用新处理器的加速潜力——而不管底层硬件架构如何。随着多媒体硬件平台的发展步伐逐渐加快,消费者对应用程序,如智能手机、音频和视频媒体播放器和游戏控制台等平台上的视频、音频、语音和3D的需求不断增长。一般来说,这类产品需要高性能处理和高数据吞吐量能力。原创 2024-05-06 21:50:41 · 965 阅读 · 0 评论 -
Android Media——使用MediaController实现音乐播放
在客户端与服务端建立连接后,就可以调用mMediaController的播放、暂停、上下首、跳转某个时间点方法了,如:在客户端Activity的播放按键onClick回调时调用mMediaController.getTransportControls().play(),这时在服务端的MediaSession.Callback() 的onPlay()方法就会被调用,我们可以在onPlay方法中调用MediaPlay的start方法。原创 2024-05-02 15:58:50 · 479 阅读 · 0 评论 -
Android Medai——使用MediaCodec编码H264视频
配置好后,可以调用start启动编码工作,进入Executing状态。编码线程是真正的编码过程,本例子是将数据编码为h264。设置好相关配置格式后,调用configure进行配置。至此,整个编码为h264文件的过程就结束了。原创 2024-05-02 15:56:27 · 545 阅读 · 0 评论 -
Android Media——使用MediaCodec解码MP4视频并播放
视频解码线程主要内容就是进行解码的流程控制。上面表示创建了一个解码器,并指定了解码类型为avc的视频解码器。原创 2024-05-02 15:14:39 · 1195 阅读 · 0 评论 -
Android Audio——利用AudioManager请求和放弃音频焦点
AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK:效果同AUDIOFOCUS_GAIN_TRANSIENT,只是希望上一个持有焦点的App减小其播放声音(但仍可以播放),此时会混音播放。AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE: 表示申请一个短暂的音频焦点,并且会希望系统不要播放任何突然的声音(例如通知,提醒等),例如用户在录音。AUDIOFOCUS_GAIN: 此参数表示希望申请一个永久的音频焦点,并且希望上一个持有音频焦点的App停止播放;原创 2024-05-02 14:03:17 · 1293 阅读 · 1 评论 -
Android Media——使用MediaPlayer播放SD卡中的音频
MediaPlayer是Android当中开发音视频应用的一个重要组件,它不仅支持本地音视频的播放,同时也能够播放网络的音视频,支持多种音视频播放格式。在onDestroy函数中stop和release mediaPlayer,在verifyStoragePermissions函数中申请权限,如果只播放SD卡目录的歌曲申请个读权限就可以了,我也把写申请了。最后在onClick中根据不同的按键调用mediaPlayer的函数进行播放、暂停(再次播放继续播放)、和停止(再次播放从头播放)。原创 2024-05-02 14:23:19 · 1015 阅读 · 2 评论