如何将元数据从 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 发送到蓝牙?的主要内容,如果未能解决你的问题,请参考以下文章