Toggle navigation
Toggle navigation
此项目
正在载入...
Sign in
xuning
/
livekitAndroidXuningTest
转到一个项目
Toggle navigation
项目
群组
代码片段
帮助
Toggle navigation pinning
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
davidliu
2023-10-24 13:07:50 +0900
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Committed by
GitHub
2023-10-24 13:07:50 +0900
Commit
a9c3c08f11fb7d10d38b7feb3d86be82490d9d70
a9c3c08f
1 parent
98c60892
Default to software codecs for vp9 (#300)
* Default to software codecs for vp9 * Spotless
隐藏空白字符变更
内嵌
并排对比
正在显示
3 个修改的文件
包含
132 行增加
和
3 行删除
livekit-android-sdk/src/main/java/io/livekit/android/dagger/RTCModule.kt
livekit-android-sdk/src/main/java/io/livekit/android/webrtc/CustomVideoDecoderFactory.kt
livekit-android-sdk/src/main/java/io/livekit/android/webrtc/CustomVideoEncoderFactory.kt
livekit-android-sdk/src/main/java/io/livekit/android/dagger/RTCModule.kt
查看文件 @
a9c3c08
...
...
@@ -27,7 +27,8 @@ import io.livekit.android.LiveKit
import io.livekit.android.memory.CloseableManager
import io.livekit.android.util.LKLog
import io.livekit.android.util.LoggingLevel
import io.livekit.android.webrtc.SimulcastVideoEncoderFactoryWrapper
import io.livekit.android.webrtc.CustomVideoDecoderFactory
import io.livekit.android.webrtc.CustomVideoEncoderFactory
import org.webrtc.*
import org.webrtc.audio.AudioDeviceModule
import org.webrtc.audio.JavaAudioDeviceModule
...
...
@@ -195,7 +196,7 @@ object RTCModule {
videoEncoderFactoryOverride: VideoEncoderFactory?,
): VideoEncoderFactory {
return videoEncoderFactoryOverride ?: if (videoHwAccel) {
SimulcastVideoEncoderFactoryWrapper
(
CustomVideoEncoderFactory
(
eglContext,
enableIntelVp8Encoder = true,
enableH264HighProfile = false,
...
...
@@ -218,7 +219,7 @@ object RTCModule {
videoDecoderFactoryOverride: VideoDecoderFactory?,
): VideoDecoderFactory {
return videoDecoderFactoryOverride ?: if (videoHwAccel) {
Wrapped
VideoDecoderFactory(eglContext)
Custom
VideoDecoderFactory(eglContext)
} else {
SoftwareVideoDecoderFactory()
}
...
...
livekit-android-sdk/src/main/java/io/livekit/android/webrtc/CustomVideoDecoderFactory.kt
0 → 100644
查看文件 @
a9c3c08
/*
* Copyright 2023 LiveKit, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.livekit.android.webrtc
import org.webrtc.EglBase
import org.webrtc.SoftwareVideoDecoderFactory
import org.webrtc.VideoCodecInfo
import org.webrtc.VideoDecoder
import org.webrtc.VideoDecoderFactory
import org.webrtc.WrappedVideoDecoderFactory
class CustomVideoDecoderFactory(
sharedContext: EglBase.Context?,
private var forceSWCodec: Boolean = false,
private var forceSWCodecs: List<String> = listOf("VP9"),
) : VideoDecoderFactory {
private val softwareVideoDecoderFactory = SoftwareVideoDecoderFactory()
private val wrappedVideoDecoderFactory = WrappedVideoDecoderFactory(sharedContext)
fun setForceSWCodec(forceSWCodec: Boolean) {
this.forceSWCodec = forceSWCodec
}
fun setForceSWCodecList(forceSWCodecs: List<String>) {
this.forceSWCodecs = forceSWCodecs
}
override fun createDecoder(videoCodecInfo: VideoCodecInfo): VideoDecoder? {
if (forceSWCodec) {
return softwareVideoDecoderFactory.createDecoder(videoCodecInfo)
}
if (forceSWCodecs.isNotEmpty()) {
if (forceSWCodecs.contains(videoCodecInfo.name)) {
return softwareVideoDecoderFactory.createDecoder(videoCodecInfo)
}
}
return wrappedVideoDecoderFactory.createDecoder(videoCodecInfo)
}
override fun getSupportedCodecs(): Array<VideoCodecInfo> {
return if (forceSWCodec && forceSWCodecs.isEmpty()) {
softwareVideoDecoderFactory.supportedCodecs
} else {
wrappedVideoDecoderFactory.supportedCodecs
}
}
}
...
...
livekit-android-sdk/src/main/java/io/livekit/android/webrtc/CustomVideoEncoderFactory.kt
0 → 100644
查看文件 @
a9c3c08
/*
* Copyright 2023 LiveKit, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.livekit.android.webrtc
import org.webrtc.EglBase
import org.webrtc.SoftwareVideoEncoderFactory
import org.webrtc.VideoCodecInfo
import org.webrtc.VideoEncoder
import org.webrtc.VideoEncoderFactory
class CustomVideoEncoderFactory(
sharedContext: EglBase.Context?,
enableIntelVp8Encoder: Boolean,
enableH264HighProfile: Boolean,
private var forceSWCodec: Boolean = false,
private var forceSWCodecs: List<String> = listOf("VP9"),
) : VideoEncoderFactory {
private val softwareVideoEncoderFactory = SoftwareVideoEncoderFactory()
private val simulcastVideoEncoderFactoryWrapper: SimulcastVideoEncoderFactoryWrapper
init {
simulcastVideoEncoderFactoryWrapper =
SimulcastVideoEncoderFactoryWrapper(sharedContext, enableIntelVp8Encoder, enableH264HighProfile)
}
fun setForceSWCodec(forceSWCodec: Boolean) {
this.forceSWCodec = forceSWCodec
}
fun setForceSWCodecList(forceSWCodecs: List<String>) {
this.forceSWCodecs = forceSWCodecs
}
override fun createEncoder(videoCodecInfo: VideoCodecInfo): VideoEncoder? {
if (forceSWCodec) {
return softwareVideoEncoderFactory.createEncoder(videoCodecInfo)
}
if (forceSWCodecs.isNotEmpty()) {
if (forceSWCodecs.contains(videoCodecInfo.name)) {
return softwareVideoEncoderFactory.createEncoder(videoCodecInfo)
}
}
return simulcastVideoEncoderFactoryWrapper.createEncoder(videoCodecInfo)
}
override fun getSupportedCodecs(): Array<VideoCodecInfo> {
return if (forceSWCodec && forceSWCodecs.isEmpty()) {
softwareVideoEncoderFactory.supportedCodecs
} else {
simulcastVideoEncoderFactoryWrapper.supportedCodecs
}
}
}
...
...
请
注册
或
登录
后发表评论