标签: mediasession

带有 ExoPlayer 和 PlayerControlView 的 MediaBrowserService - 如何从 UI (PlayerControlView) 访问播放器实例?

我目前正在开发具有视频和音频功能的应用程序的一部分,最近开始重构代码库。目标是集成MediaSession/ MediaControllerMediaBrowserService/ MediaBrowser框架。

我们使用ExoPlayerPlayerControlView更具体的PlayerView的视频和音频组件,它需要提及的播放器实例PlayerControlView

/**
   * Sets the {@link Player} to control.
   *
   * @param player The {@link Player} to control, or {@code null} to detach the current player. Only
   *     players which are accessed on the main thread are supported ({@code
   *     player.getApplicationLooper() == Looper.getMainLooper()}).
   */
  public void setPlayer(@Nullable Player player) {...
Run Code Online (Sandbox Code Playgroud)

但是,在Android开发者职位文档MediaBrowserService,播放器实例应在服务下载。此外,客户端站点(MediaBrowser 和 MediaController)通过connect()方法和MediaBrowserConnectionCallback为其提供服务的唯一方法,这使得将播放器的实例传递给 PlayerControlView(或其他方式)是不可能的。

我曾尝试使用各种回调,例如 …

android exoplayer mediabrowserservice mediabrowserservicecompat mediasession

9
推荐指数
1
解决办法
707
查看次数

如何在 Google Chrome 中自定义全局媒体控件(问答)

如何在 Google Chrome 中启用或禁用全局媒体控件

请参阅“全局媒体控制”

  1. 转到 chrome://flags/#global-media-controls
  2. 设置“启用”
  3. 单击“重新启动”按钮

如何在 Google Chrome 中自定义(背景图片、点击操作)全局媒体控件

例子:

if ('mediaSession' in navigator) {
    navigator.mediaSession.metadata = new MediaMetadata({
        title: "TITLE",
        artist: "ARTIST",
        album: "ALBUM",
        artwork: [{
            sizes: "320x180",// <- MUST BE EXACTLY!
            src: "https://i.ytimg.com/vi/yAruCvT7P7Y/hqdefault.jpg?sqp=-oaymwEZCNACELwBSFXyq4qpAwsIARUAAIhCGAFwAQ==&rs=AOn4CLAfHWw5BHrQugGsdPYy4eIXcqMTnQ",
            type: ""
        }]
    });

    navigator.mediaSession.setActionHandler('play', function () { });
    navigator.mediaSession.setActionHandler('pause', function () { });
    navigator.mediaSession.setActionHandler('seekbackward', function () { });
    navigator.mediaSession.setActionHandler('seekforward', function () { });
    navigator.mediaSession.setActionHandler('previoustrack', function () { });
    navigator.mediaSession.setActionHandler('nexttrack', function () { });
}
Run Code Online (Sandbox Code Playgroud)

javascript google-chrome google-chrome-flags mediasession

8
推荐指数
1
解决办法
813
查看次数

How to get rid of "media playing" notification shown by Chrome on Android?

My HTML5 game has some background music that uses Howler.js in "html5" mode, which apparently triggers Chrome for Android's media playback notifications. This means a notification appears while the user has my game open in any tab:

The game is a good citizen and pauses the music while the tab is not in focus, so there is no need for this notification. It's even actively confusing, because the user can pause and resume the game's background music without being …

audio html5 android google-chrome mediasession

7
推荐指数
1
解决办法
468
查看次数

Android MediaSession:如何选择锁定屏幕上显示的图标?

我有一个通过播放媒体的应用程序MediaSessionCompat

我使用 为通知抽屉创建了一个通知NotificationCompat,并使用 发布它NotificationManagerCompat.notify,它看起来很棒。(参见屏幕截图。)

我的问题是锁屏。它仅显示“播放”、“上一曲目”和“下一曲目”图标。我缺少在当前播放的曲目中前后跳转的控件。(参见屏幕截图。)

我用来MediaSession.setPlaybackState指定可用的操作,并且包括PlaybackStateCompat用于倒带、快进、跳到上一个和跳到下一个的所有适当操作。

锁定屏幕的配置是否与通知不同?或者开发人员对此处提供的控件的控制权是否较少?

先感谢您!

在此输入图像描述

在此输入图像描述

audio android lockscreen mediasession

5
推荐指数
0
解决办法
492
查看次数

尝试在空对象上调用接口方法“android.media.session.ISessionController android.media.session.ISession.getController()”

下面的代码是带有使用媒体会话的控件的音乐通知播放器。每当我单击通知中的控件时,它就会崩溃并出现上述错误。请参阅下面的代码,如果我错了,请纠正我。在下面的代码中,我使用媒体会话和广播接收器来构建通知。“track”是我所有歌曲数据的模型类。

   try {
                if (track.getImage() == null) {
                    track.setImage(BitmapFactory.decodeResource(context.getResources(),
                            R.mipmap.ic_launcher));
                }
    
    
                NotificationManagerCompat notificationManagerCompat = NotificationManagerCompat.from(context);
                MediaSessionCompat mediaSessionCompat = new MediaSessionCompat(context, "tag");
                mediaSessionCompat.setMetadata(
                        new MediaMetadataCompat.Builder()
                                .putString(MediaMetadata.METADATA_KEY_TITLE, track.getTitle())
                                .putString(MediaMetadata.METADATA_KEY_ARTIST, track.getArtist())
                                .putBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART, track.getImage())
                                .putString(MediaMetadata.METADATA_KEY_ALBUM, track.getAlbum())
                                .build()
                );
                mediaSessionCompat.setFlags(
                        MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS |
                                MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS);
    
                PlaybackStateCompat.Builder stateBuilder = new PlaybackStateCompat.Builder();
    
                stateBuilder.setActiveQueueItemId(MediaSession.QueueItem.UNKNOWN_ID);
    
                long actions = PlaybackStateCompat.ACTION_PLAY_PAUSE | PlaybackStateCompat.ACTION_STOP | PlaybackStateCompat.ACTION_SKIP_TO_NEXT | PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS;
                stateBuilder.setActions(actions);
                if (isPlaying) {
                    stateBuilder.setState(PlaybackStateCompat.STATE_PLAYING, 0, 1.0f);
                    mediaSessionCompat.setActive(true);
    
                } else {
                    stateBuilder.setState(PlaybackStateCompat.STATE_PAUSED, 0, 1.0f);
                    mediaSessionCompat.setActive(true);
    
    
                }
                mediaSessionCompat.setPlaybackState(stateBuilder.build());
                Bitmap icon = track.getImage();
    
    
                PendingIntent pendingIntentPrevious;
                int drw_previous;
    
    // …
Run Code Online (Sandbox Code Playgroud)

notifications android webview android-mediaplayer mediasession

4
推荐指数
1
解决办法
1548
查看次数