您好我正在尝试同时播放两个不同的文件。
我试图找到玩家并尝试扩展默认播放器达到相同但却无法获得成功。所以,请让我知道什么是同时播放音频文件和视频的最佳方式,请帮助我?
我采用单独文件的原因是为了节省空间,因为应用程序将被本地化,每种语言都有多个音频文件,而不是多个视频节省空间。这很重要,因为Android不允许下载超过50MB的应用程序大小。
任何帮助都会非常有帮助。为我提供代码将是很有帮助的。
提前致谢。
答案 0 :(得分:1)
您可以使用Audio Focus进行处理。两个或多个Android应用程序可以同时将音频播放到同一输出流。系统将所有内容混合在一起。尽管这在技术上给人留下深刻的印象,但对用户而言可能会非常严重。为了避免每个音乐应用程序同时播放,Android引入了音频聚焦的概念。一次只有一个应用程序可以保持音频焦点。
当您的应用需要输出音频时,它应该请求音频焦点。具有焦点时,可以播放声音。但是,获得音频焦点后,您可能无法继续播放直到完成播放。另一个应用程序可以请求焦点,这会抢占音频焦点。如果发生这种情况,您的应用应暂停播放或降低其音量,以使用户更轻松地听到新的音频源。
从Android 8.0(API级别26)开始,调用requestAudioFocus()
时必须提供一个AudioFocusRequest
参数。要释放音频焦点,请调用方法abandonAudioFocusRequest()
,该方法也将AudioFocusRequest
作为其参数。请求和放弃焦点时,应使用相同的AudioFocusRequest
实例。
要创建AudioFocusRequest
,请使用AudioFocusRequest.Builder
。由于焦点请求必须始终指定请求的类型,因此该类型包含在构建器的构造函数中。使用构建器的方法来设置请求的其他字段。
以下示例显示了如何使用AudioFocusRequest.Builder
来构建AudioFocusRequest
以及请求和放弃音频焦点:
audioManager = (AudioManager) Context.getSystemService(Context.AUDIO_SERVICE);
playbackAttributes = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_GAME)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build();
focusRequest = new AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN)
.setAudioAttributes(playbackAttributes)
.setAcceptsDelayedFocusGain(true)
.setOnAudioFocusChangeListener(afChangeListener, handler)
.build();
mediaPlayer = new MediaPlayer();
final Object focusLock = new Object();
boolean playbackDelayed = false;
boolean playbackNowAuthorized = false;
// ...
int res = audioManager.requestAudioFocus(focusRequest);
synchronized(focusLock) {
if (res == AudioManager.AUDIOFOCUS_REQUEST_FAILED) {
playbackNowAuthorized = false;
} else if (res == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
playbackNowAuthorized = true;
playbackNow();
} else if (res == AudioManager.AUDIOFOCUS_REQUEST_DELAYED) {
playbackDelayed = true;
playbackNowAuthorized = false;
}
}
// ...
@Override
public void onAudioFocusChange(int focusChange) {
switch (focusChange) {
case AudioManager.AUDIOFOCUS_GAIN:
if (playbackDelayed || resumeOnFocusGain) {
synchronized(focusLock) {
playbackDelayed = false;
resumeOnFocusGain = false;
}
playbackNow();
}
break;
case AudioManager.AUDIOFOCUS_LOSS:
synchronized(focusLock) {
resumeOnFocusGain = false;
playbackDelayed = false;
}
pausePlayback();
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
synchronized(focusLock) {
resumeOnFocusGain = true;
playbackDelayed = false;
}
pausePlayback();
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
// ... pausing or ducking depends on your app
break;
}
}
}
希望这会有所帮助!您也可以查看Android的官方文档。如果这样做没有帮助,则可以check这个站点和这个site以获得更多文档。
答案 1 :(得分:0)
播放音频:Audio Track reference 播放视频:Media Player reference
现在你可以通过在Video View显示你想要的视频来开始主线程,什么时候播放声音你开始播放音轨。棘手的部分是将音频与视频同步