如何将元数据从 ExoPlayer 发送到蓝牙?

Posted

技术标签:

【中文标题】如何将元数据从 ExoPlayer 发送到蓝牙?【英文标题】:How do I send metadata from ExoPlayer to bluetooth? 【发布时间】:2021-07-08 13:13:54 【问题描述】:

我正在尝试通过我的广播应用程序上的蓝牙发送固定元数据,基本上我会将广播名称作为标题,将广播口号作为副标题,所以不涉及任何动态。 我曾尝试在 *** 上搜索其他答案,但它们与 ICY 流或从 ExoPlayer 本身获取元数据有关。

通过 FM 或 流播放器(例如 VLC)直接收听时,流本身提供元数据,但在通过我的应用时无法显示。

这是我的代码,据我所知,我应该在“addMetadataOutput”之后将元数据发送到括号内。

        extractorsFactory = new DefaultExtractorsFactory();
        trackSelectionFactory = new AdaptiveTrackSelection.Factory(bandwidthMeter);
        trackSelector = new DefaultTrackSelector(trackSelectionFactory);
        defaultBandwidthMeter = new DefaultBandwidthMeter();
        dataSourceFactory = new DefaultDataSourceFactory(this,
                Util.getUserAgent(this, "mediaPlayerSample"), defaultBandwidthMeter);
        mediaSource = new ExtractorMediaSource(Uri.parse("https://sr11.inmystream.it/proxy/radiocircuito29?mp=/stream"), dataSourceFactory, extractorsFactory, null, null);
        player = ExoPlayerFactory.newSimpleInstance(this, trackSelector);
        
        player.addMetadataOutput();

【问题讨论】:

【参考方案1】:

这方面有很多依赖关系,这不仅仅是发送值的情况,您还需要处理通知和媒体会话。

为此,您将需要一些额外的 Exoplayer 扩展。具体来说:MediaSessionCompat、MediaSessionConnector 并将它们连接到您的 Exoplayer 和 NotificationManager。

mMediaSession = new MediaSessionCompat( this, Constants.PLAYBACK_CHANNEL_ID );
mPlayerNotificationManager.setMediaSessionToken( mMediaSession.getSessionToken() );
mMediaSession.setActive( true );
mMediaSessionConnector = new MediaSessionConnector( mMediaSession );
mMediaSessionConnector.setPlayer( mPlayer );

一旦你有了这些,你还需要实现一个 DescriptionAdapter 类

public class MyDescriptionAdater implements PlayerNotificationManager.MediaDescriptionAdapter

这将创建用于填充静态元数据的界面。然后,您需要使用 setMediaDescriptionAdapter 将其连接到 PlayerNotificationManager

【讨论】:

以上是关于如何将元数据从 ExoPlayer 发送到蓝牙?的主要内容,如果未能解决你的问题,请参考以下文章

如何将元组列表从 python 发送和解包到 qml?

如何将字符串从 iPhone 发送到其他蓝牙设备

如何将浮点值从一个蓝牙模块发送到其他模块(HC 05)

如何在后台的两个 android 活动之间交换数据以通过蓝牙发送数据?

通过蓝牙发送/接收数据

通过蓝牙将数据从手机发送到笔记本电脑