tirtc-devtools-cli 0.0.14 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/README.md +1 -1
  2. package/USAGE.md +1 -3
  3. package/dist/cli/src/index.js +17 -1
  4. package/package.json +3 -2
  5. package/vendor/devtools/driver/linux-x64/devtools_driver_probe +0 -0
  6. package/vendor/devtools/driver/macos-arm64/devtools_driver_probe +0 -0
  7. package/vendor/runtime/linux-x64/include/tirtc/audio.h +216 -0
  8. package/vendor/runtime/linux-x64/include/tirtc/audio_codec.h +23 -0
  9. package/vendor/runtime/linux-x64/include/tirtc/audio_frame.h +36 -0
  10. package/vendor/runtime/linux-x64/include/tirtc/audio_io.h +65 -0
  11. package/vendor/runtime/linux-x64/include/tirtc/audio_io_android.h +19 -0
  12. package/vendor/runtime/linux-x64/include/tirtc/audio_io_apple.h +19 -0
  13. package/vendor/runtime/linux-x64/include/tirtc/audio_io_harmony.h +19 -0
  14. package/vendor/runtime/linux-x64/include/tirtc/audio_io_windows.h +19 -0
  15. package/vendor/runtime/linux-x64/include/tirtc/audio_processing.h +56 -0
  16. package/vendor/runtime/linux-x64/include/tirtc/audio_sample_rate.h +18 -0
  17. package/vendor/runtime/linux-x64/include/tirtc/av.h +208 -0
  18. package/vendor/runtime/linux-x64/include/tirtc/error.h +63 -0
  19. package/vendor/runtime/linux-x64/include/tirtc/foundation/build_info.h +27 -0
  20. package/vendor/runtime/linux-x64/include/tirtc/http.h +57 -0
  21. package/vendor/runtime/linux-x64/include/tirtc/logging.h +55 -0
  22. package/vendor/runtime/linux-x64/include/tirtc/media_codec.h +21 -0
  23. package/vendor/runtime/linux-x64/include/tirtc/media_downlink.h +154 -0
  24. package/vendor/runtime/linux-x64/include/tirtc/media_uplink.h +120 -0
  25. package/vendor/runtime/linux-x64/include/tirtc/transport.h +445 -0
  26. package/vendor/runtime/linux-x64/include/tirtc/trp.h +187 -0
  27. package/vendor/runtime/linux-x64/include/tirtc/video_codec.h +99 -0
  28. package/vendor/runtime/linux-x64/include/tirtc/video_frame.h +55 -0
  29. package/vendor/runtime/linux-x64/include/tirtc/video_io.h +53 -0
  30. package/vendor/runtime/linux-x64/include/tirtc/video_io_android.h +34 -0
  31. package/vendor/runtime/linux-x64/include/tirtc/video_io_apple.h +47 -0
  32. package/vendor/runtime/linux-x64/include/tirtc/video_io_harmony.h +32 -0
  33. package/vendor/runtime/linux-x64/include/tirtc/video_io_windows.h +26 -0
  34. package/vendor/runtime/linux-x64/include/tirtc/video_processing.h +34 -0
  35. package/vendor/runtime/linux-x64/lib/libTiRTC.a +0 -0
  36. package/vendor/runtime/linux-x64/lib/libcrypto.a +0 -0
  37. package/vendor/runtime/linux-x64/lib/libmatrix_runtime_audio.a +0 -0
  38. package/vendor/runtime/linux-x64/lib/libmatrix_runtime_facade.a +0 -0
  39. package/vendor/runtime/linux-x64/lib/libmatrix_runtime_foundation_http.a +0 -0
  40. package/vendor/runtime/linux-x64/lib/libmatrix_runtime_foundation_logging.a +0 -0
  41. package/vendor/runtime/linux-x64/lib/libmatrix_runtime_media.a +0 -0
  42. package/vendor/runtime/linux-x64/lib/libmatrix_runtime_transport.a +0 -0
  43. package/vendor/runtime/linux-x64/lib/libmatrix_runtime_video.a +0 -0
  44. package/vendor/runtime/linux-x64/lib/libssl.a +0 -0
  45. package/vendor/runtime/linux-x64/lib/libwebrtc_apm.a +0 -0
  46. package/vendor/runtime/linux-x64/lib/libxlog.a +0 -0
  47. package/vendor/runtime/linux-x64/manifest.txt +45 -0
  48. package/vendor/runtime/macos-arm64/lib/libmatrix_runtime_audio.a +0 -0
  49. package/vendor/runtime/macos-arm64/lib/libmatrix_runtime_facade.a +0 -0
  50. package/vendor/runtime/macos-arm64/lib/libmatrix_runtime_foundation_http.a +0 -0
  51. package/vendor/runtime/macos-arm64/lib/libmatrix_runtime_foundation_logging.a +0 -0
  52. package/vendor/runtime/macos-arm64/lib/libmatrix_runtime_media.a +0 -0
  53. package/vendor/runtime/macos-arm64/lib/libmatrix_runtime_transport.a +0 -0
  54. package/vendor/runtime/macos-arm64/lib/libmatrix_runtime_video.a +0 -0
  55. package/vendor/runtime/macos-arm64/manifest.txt +8 -8
  56. package/vendor/devtools/driver/macos-arm64/runtime_validation_client_bin +0 -0
