Могу ли я установить предпочтительное аудиоустройство в Exoplayer или MediaPlayer для воспроизведения видео? - PullRequest
1 голос
/ 07 мая 2019

По большей части кажется, что это обрабатывается с использованием системного устройства по умолчанию.

Есть ли способ, как в AudioTrack.setPreferredDevice(AudioDeviceInfo info) в ExoPlayer / MediaPlayer, вручную настроить устройство вывода видео?

Если нет, есть ли альтернативы, которые позволят мне это сделать?

1 Ответ

1 голос
/ 12 июля 2019

Чтобы решить мою проблему, мне пришлось скачать исходный код 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

...