首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何让Android MediaSession在展示进度时考虑播放速度

Android MediaSession是Android系统提供的一个用于控制媒体播放的API。在展示进度时考虑播放速度,可以通过以下步骤实现:

  1. 获取媒体文件的总时长:使用MediaPlayer或ExoPlayer等媒体播放器库加载媒体文件,并通过相应的方法获取总时长。
  2. 获取当前播放位置:通过媒体播放器库提供的方法获取当前播放位置。
  3. 获取播放速度:通过媒体播放器库提供的方法获取当前播放速度。
  4. 计算展示进度:将当前播放位置除以总时长,得到播放进度的百分比。
  5. 考虑播放速度:将播放进度乘以播放速度,得到考虑播放速度后的展示进度。
  6. 更新MediaSession的播放进度:使用MediaSession的setPlaybackState方法更新播放进度,同时更新MediaMetadata中的播放进度信息。

以下是一个示例代码片段,展示了如何在Android MediaSession中考虑播放速度来展示进度:

代码语言:java
复制
// 获取媒体文件的总时长
long duration = mediaPlayer.getDuration();

// 获取当前播放位置
long currentPosition = mediaPlayer.getCurrentPosition();

// 获取播放速度
float playbackSpeed = mediaPlayer.getPlaybackParams().getSpeed();

// 计算展示进度
float progress = (float) currentPosition / duration;

// 考虑播放速度
float displayProgress = progress * playbackSpeed;

// 更新MediaSession的播放进度
PlaybackState.Builder playbackStateBuilder = new PlaybackState.Builder();
playbackStateBuilder.setState(PlaybackState.STATE_PLAYING, currentPosition, playbackSpeed);
playbackStateBuilder.setBufferedPosition(mediaPlayer.getBufferedPosition());
playbackStateBuilder.setActions(PlaybackState.ACTION_PLAY_PAUSE | PlaybackState.ACTION_SEEK_TO);
playbackStateBuilder.setErrorMessage(null);
playbackStateBuilder.setActiveQueueItemId(MediaSession.QueueItem.UNKNOWN_ID);
playbackStateBuilder.setExtras(null);
playbackStateBuilder.setPlaybackSpeed(playbackSpeed);
playbackStateBuilder.setUpdateTime(SystemClock.elapsedRealtime());
mediaSession.setPlaybackState(playbackStateBuilder.build());

// 更新MediaMetadata的播放进度信息
MediaMetadata.Builder metadataBuilder = new MediaMetadata.Builder();
metadataBuilder.putLong(MediaMetadata.METADATA_KEY_DURATION, duration);
metadataBuilder.putLong(MediaMetadata.METADATA_KEY_POSITION, currentPosition);
metadataBuilder.putFloat(MediaMetadata.METADATA_KEY_PLAYBACK_SPEED, playbackSpeed);
mediaSession.setMetadata(metadataBuilder.build());

在上述代码中,我们使用MediaPlayer获取媒体文件的总时长和当前播放位置,使用getPlaybackParams方法获取播放速度。然后,我们计算展示进度,并将其乘以播放速度得到考虑播放速度后的展示进度。最后,我们使用MediaSession的setPlaybackState方法更新播放进度,并使用setMetadata方法更新MediaMetadata中的播放进度信息。

腾讯云相关产品和产品介绍链接地址:

请注意,以上链接仅供参考,具体产品选择应根据实际需求进行评估和决策。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

理解音频焦点 (第 33 部分):三个步骤实现音频聚焦

如果用户主动暂停播放,您的应用应释放音频焦点。如果是为了响应音频焦点的暂时丢失而暂停播放,则不应释放音频焦点。 这里有一些用例来说明这一点。...在这里您可以处理是否音乐恢复播放。 以下代码展示如何释放音频焦点: public final void pause() { if (!... Android O 以下的版本,您需要自己用代码实现,具体实现方式如上面代码所示。...完整的代码示例 android-MediaBrowserService 完整展示了音频焦点的处理,使用 MediaPlayer 来播放音乐,同时使用了 MediaSession 。...Android多媒体开发资源 示例代码 — MediaBrowserService 示例代码 — MediaSession Controller Test (带有音频焦点测试) 了解 MediaSession

35721

音视频开发之旅(45)-ExoPlayer 音频播放器实践(一)

要在Android中实现这一设计,您可以使用两个组件构建一个音频应用程序: activity(展示所用) 和播放器service。如果用户切换到另一个应用程序,则该service可以在后台运行。...设计音乐播放器APP架构,有几种常用的做法 方案一 注册Service,用于数据设置、音乐控制,Service中自定义播放器的一些状态值和回调接口用于流程控制 通过广播、aidl等实现和页面层逻辑的通信...APP媒体会话 方案二 Android5.0推出的MediaSession框架(Supprot包中MediaSessionCompat也对低版本做了支持),专门用来解决媒体播放界面和Service通信的问题...使用MediaBrowserService可以随身设备(如Android Auto and Wear)轻松发现您的应用,连接到它,浏览内容和控制播放,而无需访问您的Activity 我们今天的学习实践是基于方案二的...更详细的介绍请参考官方文档或者Android 媒体播放框架MediaSession分析与实践 二、 简单实践 下面我们看下如何使用MediaSession框架实现简单的音频播放 2.1 Server端实现

5.2K00
  • 理解音频焦点 (第 33 部分):三个步骤实现音频聚焦

    现在您已经知道音频聚焦的重要性,让我们通过一些步骤来您的应用程序正确处理音频焦点。 开始代码示例之前,先看看下图,它展示了实现步骤: ?...如果用户主动暂停播放,您的应用应释放音频焦点。如果是为了响应音频焦点的暂时丢失而暂停播放,则不应释放音频焦点。 这里有一些用例来说明这一点。...在这里您可以处理是否音乐恢复播放。 以下代码展示如何释放音频焦点: public final void pause() { if (!...完整的代码示例 android-MediaBrowserService 完整展示了音频焦点的处理,使用 MediaPlayer 来播放音乐,同时使用了 MediaSession 。...Android多媒体开发资源 示例代码 — MediaBrowserService 示例代码 — MediaSession Controller Test (带有音频焦点测试) 了解 MediaSession

    4K40

    Android系统线控和歌曲信息屏显的那点事

    目前Android系统中主流的音乐播放器都支持线控的功能,线控设备包括有线耳机和蓝牙耳机或蓝牙车机,当不方便操作手机的时候可以通过线控来控制音乐的播放暂停以及切歌。 ? ?...同时当音乐播放的时候部分手机(如小米)会在系统的锁屏页面上展示各种歌曲信息,如歌曲名,歌手名,专辑图片甚至歌词,同时还可以提供一些播放控制的操作。 ? 这些都是如何实现的呢?其中是否有坑?...AudioManager配合RemoteControlClient Android 5.0之前的版本中,Android推荐使用AudioManager的一系列功能来实现线控和锁屏信息显示功能。...MediaSession Android5.0及以后的版本RemoteControlClient被Deprecate,Android推荐使用最新的MediaSession来统一管理线控和歌曲信息展示,这样一来...同时,MediaSession也可以应用到基于TV的APP中,Android TV原生的Now Playing Card就是通过MediaSession来控制的,可以Android TV的主界面显示目前正在播放的歌曲的歌曲名

    2.8K90

    Android实现原生锁屏页面音乐控制

    Android5.0 提出了全新的MediaSession概念用于播放器与控制器之间进行交互,它取代之前的RemoteControlClient,并提供了更为灵活的客户端受控端模型。...但是MediaSession框架只能在安卓5系统上使用,如何兼容低版本呢? Googlesupport-v4(21以上版本)中也提供了MediaSessionCompact兼容包。...通过它可以告诉Android系统与其他的应用,自己正在播放的内容是什么以及自己支持哪些类型的播放控制。...播放音乐,通过MediaSessionCompat可以实现锁屏按键上的监听,从而转换成自己的操作。...(state, AudioPlayer.get().getAudioPosition(), 1) .build()); } //播放歌曲,需要更新屏幕上的歌曲信息 public void updateMetaData

    2.2K31

    理解音频焦点 (第 23 部分):更多的音频焦点用例

    当语音播报完,导航应用会释放掉音频焦点,您的应用可以再次获得音频聚焦,然后恢复到原有音量播放(选择降低音量的回避模式),或者恢复播放(选择暂停的回避模式)。...用户正在收听音乐或播客,而您的应用正好在短时间内生成音频: 您的应用程序生成音频之前,它应该请求短暂的音频焦点。 只有当它被授予焦点,才能播放音频。...优秀的应用程序应该遵守音频焦点的短暂丢失选择降低音量,如果抢占音频焦点的应用程序是播客应用程序,则您可以考虑暂停,直到重新获得音频焦点以恢复播放为止。...当录制完成记得释放音频焦点,以便系统授权其它应用正常播放声音。 总结 当您的应用程序需要输出音频,应该请求音频焦点(并且可以请求不同类型的焦点)。 只有获得音频焦点之后,才能播放声音。... Android O 上,如果您的应用程序在请求音频焦点被拒,系统可以等音频焦点空闲时发送给您的应用程序(延迟聚焦)。 想详细了解如何在您的应用中用代码实现音频焦点,请阅读 第三篇文章。

    2.3K20

    Android基于MediaBroswerService的App实现概述

    前言 如何实现一个音乐播放App,然后其可以被第三方的Android app打开,并获取其中的歌单,曲目列表,同时控制其播放呢?现有应用市场上,已经有相应的实现。...image.png 百度的Carlife App中,我们可以看到,只要我们本地的装了QQ音乐App,其就可以唤起,然后获取其中的歌曲数据,然后进行播放,这个是如何实现的呢?...MediaBroswerService Android多媒体架构 Android多媒体播放采用client,server架构,一个server可以对应多个client,client使用的时候需要先连接到...使用MediaBrowserService可以Android Wear, Auto非常容易找我们的App,连接它,浏览它的内容,控制其播放,而完全不需要接触我们的UI Activity。...通过其可以帮助我们携带一些数据来进行歌曲的展示播放

    1.9K30

    Android Auto开发初探

    二、Android Auto 使用方法 Android Auto是如何与手机连接并使用的呢?...你必须使用Android 5.0以上手机并支持google api(原生系统),通过USB(最新版本支持Wifi)与支持Android Auto 的车机连接,当你在车机上选择音乐音乐界面里会列出手机上支持...选择你要运行的平台,选择支持Android Auto。 ? 这里需要你选择要开发的音乐应用还是消息应用,这里我们选择音乐类。这样就完成了支持Android Auto音乐功能应用的创建。...8.播放控制 要实现播放控制,就要使用Android5.0 的全新的MediaSession,它用于播放器与控制器之间进行交互,它取代之前的RemoteControlClient。...先来看一下如何MediaSession,具体如下: MediaSessionmSession = new MediaSession(this, "QQMusicAndroidAuto"); mSession.setFlags

    9.9K100

    理解音频焦点 (第13部分):常见的音频焦点用例

    为了提供更友好的用户体验,Android提供了一个API,应用程序可以共享音频焦点,旨在保证同一段内只有一个应用可以维持音频聚焦。...您的应用处理了音频焦点的情况下: 另一个应用需要播放音频,它会请求音频焦点常驻,即音频永久聚焦。一旦系统授权,它便会开始播放音频,这时候您的应用需要响应音频焦点的丢失通知,停止播放。...如果用户选择接通电话,他会听到通话声音和您的应用音频叠加在一起播放,挂断通话后您的应用音频会保持播放。无论如何,您的应用音频将全程保持播放状态。这带来的通话体验极差。 ?...您的应用应该选择暂停播放,然后通话结束后恢复播放。 ? 总结 当您的应用需要输出音频,应该请求音频焦点。只有获得音频焦点后,才能开始播放。...理解音频焦点 (第3/3部分) - Nazmul Idris (Naz) - Medium Android多媒体开发资源 示例代码 — MediaBrowserService 示例代码 — MediaSession

    2.3K21

    Android 5.0 API新增和改进

    媒体播放 如果您要实施可呈现媒体播放状态或传输控件的通知,请考虑使用新的 Notification.MediaStyle 模板,而不是自定义RemoteViews.RemoteView 对象。...有关详情,请参阅锁定屏幕上显示通知。 如果您的应用是 Android TV 或 Wear 平台上运行,请通过实施 MediaSession 类来显示媒体播放控件。...如果您的应用提供媒体播放并且 Android TV 或 Wear 平台上运行,请使用 MediaSession 类和相同的回调方法来处理您的传输控件。...创建控制器,请指定一个 MediaSession.Token 对象,以便您的应用可以与给定的MediaSession 进行互动。...创建 MediaBrowser 实例,请为 MediaSession 指定组件名称。

    1.7K20

    基于腾讯x5开源库,提高60%开发效率

    目录介绍 01.前沿说明 1.1 案例展示效果 1.2 该库功能和优势 1.3 相关类介绍说明 02.如何使用 2.1 如何引入 2.2 最简单使用 2.3 常用api 2.4 使用建议 03.js调用...在这个方法中,可以给WebView自定义进度条,类似微信加载网页的那种进度条 如果在此方法中注入js代码,则需要避免重复注入,需要增强逻辑。...Android系统会用户选择使用哪个应用打开链接,但是如果用户不注意,就会使用恶意应用打开,导致敏感信息泄露或者其他风险。...* 当某个URL,或者某个资源收到大量报警,说明页面或资源可能存在问题,这时候可以相关运营及时响应修改。...try { //有音频播放的web页面的销毁逻辑 //关闭了Activity,如果Webview的音乐或视频,还在播放

    3.5K30

    如何处理手势冲突 | 手势导航连载 (三)

    从这一篇文章开始我们将介绍如何处理您的应用和 Android 10 中新引入的系统交互手势之间的冲突。 首先让我们来理解一下什么是 "手势冲突 (gesture conflict)"。...不幸的是, 进度条太靠近主屏手势区域 (Home Screen Gesture Area),所以当用户该区域滑动,系统把它错误地判断为用户是要执行快速切换应用的操作,这也会用户感到困惑。...有很多可能导致冲突的例子,例如: 导航抽屉 (DrawerLayout)、多图展示 (ViewPager)、进度条 (SeekBar),甚至列表上进行滑动操作也有可能出现冲突。...衍生阅读: 如何 WindowInsets 更易于使用: medium.com/androiddeve… 更优的解法 在做完上一步后,您可能会觉得问题已经解决了。...让我们再次回到之前提到的音乐播放器示例,我们现在把播放进度条挪到了控件上方,并且撑满了整个屏幕宽度。

    4.9K30

    Android 音乐APP(三)播放音乐、自定义进度条、自动下一曲

    前言   作为音乐APP的主要功能,我放到了第三篇文章,因为播放音乐的功能并没有看上去那么简单,里面有很多细节是写代码的时候就要考虑,并且加入到逻辑里面的,这可不是危言耸听,下面来看是怎样一个不简单吧...首先播放布局不随页面滚动,一直固定在屏幕的底部,其次是播放进度是左边的这个logo中,而这个logo播放的时候自动旋转,logo右边的是歌曲信息,当内容超过控件时会有跑马灯效果,最右边自然就是控制歌曲的播放和暂停了...,这样就直接播放列表中的第一首,至于记录当前歌曲的位置和播放进度,下一次进入时继续这个进度,这个功能放到后面来实现,先考虑这个页面的。...⑥ 播放进度 播放进度对于用户来说是比较重要的,这里我没有用Seekbar,来用户看到播放进度并且可以手动拖动,而是用了一个自定义View,只用来显示歌曲当前的播放进度,没有具体的播放时间和操作控件,...changeSong方法中,当开始播放,设置当前的进度和音乐的总进度,然后通过**updateProgress()**方法来发送消息。

    2.3K20

    WebView开源库终极方案

    目录介绍 01.前沿说明 1.1 案例展示效果 1.2 该库功能和优势 1.3 相关类介绍说明 1.4 WebView知识点 02.如何使用 2.1 如何引入 2.2 最简单使用 2.3 常用api 2.4...H5页面进度条 前端页面受到网路环境,页面内容大小的影响有时候会用户等待很久。...在这个方法中,可以给WebView自定义进度条,类似微信加载网页的那种进度条 如果在此方法中注入js代码,则需要避免重复注入,需要增强逻辑。...值变量,重新加载后的页面再次注入js 3 如果做过本地js,css等缓存,则先判断本地是否存在,若存在则加载本地,否则加载网络js 4 注入的进度阈值可以自由定制,理论上10%-100%都是合理的,不过建议使用了...视频播放宽度超过屏幕 4.1.0 如何保证js安全性 4.1.1 如何代码开启硬件加速 4.1.2 WebView设置Cookie 4.1.3 开启硬件加速导致的闪烁问题 4.1.4 webView加载网页不显示图片

    3.1K30

    Android实现音乐播放进度条传递信息的两种方式(service和activity中)

    实现播放进度条显示,或是定时从service获取某些信息,是我们日常开发中经常遇到的需求,下面介绍当音乐再service中运行时,activity如果获取音乐进度信息的两种方式: 一、activity...中建立消息接收机制 我们需要在activity中建立一个用于接收信息的handler(handler简单的说是android中可以发送消息和也可以处理消息的一种机制,当然它的用途更加强大,有时间可以去自己了解...) 我们需要在onCreate方法之前添加handler,这样才能保证当我们的activity被destroy之后,再重建可以第一间获取当前音乐的进度。..._prepare(Native Method) (当然如果你的定时操作间隔越大出错的概率就越小,不过我强迫症就是忍不了) 2.上面提到mediaPlayer.prepare()的执行速度很低,如何解决...Android作业 音乐播放器 总结 到此这篇关于Android实现音乐播放进度条传递信息的两种方式(service和activity中)的文章就介绍到这了,更多相关android 实现音乐播放进度条内容请搜索

    2.2K30

    Android ExoPlayer 音画同步代码分析

    由于MediaPlayer 将速度设置可能作为 resume、pause处理,因此调用resume和pause之前,恢复到原有的速度 三、ExoPlayer 音画同步分析 回到本文主题,我们来分析一下...3.4 音频播放位置如何同步到视频 ?...按照预设的门限值,视频帧比预定时间来的早了 30~50ms 以上,Android 5.0以上可以控制展示时间,超过则不予送显,等待下次定时同步;如果是Android 4.4之前则进入等待,且Android...在有些业务中的音频输出和ExoPlayer是分开的,我们要考虑如何通过音频播放器去同步ExoPlayer中的视频渲染器,但有ExoPlayer具备高度的可扩展性,我们可以通过自定时钟的方式去同步ExoPlayer...一种可行的方法就是检测抖动,达到一定的阈值不在调用getPlayHeadPosition方法,而是通过自定义的时钟去计算进度,只pause、play、resume时调用,当然,还要在getPlayHeadPosition

    1.3K20

    01.视频播放器框架介绍

    视频播放器介绍文档 目录介绍 01.该视频播放器介绍 02.视频播放器功能 03.视频播放器架构说明 04.视频播放如何使用 05.播放器详细Api文档 06.播放器封装思路 07.播放器示例展示图...可以设置是否记录播放位置,设置播放速度,设置屏幕比例 B.1.4 支持滑动改变音量【屏幕右边】,改变屏幕亮度【屏幕左边】,屏幕底测左右滑动调节进度 B.1.5 支持list页面中视频播放,滚动后暂停播放...左右滑动快进和快退视图(手势滑动的快进快退提示框) 顶部控制区视图(包含返回健,title等),底部控制区视图(包含进度条,播放暂停,时间,切换全屏等) 锁屏布局视图(全屏展示,其他隐藏),底部播放进度条视图...|screenSize" android:screenOrientation="portrait"/> 如何一进入页面就开始播放视频,稍微延时一下即可 代码如下所示,注意避免直接start...第二部分:视频播放器状态方法,主要包括:播放,暂停,恢复,重制,设置进度,释放资源,获取进度,设置速度,设置音量 第三部分:player绑定view后,需要监听播放状态,比如播放异常,播放完成,播放准备

    2.6K51

    04.视频播放器通用架构实践

    第二部分:视频播放器状态方法,主要包括:播放,暂停,恢复,重制,设置进度,释放资源,获取进度,设置速度,设置音量 第三部分:player绑定view后,需要监听播放状态,比如播放异常,播放完成,播放准备...有播放完成,播放异常,播放加载,顶部标题栏,底部控制条栏,锁屏,以及手势滑动栏。如何控制它们的显示隐藏切换呢? addView这些视图,大多数的view都是默认GONE隐藏的。...那么FrameLayout层层重叠,如何下层不响应事件 最上方显示的层加上: android:clickable="true" 可以避免点击上层触发底层。...解决方案 举个例子:例如,你需要来外部开发者手动去埋点,可是类中怎么埋点又是由其他人来设计的,你只是需要对外暴露监听的方法。那么该如何做呢?采用接口 + 实现类方式即可实现。...:采用系统浮层需要系统浮层权限,Android厂商对系统浮层的授权越来越严格,导致用户授权过程的体验比较差;需要权限,可能有些手机不太好适配; 每个展示页面单独添加播放器浮窗:优点是不受Android

    2.5K00

    【客户端技术】深入了解视频播放器工作原理与实现

    1.2 视频的传输协议 视频播放目前主要有本地播放,点播播放,和直播播放。本地播放和点播播放就是播放已处理好的有进度信息的视频,只不过本地播放视频存储本地,而点播播放视频存储远程服务器。...接下来就以腾讯视频播放器为例简单介绍下在这些方面是它是如何处理的。 3.1 整体架构设计 首先腾讯视频(以android端为例)分为两层 ?...根据需求我们设定了播放器有以下这些状态可能会展示给用户,并在布局文件中写好相应状态下的UI,相应的状态下调用所映射的UI显示即可。 ?...热插拔的过程中可能出现黑屏或者视频播放器重新播放的情况,这是由于移除播放器视图,会默认为视频播放器已销毁,因此播放器视图移出父容器之前需要调用disableViewCallback方法阻断销毁的过程...之前我们介绍视频编码的时候I帧是最全的视频帧,因此打开视频播放如果直接获取I帧就可以直接解码展示,达到秒开的效果。

    8.5K35
    领券