@@ -0,0 +1,208 @@
1
+ #ifndef TIRTC_FACADE_AV_H_
2
+ #define TIRTC_FACADE_AV_H_
3
+
4
+ #include <stdint.h>
5
+
6
+ #include "tirtc/audio.h"
7
+ #include "tirtc/media_codec.h"
8
+ #include "tirtc/video_codec.h"
9
+ #include "tirtc/video_io.h"
10
+
11
+ #ifdef __cplusplus
12
+ extern "C" {
13
+ #endif
14
+
15
+ typedef struct TirtcVideoInput TirtcVideoInput;
16
+
17
+ typedef struct TirtcVideoEncodedInput TirtcVideoEncodedInput;
18
+
19
+ typedef struct TirtcVideoOutput TirtcVideoOutput;
20
+
21
+ typedef enum TirtcVideoOutputState {
22
+
23
+ TIRTC_VIDEO_OUTPUT_STATE_IDLE = 0,
24
+
25
+ TIRTC_VIDEO_OUTPUT_STATE_BUFFERING = 1,
26
+
27
+ TIRTC_VIDEO_OUTPUT_STATE_RENDERING = 2,
28
+
29
+ TIRTC_VIDEO_OUTPUT_STATE_FAILED = 3,
30
+ } TirtcVideoOutputState;
31
+
32
+ typedef struct TirtcVideoOutputStartupMetrics {
33
+ int has_connect_start;
34
+ int has_connected;
35
+ int has_first_video_input;
36
+ int has_first_video_decoded;
37
+ int has_first_video_rendered;
38
+ uint64_t connect_start_monotonic_ms;
39
+ uint64_t connected_monotonic_ms;
40
+ uint64_t first_video_input_monotonic_ms;
41
+ uint64_t first_video_decoded_monotonic_ms;
42
+ uint64_t first_video_rendered_monotonic_ms;
43
+ } TirtcVideoOutputStartupMetrics;
44
+
45
+ typedef struct TirtcVideoOutputMetricsSnapshot {
46
+ TirtcVideoOutputStartupMetrics startup;
47
+ TirtcOutputStutterMetrics stutter;
48
+ TirtcPendingDurationMetrics pending;
49
+ } TirtcVideoOutputMetricsSnapshot;
50
+
51
+ typedef struct TirtcVideoOutputOptions {
52
+ TirtcVideoDecoderPreference decoder_preference;
53
+ } TirtcVideoOutputOptions;
54
+
55
+ typedef struct TirtcVideoInputOptions {
56
+ TirtcMediaCodec codec;
57
+
58
+ uint32_t width;
59
+
60
+ uint32_t height;
61
+
62
+ uint32_t fps;
63
+
64
+ uint32_t bitrate_kbps;
65
+
66
+ TirtcVideoEncoderPreference encoder_preference;
67
+ } TirtcVideoInputOptions;
68
+
69
+ /**
70
+ * Video input observer.
71
+ *
72
+ * `owned_message` is allocated by facade for this callback dispatch. Consumers must release it
73
+ * with `tirtc_owned_string_release()` after copying or converting the string they need.
74
+ */
75
+ typedef struct TirtcVideoInputObserver {
76
+ void (*on_state_changed)(TirtcVideoInput* input, TirtcInputState state, void* user_data);
77
+
78
+ void (*on_output_size_changed)(TirtcVideoInput* input, uint32_t width, uint32_t height,
79
+ void* user_data);
80
+
81
+ void (*on_error)(TirtcVideoInput* input, TirtcError error, TirtcOwnedString* owned_message,
82
+ void* user_data);
83
+ } TirtcVideoInputObserver;
84
+
85
+ typedef struct TirtcVideoEncodedInputOptions {
86
+ TirtcMediaCodec codec;
87
+ TirtcVideoBitstreamFormat bitstream_format;
88
+ } TirtcVideoEncodedInputOptions;
89
+
90
+ typedef struct TirtcVideoEncodedInputObserver {
91
+ void (*on_state_changed)(TirtcVideoEncodedInput* input, TirtcInputState state, void* user_data);
92
+
93
+ void (*on_output_size_changed)(TirtcVideoEncodedInput* input, uint32_t width, uint32_t height,
94
+ void* user_data);
95
+
96
+ void (*on_error)(TirtcVideoEncodedInput* input, TirtcError error, TirtcOwnedString* owned_message,
97
+ void* user_data);
98
+
99
+ void (*on_key_frame_requested)(TirtcVideoEncodedInput* input, void* user_data);
100
+ } TirtcVideoEncodedInputObserver;
101
+
102
+ /**
103
+ * Video output observer.
104
+ *
105
+ * `owned_message` is allocated by facade for this callback dispatch. Consumers must release it
106
+ * with `tirtc_owned_string_release()` after copying or converting the string they need.
107
+ */
108
+ typedef struct TirtcVideoOutputObserver {
109
+ void (*on_state_changed)(TirtcVideoOutput* output, TirtcVideoOutputState state, void* user_data);
110
+
111
+ void (*on_output_size_changed)(TirtcVideoOutput* output, uint32_t width, uint32_t height,
112
+ void* user_data);
113
+
114
+ void (*on_error)(TirtcVideoOutput* output, TirtcError error, TirtcOwnedString* owned_message,
115
+ void* user_data);
116
+ } TirtcVideoOutputObserver;
117
+
118
+ TirtcError tirtc_set_media_trace_enabled(int enabled);
119
+
120
+ TirtcError tirtc_get_media_trace_enabled(int* out_enabled);
121
+
122
+ TirtcError tirtc_conn_subscribe_video(TirtcConn* connection, uint8_t stream_id);
123
+
124
+ TirtcError tirtc_conn_unsubscribe_video(TirtcConn* connection, uint8_t stream_id);
125
+
126
+ TirtcError tirtc_conn_request_key_frame(TirtcConn* connection, uint8_t stream_id);
127
+
128
+ TirtcError tirtc_video_input_create(TirtcVideoInput** out_input);
129
+
130
+ TirtcError tirtc_video_input_set_vin(TirtcVideoInput* input, TirtcVideoVin* vin);
131
+
132
+ TirtcError tirtc_video_input_set_options(TirtcVideoInput* input,
133
+ const TirtcVideoInputOptions* options);
134
+
135
+ TirtcError tirtc_video_input_set_observer(TirtcVideoInput* input,
136
+ const TirtcVideoInputObserver* observer, void* user_data);
137
+
138
+ TirtcError tirtc_video_input_start(TirtcVideoInput* input);
139
+
140
+ TirtcError tirtc_video_input_stop(TirtcVideoInput* input);
141
+
142
+ TirtcError tirtc_video_input_attach(TirtcVideoInput* input, TirtcConn* connection,
143
+ uint8_t stream_id);
144
+
145
+ TirtcError tirtc_video_input_detach(TirtcVideoInput* input, TirtcConn* connection);
146
+
147
+ TirtcError tirtc_video_input_attach_preview(TirtcVideoInput* input,
148
+ TirtcVideoOutput* preview_output);
149
+
150
+ TirtcError tirtc_video_input_detach_preview(TirtcVideoInput* input);
151
+
152
+ void tirtc_video_input_destroy(TirtcVideoInput* input);
153
+
154
+ TirtcError tirtc_video_encoded_input_create(TirtcVideoEncodedInput** out_input);
155
+
156
+ TirtcError tirtc_video_encoded_input_set_options(TirtcVideoEncodedInput* input,
157
+ const TirtcVideoEncodedInputOptions* options);
158
+
159
+ TirtcError tirtc_video_encoded_input_set_observer(TirtcVideoEncodedInput* input,
160
+ const TirtcVideoEncodedInputObserver* observer,
161
+ void* user_data);
162
+
163
+ TirtcError tirtc_video_encoded_input_start(TirtcVideoEncodedInput* input);
164
+
165
+ TirtcError tirtc_video_encoded_input_stop(TirtcVideoEncodedInput* input);
166
+
167
+ TirtcError tirtc_video_encoded_input_attach(TirtcVideoEncodedInput* input, TirtcConn* connection,
168
+ uint8_t stream_id);
169
+
170
+ TirtcError tirtc_video_encoded_input_detach(TirtcVideoEncodedInput* input, TirtcConn* connection);
171
+
172
+ TirtcError tirtc_video_encoded_input_submit_frame(TirtcVideoEncodedInput* input,
173
+ const TirtcVideoEncodedFrame* frame);
174
+
175
+ void tirtc_video_encoded_input_destroy(TirtcVideoEncodedInput* input);
176
+
177
+ TirtcError tirtc_video_output_create(TirtcVideoOutput** out_output);
178
+
179
+ TirtcError tirtc_video_output_set_options(TirtcVideoOutput* output,
180
+ const TirtcVideoOutputOptions* options);
181
+
182
+ TirtcError tirtc_video_output_set_observer(TirtcVideoOutput* output,
183
+ const TirtcVideoOutputObserver* observer,
184
+ void* user_data);
185
+
186
+ TirtcError tirtc_video_output_attach_view(TirtcVideoOutput* output, TirtcVideoVout* view_sink);
187
+
188
+ TirtcError tirtc_video_output_detach_view(TirtcVideoOutput* output);
189
+
190
+ TirtcError tirtc_video_output_attach(TirtcVideoOutput* output, TirtcConn* connection,
191
+ uint8_t stream_id);
192
+
193
+ TirtcError tirtc_video_output_detach(TirtcVideoOutput* output);
194
+
195
+ void tirtc_video_output_destroy(TirtcVideoOutput* output);
196
+
197
+ TirtcError tirtc_video_output_start_raw_dump(TirtcVideoOutput* output);
198
+
199
+ TirtcError tirtc_video_output_stop_raw_dump(TirtcVideoOutput* output);
200
+
201
+ TirtcError tirtc_metrics_video_output_get_snapshot(TirtcVideoOutput* output,
202
+ TirtcVideoOutputMetricsSnapshot* out_snapshot);
203
+
204
+ #ifdef __cplusplus
205
+ }
206
+ #endif
207
+
208
+ #endif
@@ -0,0 +1,63 @@
1
+ #ifndef TIRTC_FOUNDATION_ERROR_H_
2
+ #define TIRTC_FOUNDATION_ERROR_H_
3
+
4
+ #ifdef __cplusplus
5
+ extern "C" {
6
+ #endif
7
+
8
+ typedef enum TirtcError {
9
+ TIRTC_ERROR_OK = 0,
10
+ TIRTC_ERROR_INVALID_ARGUMENT = 6000,
11
+ TIRTC_ERROR_NOT_INITIALIZED = 6001,
12
+ TIRTC_ERROR_INTERNAL = 6002,
13
+ TIRTC_ERROR_NOT_READY = 6003,
14
+ TIRTC_ERROR_UNSUPPORTED_LOOP_POLICY = 6004,
15
+ TIRTC_ERROR_SOURCE_HASH_MISMATCH = 6005,
16
+ TIRTC_ERROR_ALREADY_STOPPED = 6006,
17
+ TIRTC_ERROR_STOPPED = TIRTC_ERROR_ALREADY_STOPPED,
18
+ TIRTC_ERROR_ALREADY_DESTROYED = 6007,
19
+ TIRTC_ERROR_DESTROYED = TIRTC_ERROR_ALREADY_DESTROYED,
20
+ TIRTC_ERROR_TRANSPORT_INVALID_LICENSE = 6008,
21
+ TIRTC_ERROR_TRANSPORT_TIMEOUT = 6009,
22
+ TIRTC_ERROR_TRANSPORT_BUSY = 6010,
23
+ TIRTC_ERROR_TRANSPORT_CONNECTION_TIMEOUT_CLOSED = 6011,
24
+ TIRTC_ERROR_TRANSPORT_REMOTE_CLOSED = 6012,
25
+ TIRTC_ERROR_TRANSPORT_CONNECTION_OTHER_ERROR = 6013,
26
+ TIRTC_ERROR_TRANSPORT_TOKEN_EXPIRED = 6014,
27
+ TIRTC_ERROR_DUMP_ROOT_UNAVAILABLE = 6015,
28
+ TIRTC_ERROR_DUMP_ALREADY_ACTIVE = 6016,
29
+ TIRTC_ERROR_TRANSPORT_RESOURCE_EXHAUSTED = 6017,
30
+ TIRTC_ERROR_TRANSPORT_SERVER_ERROR = 6018,
31
+ TIRTC_ERROR_TRANSPORT_BACKEND_INTERNAL_ERROR = 6019,
32
+ TIRTC_ERROR_TRANSPORT_NO_SECRET_KEY = 6020,
33
+ TIRTC_ERROR_TRANSPORT_UNEXPECTED_RESPONSE = 6021,
34
+ TIRTC_ERROR_ALREADY_INITIALIZED = 6022,
35
+ TIRTC_ERROR_INVALID_THREAD = 6023,
36
+ TIRTC_ERROR_PERMISSION_DENIED = 6024,
37
+ TIRTC_ERROR_ALREADY_BOUND = 6025,
38
+ TIRTC_ERROR_IN_USE = 6026,
39
+ TIRTC_ERROR_NOT_STARTED = 6027,
40
+ TIRTC_ERROR_NOT_CONNECTED = 6028,
41
+ TIRTC_ERROR_NOT_BOUND = 6029,
42
+ TIRTC_ERROR_NOT_CONFIGURED = 6030,
43
+ TIRTC_ERROR_NOT_OPEN = 6031,
44
+ TIRTC_ERROR_APP_ID_REQUIRED = 6032,
45
+ TIRTC_ERROR_VIDEO_ENCODER_BACKEND_UNAVAILABLE = 6033,
46
+ TIRTC_ERROR_VIDEO_ENCODER_CODEC_UNSUPPORTED = 6034,
47
+ TIRTC_ERROR_VIDEO_ENCODER_INITIALIZATION_FAILED = 6035,
48
+ TIRTC_ERROR_VIDEO_DECODER_CODEC_UNSUPPORTED = 6036,
49
+ TIRTC_ERROR_VIDEO_DECODER_BACKEND_UNAVAILABLE = 6037,
50
+ TIRTC_ERROR_VIDEO_DECODER_INITIALIZATION_FAILED = 6038,
51
+ TIRTC_ERROR_VIDEO_DECODER_CONFIGURATION_FAILED = 6039,
52
+ TIRTC_ERROR_VIDEO_DECODER_RUNTIME_FAILED = 6040,
53
+ TIRTC_ERROR_VIDEO_OUTPUT_TARGET_UNAVAILABLE = 6041,
54
+ TIRTC_ERROR_VIDEO_OUTPUT_RENDER_FAILED = 6042,
55
+ } TirtcError;
56
+
57
+ const char* tirtc_error_to_string(TirtcError error);
58
+
59
+ #ifdef __cplusplus
60
+ }
61
+ #endif
62
+
63
+ #endif // TIRTC_FOUNDATION_ERROR_H_
@@ -0,0 +1,27 @@
1
+ #ifndef TIRTC_FOUNDATION_BUILD_INFO_H_
2
+ #define TIRTC_FOUNDATION_BUILD_INFO_H_
3
+
4
+ #include "tirtc/error.h"
5
+
6
+ #ifdef __cplusplus
7
+ extern "C" {
8
+ #endif
9
+
10
+ typedef struct TirtcBuildInfo {
11
+ const char* semver_base;
12
+ const char* semver_effective;
13
+ const char* commit_hash;
14
+ int commit_count;
15
+ const char* build_branch;
16
+ const char* build_time_utc;
17
+ const char* version_string;
18
+ } TirtcBuildInfo;
19
+
20
+ const TirtcBuildInfo* tirtc_build_info_get(void);
21
+ const char* tirtc_build_version_string(void);
22
+
23
+ #ifdef __cplusplus
24
+ }
25
+ #endif
26
+
27
+ #endif // TIRTC_FOUNDATION_BUILD_INFO_H_
@@ -0,0 +1,57 @@
1
+ #ifndef TIRTC_FOUNDATION_HTTP_H_
2
+ #define TIRTC_FOUNDATION_HTTP_H_
3
+
4
+ #include "tirtc/error.h"
5
+
6
+ #ifdef __cplusplus
7
+ extern "C" {
8
+ #endif
9
+
10
+ typedef enum TirtcHttpMethod {
11
+ TIRTC_HTTP_METHOD_GET = 0,
12
+ TIRTC_HTTP_METHOD_POST = 1,
13
+ TIRTC_HTTP_METHOD_PUT = 2,
14
+ TIRTC_HTTP_METHOD_PATCH = 3,
15
+ TIRTC_HTTP_METHOD_DELETE = 4,
16
+ } TirtcHttpMethod;
17
+
18
+ typedef struct TirtcHttpHeader {
19
+ const char* key;
20
+ const char* value;
21
+ } TirtcHttpHeader;
22
+
23
+ typedef struct TirtcHttpRequest {
24
+ const char* scheme;
25
+ const char* host;
26
+ int port;
27
+ const char* path;
28
+ const char* query;
29
+ const TirtcHttpHeader* headers;
30
+ int header_count;
31
+ const char* body;
32
+ int body_size;
33
+ int connect_timeout_ms;
34
+ int read_timeout_ms;
35
+ int write_timeout_ms;
36
+ } TirtcHttpRequest;
37
+
38
+ typedef struct TirtcHttpResponse {
39
+ int status_code;
40
+ const char* body;
41
+ int body_size;
42
+ } TirtcHttpResponse;
43
+
44
+ typedef TirtcError (*TirtcHttpMockHandler)(const TirtcHttpRequest* request, TirtcHttpMethod method,
45
+ TirtcHttpResponse* response, void* user_data);
46
+
47
+ TirtcError tirtc_http_request(const TirtcHttpRequest* request, TirtcHttpMethod method,
48
+ TirtcHttpResponse* response);
49
+ void tirtc_http_response_dispose(TirtcHttpResponse* response);
50
+ TirtcError tirtc_http_set_mock_handler(TirtcHttpMockHandler handler, void* user_data);
51
+ void tirtc_http_clear_mock_handler(void);
52
+
53
+ #ifdef __cplusplus
54
+ }
55
+ #endif
56
+
57
+ #endif // TIRTC_FOUNDATION_HTTP_H_
@@ -0,0 +1,55 @@
1
+ #ifndef TIRTC_FOUNDATION_LOGGING_H_
2
+ #define TIRTC_FOUNDATION_LOGGING_H_
3
+
4
+ #include <stdarg.h>
5
+
6
+ #include "tirtc/error.h"
7
+
8
+ #ifdef __cplusplus
9
+ extern "C" {
10
+ #endif
11
+
12
+ typedef enum TirtcLogLevel {
13
+ TIRTC_LOG_LEVEL_VERBOSE = 0,
14
+ TIRTC_LOG_LEVEL_DEBUG,
15
+ TIRTC_LOG_LEVEL_INFO,
16
+ TIRTC_LOG_LEVEL_WARN,
17
+ TIRTC_LOG_LEVEL_ERROR,
18
+ TIRTC_LOG_LEVEL_FATAL,
19
+ } TirtcLogLevel;
20
+
21
+ typedef void (*TirtcLoggingPrintFunction)(const char* prefix, TirtcLogLevel level, const char* tag,
22
+ const char* fmt, va_list args);
23
+
24
+ #define TIRTC_LOG_PREFIX_DEFAULT "TIRTC_"
25
+
26
+ TirtcError tirtc_logging_set_print_function(TirtcLoggingPrintFunction function);
27
+ TirtcError tirtc_logging_set_level(TirtcLogLevel level);
28
+ TirtcError tirtc_logging_set_console_enabled(int enabled);
29
+
30
+ TirtcError tirtc_logging_initialize(const char* root_dir);
31
+ TirtcError tirtc_logging_write(TirtcLogLevel level, const char* tag, const char* message);
32
+ TirtcError tirtc_logging_print(const char* prefix, TirtcLogLevel level, const char* tag,
33
+ const char* fmt, ...);
34
+ TirtcError tirtc_logging_flush(void);
35
+ TirtcError tirtc_logging_export(const char* output_zip_path);
36
+ TirtcError tirtc_logging_upload(char* log_id, int log_id_capacity);
37
+
38
+ #define TIRTC_LOGV(tag, fmt, ...) \
39
+ tirtc_logging_print(TIRTC_LOG_PREFIX_DEFAULT, TIRTC_LOG_LEVEL_VERBOSE, tag, fmt, ##__VA_ARGS__)
40
+ #define TIRTC_LOGD(tag, fmt, ...) \
41
+ tirtc_logging_print(TIRTC_LOG_PREFIX_DEFAULT, TIRTC_LOG_LEVEL_DEBUG, tag, fmt, ##__VA_ARGS__)
42
+ #define TIRTC_LOGI(tag, fmt, ...) \
43
+ tirtc_logging_print(TIRTC_LOG_PREFIX_DEFAULT, TIRTC_LOG_LEVEL_INFO, tag, fmt, ##__VA_ARGS__)
44
+ #define TIRTC_LOGW(tag, fmt, ...) \
45
+ tirtc_logging_print(TIRTC_LOG_PREFIX_DEFAULT, TIRTC_LOG_LEVEL_WARN, tag, fmt, ##__VA_ARGS__)
46
+ #define TIRTC_LOGE(tag, fmt, ...) \
47
+ tirtc_logging_print(TIRTC_LOG_PREFIX_DEFAULT, TIRTC_LOG_LEVEL_ERROR, tag, fmt, ##__VA_ARGS__)
48
+ #define TIRTC_LOGF(tag, fmt, ...) \
49
+ tirtc_logging_print(TIRTC_LOG_PREFIX_DEFAULT, TIRTC_LOG_LEVEL_FATAL, tag, fmt, ##__VA_ARGS__)
50
+
51
+ #ifdef __cplusplus
52
+ }
53
+ #endif
54
+
55
+ #endif // TIRTC_FOUNDATION_LOGGING_H_
@@ -0,0 +1,21 @@
1
+ #ifndef TIRTC_MEDIA_CONTRACT_MEDIA_CODEC_H_
2
+ #define TIRTC_MEDIA_CONTRACT_MEDIA_CODEC_H_
3
+
4
+ #ifdef __cplusplus
5
+ extern "C" {
6
+ #endif
7
+
8
+ typedef enum TirtcMediaCodec {
9
+ TIRTC_MEDIA_CODEC_NONE = 0,
10
+ TIRTC_MEDIA_CODEC_AUDIO_G711A = 1,
11
+ /* Reserved shared identifiers; concrete video implementations live outside media-contract. */
12
+ TIRTC_MEDIA_CODEC_VIDEO_H264 = 65,
13
+ TIRTC_MEDIA_CODEC_VIDEO_H265 = 66,
14
+ TIRTC_MEDIA_CODEC_VIDEO_MJPEG = 67,
15
+ } TirtcMediaCodec;
16
+
17
+ #ifdef __cplusplus
18
+ }
19
+ #endif
20
+
21
+ #endif // TIRTC_MEDIA_CONTRACT_MEDIA_CODEC_H_
@@ -0,0 +1,154 @@
1
+ #ifndef TIRTC_MEDIA_DOWNLINK_H_
2
+ #define TIRTC_MEDIA_DOWNLINK_H_
3
+
4
+ #include <stdint.h>
5
+
6
+ #include "tirtc/audio_frame.h"
7
+ #include "tirtc/audio_io.h"
8
+ #include "tirtc/audio_processing.h"
9
+ #include "tirtc/error.h"
10
+ #include "tirtc/video_codec.h"
11
+ #include "tirtc/video_frame.h"
12
+ #include "tirtc/video_io.h"
13
+
14
+ #ifdef __cplusplus
15
+ extern "C" {
16
+ #endif
17
+
18
+ typedef struct TirtcMediaDownlinkAudio TirtcMediaDownlinkAudio;
19
+ typedef struct TirtcMediaDownlinkVideo TirtcMediaDownlinkVideo;
20
+
21
+ typedef enum TirtcMediaDownlinkState {
22
+ TIRTC_MEDIA_DOWNLINK_STATE_IDLE = 0,
23
+ TIRTC_MEDIA_DOWNLINK_STATE_RENDERING = 1,
24
+ TIRTC_MEDIA_DOWNLINK_STATE_BUFFERING = 2,
25
+ TIRTC_MEDIA_DOWNLINK_STATE_FAILED = 3,
26
+ } TirtcMediaDownlinkState;
27
+
28
+ typedef struct TirtcMediaDownlinkAudioOptions {
29
+ uint32_t volume_percent;
30
+ TirtcAudioAgcLevel agc_level;
31
+ TirtcAudioAnsLevel ans_level;
32
+ } TirtcMediaDownlinkAudioOptions;
33
+
34
+ typedef struct TirtcMediaDownlinkVideoOptions {
35
+ TirtcVideoDecoderPreference decoder_preference;
36
+ } TirtcMediaDownlinkVideoOptions;
37
+
38
+ typedef struct TirtcMediaDownlinkAudioObserver {
39
+ void (*on_state_changed)(TirtcMediaDownlinkAudio* downlink, TirtcMediaDownlinkState state,
40
+ TirtcError error, void* user_data);
41
+ } TirtcMediaDownlinkAudioObserver;
42
+
43
+ typedef struct TirtcMediaDownlinkVideoObserver {
44
+ void (*on_state_changed)(TirtcMediaDownlinkVideo* downlink, TirtcMediaDownlinkState state,
45
+ TirtcError error, void* user_data);
46
+ void (*on_output_size_changed)(TirtcMediaDownlinkVideo* downlink, uint32_t width, uint32_t height,
47
+ void* user_data);
48
+ } TirtcMediaDownlinkVideoObserver;
49
+
50
+ typedef struct TirtcMediaDownlinkStutterMetricsSnapshot {
51
+ int session_started;
52
+ uint64_t session_duration_ms;
53
+ uint64_t session_stutter_total_ms;
54
+ uint32_t session_stutter_count;
55
+ uint64_t session_stutter_peak_ms;
56
+ double session_stutter_ratio;
57
+ uint32_t recent_window_duration_ms;
58
+ uint64_t recent_window_stutter_total_ms;
59
+ uint32_t recent_window_stutter_count;
60
+ uint64_t recent_window_stutter_peak_ms;
61
+ double recent_window_stutter_ratio;
62
+ } TirtcMediaDownlinkStutterMetricsSnapshot;
63
+
64
+ typedef struct TirtcMediaDownlinkPendingMetricsSnapshot {
65
+ uint64_t undecoded_pending_duration_ms;
66
+ uint64_t decoded_pending_duration_ms;
67
+ } TirtcMediaDownlinkPendingMetricsSnapshot;
68
+
69
+ typedef struct TirtcMediaDownlinkAudioMetricsSnapshot {
70
+ TirtcMediaDownlinkStutterMetricsSnapshot stutter;
71
+ TirtcMediaDownlinkPendingMetricsSnapshot pending;
72
+ } TirtcMediaDownlinkAudioMetricsSnapshot;
73
+
74
+ typedef struct TirtcMediaDownlinkVideoStartupMetricsSnapshot {
75
+ int has_first_video_input;
76
+ int has_first_video_decoded;
77
+ int has_first_video_rendered;
78
+ uint64_t first_video_input_monotonic_ms;
79
+ uint64_t first_video_decoded_monotonic_ms;
80
+ uint64_t first_video_rendered_monotonic_ms;
81
+ } TirtcMediaDownlinkVideoStartupMetricsSnapshot;
82
+
83
+ typedef struct TirtcMediaDownlinkVideoMetricsSnapshot {
84
+ TirtcMediaDownlinkVideoStartupMetricsSnapshot startup;
85
+ TirtcMediaDownlinkStutterMetricsSnapshot stutter;
86
+ TirtcMediaDownlinkPendingMetricsSnapshot pending;
87
+ } TirtcMediaDownlinkVideoMetricsSnapshot;
88
+
89
+ TirtcError tirtc_media_downlink_audio_create(TirtcMediaDownlinkAudio** out_downlink);
90
+ void tirtc_media_downlink_audio_retain(TirtcMediaDownlinkAudio* downlink);
91
+ void tirtc_media_downlink_audio_release(TirtcMediaDownlinkAudio* downlink);
92
+ void tirtc_media_downlink_audio_destroy(TirtcMediaDownlinkAudio* downlink);
93
+ TirtcError tirtc_media_downlink_audio_set_aout(TirtcMediaDownlinkAudio* downlink,
94
+ TirtcAudioAout* aout);
95
+ TirtcError tirtc_media_downlink_audio_set_options(TirtcMediaDownlinkAudio* downlink,
96
+ const TirtcMediaDownlinkAudioOptions* options);
97
+ TirtcError tirtc_media_downlink_audio_set_observer(TirtcMediaDownlinkAudio* downlink,
98
+ const TirtcMediaDownlinkAudioObserver* observer,
99
+ void* user_data);
100
+ TirtcError tirtc_media_downlink_audio_clear_observer(TirtcMediaDownlinkAudio* downlink);
101
+ TirtcError tirtc_media_downlink_audio_submit_frame(TirtcMediaDownlinkAudio* downlink,
102
+ const TirtcAudioEncodedFrame* frame);
103
+ TirtcError tirtc_media_downlink_audio_signal_end_of_stream(TirtcMediaDownlinkAudio* downlink);
104
+ TirtcError tirtc_media_downlink_audio_get_current_pts(TirtcMediaDownlinkAudio* downlink,
105
+ int64_t* out_pts_us);
106
+ TirtcError tirtc_media_downlink_audio_start(TirtcMediaDownlinkAudio* downlink);
107
+ TirtcError tirtc_media_downlink_audio_stop(TirtcMediaDownlinkAudio* downlink);
108
+ TirtcError tirtc_media_downlink_audio_start_raw_dump(TirtcMediaDownlinkAudio* downlink,
109
+ const char* prefix);
110
+ TirtcError tirtc_media_downlink_audio_stop_raw_dump(TirtcMediaDownlinkAudio* downlink);
111
+
112
+ TirtcError tirtc_media_downlink_video_create(TirtcMediaDownlinkVideo** out_downlink);
113
+ void tirtc_media_downlink_video_retain(TirtcMediaDownlinkVideo* downlink);
114
+ void tirtc_media_downlink_video_release(TirtcMediaDownlinkVideo* downlink);
115
+ void tirtc_media_downlink_video_destroy(TirtcMediaDownlinkVideo* downlink);
116
+ TirtcError tirtc_media_downlink_video_set_vout(TirtcMediaDownlinkVideo* downlink,
117
+ TirtcVideoVout* vout);
118
+ TirtcError tirtc_media_downlink_video_set_options(TirtcMediaDownlinkVideo* downlink,
119
+ const TirtcMediaDownlinkVideoOptions* options);
120
+ TirtcError tirtc_media_downlink_video_set_observer(TirtcMediaDownlinkVideo* downlink,
121
+ const TirtcMediaDownlinkVideoObserver* observer,
122
+ void* user_data);
123
+ TirtcError tirtc_media_downlink_video_clear_observer(TirtcMediaDownlinkVideo* downlink);
124
+ TirtcError tirtc_media_downlink_video_submit_frame(TirtcMediaDownlinkVideo* downlink,
125
+ const TirtcVideoEncodedFrame* frame);
126
+ TirtcError tirtc_media_downlink_video_signal_end_of_stream(TirtcMediaDownlinkVideo* downlink);
127
+ TirtcError tirtc_media_downlink_video_get_current_pts(TirtcMediaDownlinkVideo* downlink,
128
+ int64_t* out_pts_us);
129
+ TirtcError tirtc_media_downlink_video_get_output_size(TirtcMediaDownlinkVideo* downlink,
130
+ uint32_t* out_width, uint32_t* out_height);
131
+ TirtcError tirtc_media_downlink_video_follow_audio(TirtcMediaDownlinkVideo* follower,
132
+ TirtcMediaDownlinkAudio* source);
133
+ TirtcError tirtc_media_downlink_video_follow_video(TirtcMediaDownlinkVideo* follower,
134
+ TirtcMediaDownlinkVideo* source);
135
+ TirtcError tirtc_media_downlink_video_use_self_timing(TirtcMediaDownlinkVideo* downlink);
136
+ TirtcError tirtc_media_downlink_video_start(TirtcMediaDownlinkVideo* downlink);
137
+ TirtcError tirtc_media_downlink_video_stop(TirtcMediaDownlinkVideo* downlink);
138
+ TirtcError tirtc_media_downlink_video_start_raw_dump(TirtcMediaDownlinkVideo* downlink,
139
+ const char* prefix);
140
+ TirtcError tirtc_media_downlink_video_stop_raw_dump(TirtcMediaDownlinkVideo* downlink);
141
+
142
+ TirtcError tirtc_media_downlink_audio_get_metrics_snapshot(
143
+ TirtcMediaDownlinkAudio* downlink, TirtcMediaDownlinkAudioMetricsSnapshot* out_snapshot);
144
+ void tirtc_media_downlink_audio_reset_metrics_session(TirtcMediaDownlinkAudio* downlink);
145
+
146
+ TirtcError tirtc_media_downlink_video_get_metrics_snapshot(
147
+ TirtcMediaDownlinkVideo* downlink, TirtcMediaDownlinkVideoMetricsSnapshot* out_snapshot);
148
+ void tirtc_media_downlink_video_reset_metrics_session(TirtcMediaDownlinkVideo* downlink);
149
+
150
+ #ifdef __cplusplus
151
+ }
152
+ #endif
153
+
154
+ #endif // TIRTC_MEDIA_DOWNLINK_H_