Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
!/build-aux
!/cmake
!/data
!/hang-lib
!/src
!.clang-format
!.gersemirc
Expand Down
8 changes: 8 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,14 @@ add_library(${CMAKE_PROJECT_NAME} MODULE)
find_package(libobs REQUIRED)
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE OBS::libobs)

add_library(hang SHARED IMPORTED)
set(HANG_LIB_DIR "${CMAKE_CURRENT_SOURCE_DIR}/hang-lib")
set_target_properties(hang PROPERTIES
IMPORTED_LOCATION "${HANG_LIB_DIR}/libhang.dylib"
INTERFACE_INCLUDE_DIRECTORIES "${HANG_LIB_DIR}"
)
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE hang)

if(ENABLE_FRONTEND_API)
find_package(obs-frontend-api REQUIRED)
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE OBS::obs-frontend-api)
Expand Down
46 changes: 34 additions & 12 deletions CMakePresets.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,32 +11,40 @@
"hidden": true,
"cacheVariables": {
"ENABLE_FRONTEND_API": false,
"ENABLE_QT": false
"ENABLE_QT": false,
"CMAKE_EXPORT_COMPILE_COMMANDS": true
}
},
{
"name": "macos",
"displayName": "macOS Universal",
"description": "Build for macOS 12.0+ (Universal binary)",
"inherits": ["template"],
"inherits": [
"template"
],
"binaryDir": "${sourceDir}/build_macos",
"condition": {
"type": "equals",
"lhs": "${hostSystemName}",
"rhs": "Darwin"
},
"generator": "Xcode",
"warnings": {"dev": true, "deprecated": true},
"warnings": {
"dev": true,
"deprecated": true
},
"cacheVariables": {
"CMAKE_OSX_DEPLOYMENT_TARGET": "12.0",
"CMAKE_OSX_ARCHITECTURES": "arm64;x86_64",
"CMAKE_OSX_ARCHITECTURES": "arm64",
"CODESIGN_IDENTITY": "$penv{CODESIGN_IDENT}",
"CODESIGN_TEAM": "$penv{CODESIGN_TEAM}"
}
},
{
"name": "macos-ci",
"inherits": ["macos"],
"inherits": [
"macos"
],
"displayName": "macOS Universal CI build",
"description": "Build for macOS 12.0+ (Universal binary) for CI",
"generator": "Xcode",
Expand All @@ -49,7 +57,9 @@
"name": "windows-x64",
"displayName": "Windows x64",
"description": "Build for Windows x64",
"inherits": ["template"],
"inherits": [
"template"
],
"binaryDir": "${sourceDir}/build_x64",
"condition": {
"type": "equals",
Expand All @@ -58,11 +68,16 @@
},
"generator": "Visual Studio 17 2022",
"architecture": "x64,version=10.0.22621",
"warnings": {"dev": true, "deprecated": true}
"warnings": {
"dev": true,
"deprecated": true
}
},
{
"name": "windows-ci-x64",
"inherits": ["windows-x64"],
"inherits": [
"windows-x64"
],
"displayName": "Windows x64 CI build",
"description": "Build for Windows x64 on CI",
"cacheVariables": {
Expand All @@ -73,23 +88,30 @@
"name": "ubuntu-x86_64",
"displayName": "Ubuntu x86_64",
"description": "Build for Ubuntu x86_64",
"inherits": ["template"],
"inherits": [
"template"
],
"binaryDir": "${sourceDir}/build_x86_64",
"condition": {
"type": "equals",
"lhs": "${hostSystemName}",
"rhs": "Linux"
},
"generator": "Ninja",
"warnings": {"dev": true, "deprecated": true},
"warnings": {
"dev": true,
"deprecated": true
},
"cacheVariables": {
"CMAKE_BUILD_TYPE": "RelWithDebInfo",
"CMAKE_INSTALL_LIBDIR": "lib/CMAKE_SYSTEM_PROCESSOR-linux-gnu"
}
},
{
"name": "ubuntu-ci-x86_64",
"inherits": ["ubuntu-x86_64"],
"inherits": [
"ubuntu-x86_64"
],
"displayName": "Ubuntu x86_64 CI build",
"description": "Build for Ubuntu x86_64 on CI",
"cacheVariables": {
Expand Down Expand Up @@ -143,4 +165,4 @@
"configuration": "RelWithDebInfo"
}
]
}
}
36 changes: 36 additions & 0 deletions hang-lib/hang.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#include <stdarg.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>

