VideoEncoderFactory¶
VideoEncoderFactory は、 SoraMediaOption.videoEncoderFactory で指定することができます。
VideoEncoderFactory を設定しない場合の挙動¶
VideoEncoderFactory を設定しない場合は、以下のように VideoEncoderFactory が決定されます (Sora Android SDK の持つ VideoEncoderFactory は internal なので SDK ユーザーが直接利用することはできません)。
- サイマルキャストが有効な場合
- SimulcastVideoEncoderFactoryWrapper
- それ以外
- SoraDefaultVideoEncoderFactory
ソフトウェアエンコーダーの使用を強制する¶
Sora Android SDK ではデフォルトでハードウェアエンコーダーをメインに設定し、ソフトウェアエンコーダーをフォールバック先に指定します。
この挙動を変更してソフトウェアエンコーダーのみを利用するには SoraMediaOption の softwareVideoEncoderOnly: Boolean に true を設定してください。デフォルト値は 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
}