VideoEncoderFactory

VideoEncoderFactory は、 SoraMediaOption.videoEncoderFactory で指定することができます。

VideoEncoderFactory を設定しない場合の挙動

VideoEncoderFactory を設定しない場合は、以下のように VideoEncoderFactory が決定されます (Sora Android SDK の持つ VideoEncoderFactory は internal なので SDK ユーザーが直接利用することはできません)。

  • サイマルキャストが有効な場合
    • SimulcastVideoEncoderFactoryWrapper
  • それ以外
    • SoraDefaultVideoEncoderFactory

ソフトウェアエンコーダーの使用を強制する

Sora Android SDK ではデフォルトでハードウェアエンコーダーをメインに設定し、ソフトウェアエンコーダーをフォールバック先に指定します。

この挙動を変更してソフトウェアエンコーダーのみを利用するには SoraMediaOptionsoftwareVideoEncoderOnly: Booleantrue を設定してください。デフォルト値は false です。

これにより、ハードウェアエンコーダーではなくソフトウェアエンコーダーを利用することができます。

val capturer = CameraCapturerFactory.create(this)

val option = SoraMediaOption().apply {

    // ソフトウェアエンコーダーのみを利用するように設定
    softwareVideoEncoderOnly = true

    // 映像、音声の送受信の設定
    enableVideoUpstream(capturer!!, egl.eglBaseContext)
    enableAudioUpstream()
    enableVideoDownstream()
    enableAudioDownstream()

    // 映像コーデックを指定
    videoCodec = SoraVideoOption.Codec.VP9
}

VideoEncoderFactory の設定方法

Sora Android SDK は利用したい VideoEncoderFactory を指定できます。

実装例

val capturer = CameraCapturerFactory.create(this)

val option = SoraMediaOption().apply {

    // 独自のエンコーダー実装を利用するように設定する
    videoEncoderFactory = MyVideoEncoderFactory()

    // 映像、音声の送受信の設定
    enableVideoUpstream(capturer!!, egl.eglBaseContext)
    enableAudioUpstream()
    enableVideoDownstream()
    enableAudioDownstream()

    // 映像コーデックを指定
    videoCodec = SoraVideoOption.Codec.VP9
}

org.webrtc.SoftwareVideoEncoderFactory を videoEncoderFactory に設定する際の注意

以下の実装例のように libwebrtc で提供されている、 org.webrtc.SoftwareVideoEncoderFactory を videoEncoderFactory に設定する場合は、 SoftwareVideoEncoderFactory をインスタンス化する前に jingle_peerconnection_so をロードしてください。

実装例

val capturer = CameraCapturerFactory.create(this)

// jingle_peerconnection_so をロードしてから
// SoftwareVideoEncoderFactory を初期化しないと実行時に例外が起こります
try {
   System.loadLibrary("jingle_peerconnection_so")
} catch (e: UnsatisfiedLinkError) {
}

val option = SoraMediaOption().apply {

    // ソフトウェアエンコーダーを利用するように設定する
    videoEncoderFactory = SoftwareVideoEncoderFactory()

    // 映像、音声の送受信の設定
    enableVideoUpstream(capturer!!, egl.eglBaseContext)
    enableAudioUpstream()
    enableVideoDownstream()
    enableAudioDownstream()

    // 映像コーデックを指定
    videoCodec = SoraVideoOption.Codec.VP9
}