- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在开发具有视频和音频功能的应用程序的一部分,并且最近开始重构代码库。目标是整合MediaSession/ MediaController
和 MediaBrowserService/ MediaBrowser
框架。
我们使用 ExoPlayer
和 PlayerControlView
更具体地说,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) {...
MediaBrowserService
,播放器实例应包含在服务下。此外,客户端站点(MediaBrowser 和 MediaController)通过
connect()
方法和
MediaBrowserConnectionCallback ,这使得将播放器的实例传递给 PlayerControlView (或相反)是不可能的。
Binder
访问我们在服务中声明的方法并执行以下操作:
boolean attachPlayerControlView(PlayerControlView playerControlView) {
if (player != null) {
playerControlView.setPlayer(player);
return true;
}
return false;
}
MediaBrowserService/ MediaBrowser
似乎是不可能的。框架。我检查了这个
question 的答案,表示使用 [sendCommand] 是一种调用自定义方法的方式。但它也要求参数是 Parcelable 的。
PlayerControlView
访问
SimpleExoPlayer
的实例或在
MediaBrowserService
下反之框架。
最佳答案
In addition, the only way for the client site (MediaBrowser and MediaController) to talk to service it through the connect() method and MediaBrowserConnectionCallback, which makes passing the instance of the player to the PlayerControlView (or the other way around) not possible.
private MediaPlayer mediaPlayer;
@Override
public IBinder onBind(Intent intent) {
if (intent.getAction().equals("YOUR_INTENT")) {
return new LocalBinder();
}
return super.onBind(intent);
}
public class LocalBinder extends Binder{
public AudioService getService(){
return AudioService.this;
}
}
public MediaPlayer getMediaPlayer() {
return mediaPlayer;
}
在您的 Activity/Fragment 中,然后使用 IBinder 绑定(bind)到 MediaBrowserService。在我的实现中,我使用了 MediaPlayer,但我认为它可以以类似的方式用于 Exoplayer。
public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback{
private MediaPlayer mediaPlayer;
private SurfaceView surfaceView;
private SurfaceHolder surfaceHolder;
private boolean isServiceBounded;
private boolean isSurfaceReady;
private ServiceConnection serviceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
isServiceBounded = true;
mediaPlayer = ((AudioService)service).getMediaPlayer();
if (isSurfaceReady) {
mediaPlayer.setDisplay(surfaceHolder);
}
}
@Override
public void onServiceDisconnected(ComponentName name) {
isServiceBounded = false;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
surfaceView = findViewById(R.id.surfaceView);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
bindService(new Intent("YOUR_INTENT"), serviceConnection, BIND_AUTO_CREATE);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
surfaceHolder = holder;
isSurfaceReady = true;
if (mediaPlayer != null) {
mediaPlayer.setDisplay(holder);
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
isSurfaceReady = false;
if (mediaPlayer != null) {
mediaPlayer.setDisplay(null);
}
surfaceHolder = null;
}
@Override
protected void onDestroy() {
super.onDestroy();
unbindService(serviceConnection);
}
}
关于android - 带有 ExoPlayer 和 PlayerControlView 的 MediaBrowserService - 如何从 UI (PlayerControlView) 访问播放器实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61017893/
我不确定我明白这里发生了什么。 请问有人可以解释一下吗? 我收到以下错误: Type of 'exoPlayer' doesn't match the type of the overridden v
我在尝试编译 exoplayer r1.5.2 存储库时遇到问题...。当我改用 com.google.android.exoplayer:exoplayer:r1.4.2 时没有问题。 编译代码如下
我有这个简单的 .m3u8 文件 #EXTM3U #EXT-X-VERSION:5 #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="English ste
为了避免应用程序中的任何 SCSS ,从后台线程使用 exoplayer 还是从主 ui 线程使用它更好? 注意:当我在主 ui 线程中创建一个 simpleExoPlayer 时: // 1. Cr
我有一个 exoplayer 我的第一个 Activity ,当我点击全屏按钮时,我打开一个新的 VideoActivity 全屏。我只发送我当前的位置并在该位置启动 VideoActivity。
我在 DemoPlayer 的基础上使用 Exoplayer。我想在 ExoPlayer.STATE_ENDED 被调度后在一些用户操作时从头开始重新启动/重播视频。 之后我尝试使用 seekTo(0
我在我的 android 应用程序中使用 exoplayer,在播放视频时我点击屏幕,带有 Controller 的显示不流畅,我想让它看起来流畅,就像淡入淡出..如何我可以这样做吗? 最佳答案 查看
我在 CardView 的 RecyclerView 中有一个 ex0player。 exoplayer 的高度需要根据包含的视频的高度以编程方式更改。此高度值以 像素 的形式从 API 调用返回。这
在 android 中有一个名为 的库。 Exoplayer 这与从给定 url 流式传输视频有关。 现在根据this firebase 不支持视频流,尽管您可以将 uri 从 url 传递到 vid
更新项目依赖项后,我在视频 android studio 应用程序中遇到这个 exoplayer not found 错误。 我不知道如何将旧的 Exoplayer 链接更新到 https://mvn
我在 android 中构建一个 expo 分离项目时遇到问题。当我构建项目时,控制台构建的输出显示:无法解析:com.google.android.exoplayer:exoplayer-smoot
情况:将我的 Android 项目从带有 VisualOn 的旧 Ooyala SDK 更新到带有 Exoplyer 的最新 Ooyala SDK。通过 Amazon Fire Stick 播放视频。
我制作了安卓音频应用程序。现在一些用户报告说,当他们在车内通过蓝牙连接设备时,应用程序没有响应媒体按钮(播放、暂停、下一步)。 同时,我用蓝牙扬声器测试了应用程序 - 播放/暂停按钮可按需工作。 车载
我希望在我的项目中实现 exoplayer。我已经成功实现了它,但是视频加载时间很慢。如何在 exoplayer 中实现或实现视频的快速加载?就像抖音一样——立即加载视频并开始播放 最佳答案 试试下面
遵循开发人员指南中给出的示例后,我得到以下信息: 05-23 16:25:22.002 11893-11942/com.app.videotest E/ExoPlayerImplInternal: S
我基于此 link 在我的应用程序中集成了 exoplayer . 我在 createCurrentContentIntent() 中添加了一个待处理的 Intent 。 return Pen
我正在阅读有关配置默认 exoplayer View 布局的教程: https://exoplayer.dev/ui-components.html 但是它不显示默认播放器布局的源代码 exo_pla
我想使用 PlayerView 在 exoplayer 中创建一个自定义时间栏: 不能被用户拖动,只能在视频中显示进度 更新:好的,所以我可以通过将 touch_target_height 设置为 0
07-03 18:51:01.600 16188-16266/? E/ExoPlayerImplInternal﹕ Internal runtime error. java.lang.Ill
使用 ExoPlayer我正在尝试同时播放两个音轨。 我的想法是创建两个 MediaSource , 并使用 MergingMediaSource 在它们之间“组合” . 这就是我所做的: U
我是一名优秀的程序员,十分优秀!