LoginSignup
2
1

More than 5 years have passed since last update.

ExoPlayerとAudio360を統合する

Posted at

ExoPlayerSpatial Workstationの統合方法に関するメモ書きです。

まずAudioEngineを初期化し、SpatDecoderQueueを作成します。

// 以下、フィールドに保持する
engine = AudioEngine.create(SAMPLE_RATE, this);
spat = engine.createSpatDecoderQueue();
engine.start();

次に、Audio360Sinkを作成し、これを使ってOpusRendererを作成します。

audio360Sink = new Audio360Sink(spat, ChannelMap.TBE_8_2);
audioRenderer = new OpusRenderer(audio360Sink);

最後に、このOpusRendererを使うようにDefaultRenderersFactoryを改造してSimpleExoPlayerのインスタンスを作成します。

DefaultRenderersFactory defaultRenderersFactory = new DefaultRenderersFactory(this) {
  @Override
  protected void buildAudioRenderers(Context context, @Nullable DrmSessionManager<FrameworkMediaCrypto> drmSessionManager, AudioProcessor[] audioProcessors, Handler eventHandler, AudioRendererEventListener eventListener, int extensionRendererMode, ArrayList<Renderer> out) {
    out.add(audioRenderer);
  }
};
player = ExoPlayerFactory.newSimpleInstance(defaultRenderersFactory, new DefaultTrackSelector());

そしてもう一つ、毎フレームのレンダリングループの中でユーザーの視線の向きをAudioEngine.setListenerRotation()で伝えるようにします。

engine.setListenerRotation(quat);
// or
engine.setListenerRotation(forward, up);

あとは通常通りExtractorMediaSourceとかを使って動画を再生するだけです!

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1