/**
* # Safety
*
* The caller must ensure that:
* - `c_server_url` and `c_path` are valid null-terminated C strings
* - The pointers remain valid for the duration of this function call
*/
void hang_start_from_c(const char *c_server_url, const char *c_path, const char *_c_profile);

void hang_stop_from_c(void);

/**
* # Safety
*
* The caller must ensure that:
* - `data` points to a valid buffer of at least `size` bytes
* - The buffer remains valid for the duration of this function call
*/
void hang_write_video_packet_from_c(const uint8_t *data,
uintptr_t size,
int32_t keyframe,
uint64_t dts);

/**
* # Safety
*
* The caller must ensure that:
* - `data` points to a valid buffer of at least `size` bytes
* - The buffer remains valid for the duration of this function call
*/
void hang_write_audio_packet_from_c(const uint8_t *data, uintptr_t size, uint64_t dts);
10 changes: 10 additions & 0 deletions hang-lib/hang.pc
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include

Name: hang
Description: Media over QUIC C Interface
Version: 0.7.0
Libs: -L${libdir} -lhang
Cflags: -I${includedir}
Binary file added hang-lib/libhang.a
Binary file not shown.
1 change: 1 addition & 0 deletions hang-lib/libhang.d
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/target/release/libhang.a: /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/hang/src/annexb/error.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/hang/src/annexb/import.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/hang/src/annexb/mod.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/hang/src/catalog/audio/aac.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/hang/src/catalog/audio/codec.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/hang/src/catalog/audio/mod.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/hang/src/catalog/chat.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/hang/src/catalog/location.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/hang/src/catalog/mod.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/hang/src/catalog/preview.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/hang/src/catalog/root.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/hang/src/catalog/track.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/hang/src/catalog/user.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/hang/src/catalog/video/av1.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/hang/src/catalog/video/codec.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/hang/src/catalog/video/h264.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/hang/src/catalog/video/h265.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/hang/src/catalog/video/mod.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/hang/src/catalog/video/vp9.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/hang/src/cmaf/error.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/hang/src/cmaf/import.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/hang/src/cmaf/mod.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/hang/src/error.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/hang/src/feedback/capabilities.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/hang/src/feedback/mod.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/hang/src/feedback/root.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/hang/src/lib.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/hang/src/model/frame.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/hang/src/model/group.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/hang/src/model/location.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/hang/src/model/mod.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/hang/src/model/track.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/hang-c/build.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/hang-c/src/lib.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/coding/decode.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/coding/encode.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/coding/mod.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/coding/reader.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/coding/size.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/coding/stream.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/coding/varint.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/coding/version.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/coding/writer.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/error.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/ietf/control.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/ietf/fetch.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/ietf/goaway.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/ietf/group.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/ietf/location.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/ietf/message.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/ietf/mod.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/ietf/namespace.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/ietf/parameters.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/ietf/publish.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/ietf/publish_namespace.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/ietf/publisher.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/ietf/request.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/ietf/session.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/ietf/setup.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/ietf/subscribe.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/ietf/subscribe_namespace.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/ietf/subscriber.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/ietf/track.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/ietf/version.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/lib.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/lite/announce.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/lite/group.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/lite/info.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/lite/message.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/lite/mod.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/lite/parameters.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/lite/priority.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/lite/publisher.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/lite/session.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/lite/setup.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/lite/stream.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/lite/subscribe.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/lite/subscriber.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/lite/version.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/model/broadcast.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/model/frame.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/model/group.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/model/mod.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/model/origin.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/model/produce.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/model/track.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/path.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/session.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq/src/setup.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq-native/src/client.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq-native/src/crypto.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq-native/src/lib.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq-native/src/log.rs /Users/emilsanturio/Documents/SummerCamp\ 2026/moq/rs/moq-native/src/server.rs
Binary file added hang-lib/libhang.dylib
Binary file not shown.
8 changes: 8 additions & 0 deletions src/logger.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#include <iostream>

// Logging macros
#define LOG(level, format, ...) blog(level, "[obs-moq] " format, ##__VA_ARGS__)
#define LOG_DEBUG(format, ...) LOG(LOG_DEBUG, format, ##__VA_ARGS__)
#define LOG_INFO(format, ...) LOG(LOG_INFO, format, ##__VA_ARGS__)
#define LOG_WARNING(format, ...) LOG(LOG_WARNING, format, ##__VA_ARGS__)
#define LOG_ERROR(format, ...) LOG(LOG_ERROR, format, ##__VA_ARGS__)
Loading
Loading