Android为ijkplayer设置音频发音类型usage

官方文档

多区音频路由 | Android Open Source Projecthttps://source.android.google.cn/docs/automotive/audio/audio-multizone-routing?hl=zh-cn

背景

车机系统开发多分区(zone)功能,可以实现同一个app通过设置,在不同分区发声。比如音乐正常是整车播放的,可以在乘客休息只在司机座位头枕播放。

android14以上可以通过镜像播放的方式(MirrorDevice)实现,但是Android13以下由于代码比较老,没有这部分实现,常见的方法是通过设置usage方式,指定硬件bus来解决。

比如系统MediaPlayer的调用方式:

由于系统mediaplayer对格式的支持不够全面,所以我项目要求使用的都是ijkplayer进行音视频播放。遗憾的是官方的源码并没有以上方法(如果你使用的不是ffmpeg,而是explayer是有的)。所以我通过源码修复了方式加入了音频类型设置功能。

代码修改

  1. 文件:android_audiotrack.h
复制代码
void SDL_Android_AudioTrack_set_default_stream_type(int stream_type);
  1. 文件:android_audiotrack.h
复制代码
//add
static int g_stream_type = STREAM_MUSIC; // 默认值为 STREAM_MUSIC

 void SDL_Android_AudioTrack_set_default_stream_type(int stream_type) {
    g_stream_type = stream_type;
}

static void SDL_Android_AudioTrack_get_default_spec(SDL_Android_AudioTrack_Spec *spec)
{
    assert(spec);
//    spec->stream_type = STREAM_MUSIC;
    spec->stream_type = g_stream_type;
    spec->sample_rate_in_hz = 0;
    spec->channel_config = CHANNEL_OUT_STEREO;
    spec->audio_format = ENCODING_PCM_16BIT;
    spec->buffer_size_in_bytes = 0;
    spec->mode = MODE_STREAM;
}
  1. 文件:jjkplayer_jni.c

复制代码
// add
static void
IjkMediaPlayer_setAudioStreamType(JNIEnv *env, jobject thiz, jint streamType)
{
    MPTRACE("%s(%d)\n", __func__, streamType);
    SDL_Android_AudioTrack_set_default_stream_type(streamType);

}
....

{ "_setAudioStreamType",    "(I)V",   (void *) jkMediaPlayer_setAudioStreamType} ,
  1. 文件:jkMediaPlayer.java
复制代码
   @Override
    public void setAudioStreamType(int streamtype) {
                 // do nothing
          //add
        _setAudioStreamType(streamtype);
    }

 // add
    private  native void _setAudioStreamType(int streamtype);

编译ijkplayer源码

可以参考 ubuntu编译ijkplayer版本k0.8.8(ffmpeg4.0)-CSDN博客

使用

可以看到ijkplayer源码setAudioStreamType方法并没有进行jni实现,我们修改源码实现后,传入自定义类型数字就行,这个数字需要和音频同事确定,不可以随便填写,最终会绑定到音频bus上。这样音频同事就可以根据不同bus,设定发声区域。

其他

jkpalyer 编译后的demo及so文件:

https://download.csdn.net/download/suyuan1990115/91725292https://download.csdn.net/download/suyuan1990115/91725292

相关推荐
千里马学框架2 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台2 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone2 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc3 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo3 天前
Kotlin 协程中的 Job 结构化并发与取消
android
2601_955662463 天前
短剧多人对白怎么配?2026年多角色配音工具对比
大数据·人工智能·音视频·语音识别
sun0077003 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼3 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
开发笔记-阿牛3 天前
蓝牙音乐灯拆解,又一次拆到蓝牙音乐灯芯片CK6865L
人工智能·单片机·嵌入式硬件·音视频·音频
AFinalStone3 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui