Skip to content

Commit ec2377c

Browse files
H.265 codec (#746)
Co-authored-by: Błażej Pankowski <[email protected]>
1 parent 76064b6 commit ec2377c

File tree

7 files changed

+33
-7
lines changed

7 files changed

+33
-7
lines changed

.changes/hevc-codec

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
minor type="added" "HEVC (H.265) codec support"

LiveKitClient.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ Pod::Spec.new do |spec|
1414

1515
spec.source_files = "Sources/**/*"
1616

17-
spec.dependency("LiveKitWebRTC", "= 137.7151.02")
17+
spec.dependency("LiveKitWebRTC", "= 137.7151.03")
1818
spec.dependency("SwiftProtobuf")
1919
spec.dependency("Logging", "= 1.5.4")
2020
spec.dependency("DequeModule", "= 1.1.4")

Package.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ let package = Package(
1919
],
2020
dependencies: [
2121
// LK-Prefixed Dynamic WebRTC XCFramework
22-
.package(url: "https://github.com/livekit/webrtc-xcframework.git", exact: "137.7151.02"),
22+
.package(url: "https://github.com/livekit/webrtc-xcframework.git", exact: "137.7151.03"),
2323
.package(url: "https://github.com/apple/swift-protobuf.git", from: "1.29.0"),
2424
.package(url: "https://github.com/apple/swift-log.git", from: "1.6.2"),
2525
.package(url: "https://github.com/apple/swift-collections.git", from: "1.1.0"),

[email protected]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ let package = Package(
2020
],
2121
dependencies: [
2222
// LK-Prefixed Dynamic WebRTC XCFramework
23-
.package(url: "https://github.com/livekit/webrtc-xcframework.git", exact: "137.7151.02"),
23+
.package(url: "https://github.com/livekit/webrtc-xcframework.git", exact: "137.7151.03"),
2424
.package(url: "https://github.com/apple/swift-protobuf.git", from: "1.29.0"),
2525
.package(url: "https://github.com/apple/swift-log.git", from: "1.6.2"),
2626
.package(url: "https://github.com/apple/swift-collections.git", from: "1.1.0"),

Sources/LiveKit/Core/RTC.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ private extension Array where Element: LKRTCVideoCodecInfo {
2222
func rewriteCodecsIfNeeded() -> [LKRTCVideoCodecInfo] {
2323
// rewrite H264's profileLevelId to 42e032
2424
let codecs = map { $0.name == kLKRTCVideoCodecH264Name ? RTC.h264BaselineLevel5CodecInfo : $0 }
25-
// logger.log("supportedCodecs: \(codecs.map({ "\($0.name) - \($0.parameters)" }).joined(separator: ", "))", type: Engine.self)
25+
// logger.log("supportedCodecs: \(codecs.map({ "\($0.name) - \($0.parameters)" }).joined(separator: ", "))", type: RTC.self)
2626
return codecs
2727
}
2828
}
@@ -70,14 +70,14 @@ actor RTC {
7070

7171
// global properties are already lazy
7272

73-
private static let encoderFactory: LKRTCVideoEncoderFactory & Sendable = {
73+
static let encoderFactory: LKRTCVideoEncoderFactory & Sendable = {
7474
let encoderFactory = VideoEncoderFactory()
7575
return VideoEncoderFactorySimulcast(primary: encoderFactory,
7676
fallback: encoderFactory)
7777

7878
}()
7979

80-
private static let decoderFactory: LKRTCVideoDecoderFactory & Sendable = VideoDecoderFactory()
80+
static let decoderFactory: LKRTCVideoDecoderFactory & Sendable = VideoDecoderFactory()
8181

8282
static let audioProcessingModule: LKRTCDefaultAudioProcessingModule = .init()
8383

Sources/LiveKit/Types/Codec/VideoCodec.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,9 @@ public final class VideoCodec: NSObject, Codec {
3333
public static let vp8 = VideoCodec(name: "vp8", isBackup: true)
3434
public static let vp9 = VideoCodec(name: "vp9", isSVC: true)
3535
public static let av1 = VideoCodec(name: "av1", isSVC: true)
36+
public static let h265 = VideoCodec(name: "h265", isBackup: false)
3637

37-
public static let all: [VideoCodec] = [.h264, .vp8, .vp9, .av1]
38+
public static let all: [VideoCodec] = [.h264, .h265, .vp8, .vp9, .av1]
3839
public static let allBackup: [VideoCodec] = [.h264, .vp8]
3940

4041
public let mediaType = "video"

Tests/LiveKitTests/CodecTests.swift

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,31 @@ class CodecTests: LKTestCase {
2929
let h264 = VideoCodec.from(mimeType: "video/h264")
3030
XCTAssert(h264 == .h264)
3131

32+
let h265 = VideoCodec.from(mimeType: "video/h265")
33+
XCTAssert(h265 == .h265)
34+
3235
let av1 = VideoCodec.from(mimeType: "video/av1")
3336
XCTAssert(av1 == .av1)
3437
}
38+
39+
func testSupportedCodecs() {
40+
let encoderCodecs = RTC.decoderFactory.supportedCodecs()
41+
print("encoderCodecs: \(encoderCodecs.map { "\($0.name) - \($0.parameters)" }.joined(separator: ", "))")
42+
let decoderCodecs = RTC.decoderFactory.supportedCodecs()
43+
print("decoderCodecs: \(decoderCodecs.map { "\($0.name) - \($0.parameters)" }.joined(separator: ", "))")
44+
45+
// Check encoder codecs
46+
XCTAssert(encoderCodecs.contains(where: { $0.name == "VP8" }))
47+
XCTAssert(encoderCodecs.contains(where: { $0.name == "VP9" }))
48+
XCTAssert(encoderCodecs.contains(where: { $0.name == "AV1" }))
49+
XCTAssert(encoderCodecs.contains(where: { $0.name == "H264" }))
50+
XCTAssert(encoderCodecs.contains(where: { $0.name == "H265" }))
51+
52+
// Check decoder codecs
53+
XCTAssert(decoderCodecs.contains(where: { $0.name == "VP8" }))
54+
XCTAssert(decoderCodecs.contains(where: { $0.name == "VP9" }))
55+
XCTAssert(decoderCodecs.contains(where: { $0.name == "AV1" }))
56+
XCTAssert(decoderCodecs.contains(where: { $0.name == "H264" }))
57+
XCTAssert(encoderCodecs.contains(where: { $0.name == "H265" }))
58+
}
3559
}

0 commit comments

Comments
 (0)