Чтобы решить мою проблему, мне пришлось скачать исходный код Exoplayer и указать способ установки оборудования на дорожку:
DefaultAudioSink.Java
private AudioTrack initializeAudioTrack() throws InitializationException {
AudioTrack audioTrack;
if (Util.SDK_INT >= 21) {
audioTrack = createAudioTrackV21();
if (audioAttributes.device != null && Util.SDK_INT >= 23) {
audioTrack.setPreferredDevice(audioAttributes.device);
}
}
Внутреннийоператор if был добавлен в коде выше.
AudioAttributes.Java
public Builder setPreferredDevice(AudioDeviceInfo device) {
this.playbackDevice = device;
return this;
}
public AudioAttributes build() {
return new AudioAttributes(contentType, flags, usage, playbackDevice);
}
добавлен элемент публичного компоновщика, позволяющий установить предпочтительное устройство в AudioAttributes.
public AudioDeviceInfo device;
private @Nullable android.media.AudioAttributes audioAttributesV21;
private android.media.AudioAttributes audioAttributesV21;
private AudioAttributes(@C.AudioContentType int contentType, @C.AudioFlags int flags,
@C.AudioUsage int usage) {
@C.AudioUsage int usage, AudioDeviceInfo device) {
this.contentType = contentType;
this.flags = flags;
this.usage = usage;
this.device = device;
}
Добавлена переменная для AudioDeviceInfo в конструктор AudioAttributes.
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
AudioAttributes other = (AudioAttributes) obj;
return this.contentType == other.contentType && this.flags == other.flags
&& this.usage == other.usage && this.device == other.device;
}
добавлена проверка форматирования источника для равного переопределения для устройства: && this.device == other.device
Это позволило мнескомпилируйте проект и добавьте его как библиотеку как обычно, но с возможностью установки устройства, которое я хотел, как часть сборщика.Бонус был в том, что он также работает динамически.Я уверен, что то же самое может быть достигнуто с помощью Media Player