Giter Site home page Giter Site logo

yinxuming / mediasession_musicplayer Goto Github PK

View Code? Open in Web Editor NEW
36.0 1.0 7.0 17.38 MB

展示利用MediaSession播放框架,如何构建音乐播放器demo: MusicPlayer;以及如何通过第三方APP(MusicClient)来展示MusicPlayer的播放内容,并进行远端播放控制。典型应用场景:手机音乐APP投射到车载蓝牙音乐上,并进行交互;Carlife;手机音乐APP与各种蓝牙音箱交互。

Home Page: https://github.com/yinxuming/MediaSession_MusicPlayer

Java 100.00%
mediabrowserservice mediasession mediabrowser mediabuttonreceiver bluetooth-music mediasession-demo musicplayer

mediasession_musicplayer's Introduction

MediaSession播放框架测试demo

  • MusicPlayer
    • 利用MediaSession播放框架构建的音乐播放器demo,包含:MediaBrowserService、MediaSession同步播放内容与接收播放控制指令、AudioFocus抢占音频焦点、MediaButtonReceiver物理按键处理
  • MusicClient:
    • MusicPlayer对应的播放内容显示与控制APP。通常车载环境下为蓝牙音乐APP,蓝牙连接成功后用来接收手机端播放内容、展示播放列表、控制手机端音乐APP。

MusicPlayer

  • 播放器端
  • 支持播放、暂停、上一首、下一首

播放器端接入主要步骤

  1. 引入support media 包:com.android.support:support-media-compat:27.1.1

  2. Service -> MediaBrowserServiceCompat 同时修改清单文件声明

  3. 旧的MediaButtonReceiver -> MediaSessionCompat.Callback, 实现callback中的onPlay、onPause等播放控制方法,需要考虑低版本兼容

  4. Init MediaSession setPlaybackState(mPlaybackState); setActive(true); setSessionToken

  5. Notify PlayInfo 每次PlayState Change时,重新mSession.setPlaybackState 每次PlayInfo Change时,重新mSession.setMetadata

MusicClient

  • 远程控制端
  • 显示播放器播放内容,播放控制与MusicPlayer Activity 里面的逻辑重复,暂未实现,可以通过MediaButton测试播放控制
  • 车载蓝牙音乐需要将连接的MediaBrowserService替换成
  // 待连接的服务 
ComponentName componentName = new ComponentName("com.android.bluetooth",
"com.android.bluetooth.a2dpsink.mbs.A2dpMediaBrowserService"); 

Client端接入主要步骤

  1. 引入support media 包:com.android.support:support-media-compat:27.1.1

  2. MediaBrowser.connect 连接服务

  3. MediaBrowser.subscribe(callback) 连接成功后,订阅服务端数据,通过callback.onChildrenLoaded接收播放列表改变通知

  4. MediaController.registerCallback(callback) 通过MediaBrowser.getSessionToken()创建MediaController实例, 1)controller.getTransportControls().play()、pause… 控制播放服务端 2)callback.onPlaybackStateChanged、onMetadataChanged 接收当前播放信息改变通知

MediaButton 模拟物理按键测试

  • adb shell input keyevent 87 // next
  • adb shell input keyevent 88 // previous
  • adb shell input keyevent 126 // play
  • adb shell input keyevent 127 // pause

参考文档

demo效果

播放器端

播放器端

Client端

客户端播放显示端

原理

MediaSession交互结构

官方说明

mediasession_musicplayer's People

Contributors

yinxuming avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

mediasession_musicplayer's Issues

Android 10 的车载蓝牙, 拿不到播放器的信息。 可能是什么问题呀

日志如下

2024-01-05 10:54:35.155 8747-8747 Client_MediaBrowser cn.yinxm.media.ms.client D resInfos=[ResolveInfo{8c20935 com.android.bluetooth/.avrcpcontroller.BluetoothMediaBrowserService m=0x108000}]
2024-01-05 10:54:35.161 8747-8747 Client_MediaBrowser cn.yinxm.media.ms.client D pkg=com.android.bluetooth, service=com.android.bluetooth.avrcpcontroller.BluetoothMediaBrowserService, 蓝牙音频
2024-01-05 10:54:35.567 8747-8747 Client_MediaBrowser cn.yinxm.media.ms.client D MediaBrowser.onConnected
2024-01-05 10:54:35.613 8747-8747 Client_MediaBrowser cn.yinxm.media.ms.client E onChildrenLoaded------[]

mController.getMetadata() 为空

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.