Skip to content

Commit 6c89b25

Browse files
committed
feat: add H.264 support and improve linking options for Apple platforms
1 parent cecbb4d commit 6c89b25

File tree

3 files changed

+22
-9
lines changed

3 files changed

+22
-9
lines changed

webrtc-jni/src/main/cpp/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,8 @@ target_link_libraries(${PROJECT_NAME} webrtc)
9898

9999
if(APPLE)
100100
set_source_files_properties(${SOURCES} PROPERTIES COMPILE_FLAGS "-x objective-c++")
101-
target_link_libraries(${PROJECT_NAME} "-framework Foundation" "-framework AVFoundation" "-framework CoreMedia" "-framework CoreAudio" "-framework IOKit" "-framework CoreVideo" "-framework VideoToolbox")
101+
target_link_options(${PROJECT_NAME} PRIVATE "-ObjC")
102+
target_link_libraries(${PROJECT_NAME} "-framework Foundation" "-framework AVFoundation" "-framework CoreMedia" "-framework CoreAudio" "-framework IOKit" "-framework CoreVideo" "-framework VideoToolbox" "-framework QuartzCore")
102103
elseif(LINUX)
103104
if(NOT TARGET_CPU MATCHES "^arm")
104105
set(CXX_LIBS "-static-libgcc -stdlib=libc++ -lc++ -lc++abi")

webrtc-jni/src/main/cpp/dependencies/webrtc/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ if(APPLE)
164164
${TARGET_INC_DIR}/sdk/objc
165165
${TARGET_INC_DIR}/sdk/objc/base
166166
)
167-
target_compile_definitions(${PROJECT_NAME} PUBLIC WEBRTC_MAC WEBRTC_POSIX)
167+
target_compile_definitions(${PROJECT_NAME} PUBLIC WEBRTC_MAC WEBRTC_POSIX WEBRTC_USE_H264)
168168
target_link_libraries(${PROJECT_NAME} "-framework Foundation" "-framework AVFoundation" "-framework CoreGraphics" "-framework CoreAudio" "-framework CoreVideo" "-framework ScreenCaptureKit" "-framework AudioToolbox" "-framework IOSurface" "-framework ApplicationServices" "-framework AppKit")
169169
elseif(LINUX)
170170
# Find DBus
@@ -285,7 +285,7 @@ execute_command(
285285
message(STATUS "WebRTC: compile")
286286
if(APPLE)
287287
execute_command(
288-
COMMAND ninja -C "${WEBRTC_BUILD}" :default sdk:native_api sdk:videocapture_objc
288+
COMMAND ninja -C "${WEBRTC_BUILD}" :default api/audio_codecs:builtin_audio_decoder_factory api/task_queue:default_task_queue_factory sdk:native_api sdk:default_codec_factory_objc pc:peer_connection sdk:videocapture_objc
289289
WORKING_DIRECTORY "${WEBRTC_SRC}"
290290
)
291291

webrtc-jni/src/main/cpp/src/JNI_PeerConnectionFactory.cpp

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,22 +32,29 @@
3232
#include "api/create_peerconnection_factory.h"
3333
#include "api/audio_codecs/builtin_audio_decoder_factory.h"
3434
#include "api/audio_codecs/builtin_audio_encoder_factory.h"
35+
36+
#ifdef __APPLE__
37+
#include "sdk/objc/components/video_codec/RTCDefaultVideoDecoderFactory.h"
38+
#include "sdk/objc/components/video_codec/RTCDefaultVideoEncoderFactory.h"
39+
#include "sdk/objc/native/api/video_decoder_factory.h"
40+
#include "sdk/objc/native/api/video_encoder_factory.h"
41+
#else
3542
#include "api/video_codecs/builtin_video_decoder_factory.h"
3643
#include "api/video_codecs/builtin_video_encoder_factory.h"
37-
38-
#include "api/video_codecs/video_decoder_factory.h"
39-
#include "api/video_codecs/video_decoder_factory_template.h"
4044
#include "api/video_codecs/video_decoder_factory_template_dav1d_adapter.h"
4145
#include "api/video_codecs/video_decoder_factory_template_libvpx_vp8_adapter.h"
4246
#include "api/video_codecs/video_decoder_factory_template_libvpx_vp9_adapter.h"
4347
#include "api/video_codecs/video_decoder_factory_template_open_h264_adapter.h"
44-
#include "api/video_codecs/video_encoder.h"
45-
#include "api/video_codecs/video_encoder_factory.h"
46-
#include "api/video_codecs/video_encoder_factory_template.h"
4748
#include "api/video_codecs/video_encoder_factory_template_libaom_av1_adapter.h"
4849
#include "api/video_codecs/video_encoder_factory_template_libvpx_vp8_adapter.h"
4950
#include "api/video_codecs/video_encoder_factory_template_libvpx_vp9_adapter.h"
5051
#include "api/video_codecs/video_encoder_factory_template_open_h264_adapter.h"
52+
#endif
53+
54+
#include "api/video_codecs/video_decoder_factory.h"
55+
#include "api/video_codecs/video_decoder_factory_template.h"
56+
#include "api/video_codecs/video_encoder_factory.h"
57+
#include "api/video_codecs/video_encoder_factory_template.h"
5158

5259
JNIEXPORT void JNICALL Java_dev_onvoid_webrtc_PeerConnectionFactory_initialize
5360
(JNIEnv * env, jobject caller, jobject audioModule, jobject audioProcessing)
@@ -89,6 +96,10 @@ JNIEXPORT void JNICALL Java_dev_onvoid_webrtc_PeerConnectionFactory_initialize
8996
adm,
9097
webrtc::CreateBuiltinAudioEncoderFactory(),
9198
webrtc::CreateBuiltinAudioDecoderFactory(),
99+
#ifdef __APPLE__
100+
webrtc::ObjCToNativeVideoEncoderFactory([[RTC_OBJC_TYPE(RTCDefaultVideoEncoderFactory) alloc] init]),
101+
webrtc::ObjCToNativeVideoDecoderFactory([[RTC_OBJC_TYPE(RTCDefaultVideoDecoderFactory) alloc] init]),
102+
#else
92103
std::make_unique<webrtc::VideoEncoderFactoryTemplate<
93104
webrtc::LibvpxVp8EncoderTemplateAdapter,
94105
webrtc::LibvpxVp9EncoderTemplateAdapter,
@@ -99,6 +110,7 @@ JNIEXPORT void JNICALL Java_dev_onvoid_webrtc_PeerConnectionFactory_initialize
99110
webrtc::LibvpxVp9DecoderTemplateAdapter,
100111
webrtc::OpenH264DecoderTemplateAdapter,
101112
webrtc::Dav1dDecoderTemplateAdapter>>(),
113+
#endif
102114
nullptr,
103115
apm);
104116

0 commit comments

Comments
 (0)