Skip to content

Commit 427f55d

Browse files
committed
v0.0.34 - Implemented api about codec capability & parameters.
1 parent 8cc6c28 commit 427f55d

9 files changed

+160
-31
lines changed

api.c

+28-7
Original file line numberDiff line numberDiff line change
@@ -81,19 +81,22 @@ typedef void (*__rtp_transceiver_release_fptr__)(void *transceiver);
8181

8282
typedef void *(*__rtp_receiver_get_track_fptr__)(void *receiver);
8383
typedef void (*__rtp_receiver_get_streams_fptr__)(void *receiver, size_t *size, void **array);
84-
typedef void (*__rtp_receiver_get_parameters_fptr__)(void *receiver, void *parameters);
84+
typedef void (*__rtp_receiver_get_parameters_fptr__)(void *receiver, raw_rtp_parameters_t *parameters);
8585
typedef void (*__rtp_receiver_get_stats_fptr__)(void *receiver, void *stats);
8686
typedef void (*__rtp_receiver_release_fptr__)(void *receiver);
8787

8888
typedef int (*__rtp_sender_set_track_fptr__)(void *sender, void *track);
8989
typedef void *(*__rtp_sender_get_track_fptr__)(void *sender);
9090
typedef void (*__rtp_sender_set_streams_fptr__)(void *sender, size_t size, const char **stream_ids);
9191
typedef void (*__rtp_sender_get_streams_fptr__)(void *sender, size_t *size, void **array);
92-
typedef void (*__rtp_sender_set_parameters_fptr__)(void *sender, void *parameters);
93-
typedef void (*__rtp_sender_get_parameters_fptr__)(void *sender, void *parameters);
92+
typedef void (*__rtp_sender_set_parameters_fptr__)(void *sender, raw_rtp_parameters_t *parameters, raw_rtc_error_t *err);
93+
typedef void (*__rtp_sender_get_parameters_fptr__)(void *sender, raw_rtp_parameters_t *parameters);
9494
typedef void (*__rtp_sender_get_stats_fptr__)(void *sender, void *stats);
9595
typedef void (*__rtp_sender_release_fptr__)(void *sender);
9696

97+
typedef void (*__rtp_codec_capability_release_fptr__)(void *capability);
98+
typedef void (*__rtp_codec_parameters_release_fptr__)(void *parameters);
99+
97100
__initialize_library_fptr__ __initialize_library__;
98101
__calloc_fptr__ __calloc__;
99102
__free_fptr__ __free__;
@@ -172,6 +175,9 @@ __rtp_sender_get_parameters_fptr__ __rtp_sender_get_parameters__;
172175
__rtp_sender_get_stats_fptr__ __rtp_sender_get_stats__;
173176
__rtp_sender_release_fptr__ __rtp_sender_release__;
174177

178+
__rtp_codec_capability_release_fptr__ __rtp_codec_capability_release__;
179+
__rtp_codec_parameters_release_fptr__ __rtp_codec_parameters_release__;
180+
175181
raw_peer_connection_observer_t *__peer_connection_observer__;
176182
extern void __onsignalingchange__(void *observer, const char *new_state);
177183
extern void __ondatachannel__(void *observer, void *data_channel);
@@ -285,6 +291,9 @@ int InitializeLibrary(const char *file, raw_rtc_constraints_t constraints)
285291
__rtp_sender_get_stats__ = (__rtp_sender_get_stats_fptr__)dlsym(handle, "RtpSenderGetStats");
286292
__rtp_sender_release__ = (__rtp_sender_release_fptr__)dlsym(handle, "RtpSenderRelease");
287293

294+
__rtp_codec_capability_release__ = (__rtp_codec_capability_release_fptr__)dlsym(handle, "RtpCodecCapabilityRelease");
295+
__rtp_codec_parameters_release__ = (__rtp_codec_parameters_release_fptr__)dlsym(handle, "RtpCodecParametersRelease");
296+
288297
__peer_connection_observer__ = malloc(sizeof(raw_peer_connection_observer_t));
289298
__peer_connection_observer__->onsignalingchange = __onsignalingchange__;
290299
__peer_connection_observer__->ondatachannel = __ondatachannel__;
@@ -631,7 +640,7 @@ void RtpReceiverGetStreams(void *receiver, size_t *size, void **array)
631640
__rtp_receiver_get_streams__(receiver, size, array);
632641
}
633642

634-
void RtpReceiverGetParameters(void *receiver, void *parameters)
643+
void RtpReceiverGetParameters(void *receiver, raw_rtp_parameters_t *parameters)
635644
{
636645
// __debugf__(6, "===> RtpReceiverGetParameters()");
637646
__rtp_receiver_get_parameters__(receiver, parameters);
@@ -673,13 +682,13 @@ void RtpSenderGetStreams(void *sender, size_t *size, void **array)
673682
__rtp_sender_get_streams__(sender, size, array);
674683
}
675684

676-
void RtpSenderSetParameters(void *sender, void *parameters)
685+
void RtpSenderSetParameters(void *sender, raw_rtp_parameters_t *parameters, raw_rtc_error_t *err)
677686
{
678687
// __debugf__(6, "===> RtpSenderSetParameters()");
679-
__rtp_sender_set_parameters__(sender, parameters);
688+
__rtp_sender_set_parameters__(sender, parameters, err);
680689
}
681690

682-
void RtpSenderGetParameters(void *sender, void *parameters)
691+
void RtpSenderGetParameters(void *sender, raw_rtp_parameters_t *parameters)
683692
{
684693
// __debugf__(6, "===> RtpSenderGetParameters()");
685694
__rtp_sender_get_parameters__(sender, parameters);
@@ -696,3 +705,15 @@ void RtpSenderRelease(void *sender)
696705
// __debugf__(6, "===> RtpSenderRelease()");
697706
__rtp_sender_release__(sender);
698707
}
708+
709+
void RtpCodecCapabilityRelease(void *capability)
710+
{
711+
// __debugf__(6, "===> RtpCodecCapabilityRelease()");
712+
__rtp_codec_capability_release__(capability);
713+
}
714+
715+
void RtpCodecParametersRelease(void *parameters)
716+
{
717+
// __debugf__(6, "===> RtpCodecParametersRelease()");
718+
__rtp_codec_parameters_release__(parameters);
719+
}

api.go

+32-13
Original file line numberDiff line numberDiff line change
@@ -123,16 +123,16 @@ type RtpSenderInterface interface {
123123
Track() MediaStreamTrackInterface
124124
SetStreams(stream_ids ...string)
125125
Streams() []string
126-
SetParameters(parameters interface{})
127-
GetParameters() interface{}
126+
SetParameters(parameters RtpParameters) error
127+
GetParameters() RtpParameters
128128
GetStats() map[string]interface{}
129129
Release()
130130
}
131131

132132
type RtpReceiverInterface interface {
133133
Track() MediaStreamTrackInterface
134134
Streams() []MediaStreamInterface
135-
GetParameters() interface{}
135+
GetParameters() RtpParameters
136136
GetStats() map[string]interface{}
137137
Release()
138138
}
@@ -155,9 +155,32 @@ type RtpCapabilities struct {
155155
type RtpCodecCapability struct {
156156
fd unsafe.Pointer
157157

158-
MimeType string
159-
ClockRate int
160-
Channels int
158+
MimeType string
159+
ClockRate int
160+
Channels int
161+
SdpFmtpLine string
162+
}
163+
164+
func (me *RtpCodecCapability) Release() {
165+
C.RtpCodecCapabilityRelease(me.fd)
166+
}
167+
168+
type RtpParameters struct {
169+
Codecs []RtpCodecParameters
170+
}
171+
172+
type RtpCodecParameters struct {
173+
fd unsafe.Pointer
174+
175+
PayloadType int
176+
MimeType string
177+
ClockRate int
178+
Channels int
179+
SdpFmtpLine string
180+
}
181+
182+
func (me *RtpCodecParameters) Release() {
183+
C.RtpCodecParametersRelease(me.fd)
161184
}
162185

163186
type RtpTransceiverInit struct {
@@ -368,16 +391,12 @@ func __ontrack__(target unsafe.Pointer, transceiver unsafe.Pointer) {
368391
}
369392
}()
370393

371-
trans := new(RtpTransceiver).Init()
372-
trans.fd = transceiver
373-
374-
receiver := trans.Receiver()
375-
track := receiver.Track()
376-
streams := receiver.Streams()
394+
t := new(RtpTransceiver).Init()
395+
t.fd = transceiver
377396

378397
pc := (*PeerConnection)(target)
379398
if pc != nil {
380-
pc.OnTrack(track, streams...)
399+
pc.OnTrack(t)
381400
}
382401
}
383402

api.h

+6-3
Original file line numberDiff line numberDiff line change
@@ -75,17 +75,20 @@ void RtpTransceiverRelease(void *transceiver);
7575

7676
void *RtpReceiverGetTrack(void *receiver);
7777
void RtpReceiverGetStreams(void *receiver, size_t *size, void **array);
78-
void RtpReceiverGetParameters(void *receiver, void *parameters);
78+
void RtpReceiverGetParameters(void *receiver, raw_rtp_parameters_t *parameters);
7979
void RtpReceiverGetStats(void *receiver, void *stats);
8080
void RtpReceiverRelease(void *receiver);
8181

8282
int RtpSenderSetTrack(void *sender, void *track);
8383
void *RtpSenderGetTrack(void *sender);
8484
void RtpSenderSetStreams(void *sender, size_t size, const char **stream_ids);
8585
void RtpSenderGetStreams(void *sender, size_t *size, void **array);
86-
void RtpSenderSetParameters(void *sender, void *parameters);
87-
void RtpSenderGetParameters(void *sender, void *parameters);
86+
void RtpSenderSetParameters(void *sender, raw_rtp_parameters_t *parameters, raw_rtc_error_t *err);
87+
void RtpSenderGetParameters(void *sender, raw_rtp_parameters_t *parameters);
8888
void RtpSenderGetStats(void *sender, void *stats);
8989
void RtpSenderRelease(void *sender);
9090

91+
void RtpCodecCapabilityRelease(void *capability);
92+
void RtpCodecParametersRelease(void *parameters);
93+
9194
#endif // RAWRTC_API_H_

include/rtp_parameters.h

+15
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,26 @@ typedef struct {
88
char* mime_type;
99
int clock_rate;
1010
int channels;
11+
char* sdp_fmtp_line;
1112
} raw_rtp_codec_capability_t;
1213

1314
typedef struct {
1415
raw_rtp_codec_capability_t* codecs;
1516
size_t size;
1617
} raw_rtp_capabilities_t;
1718

19+
typedef struct {
20+
void* fd;
21+
int payload_type;
22+
char* mime_type;
23+
int clock_rate;
24+
int channels;
25+
char* sdp_fmtp_line;
26+
} raw_rtp_codec_parameters_t;
27+
28+
typedef struct {
29+
raw_rtp_codec_parameters_t* codecs;
30+
size_t size;
31+
} raw_rtp_parameters_t;
32+
1833
#endif // EXAMPLES_RAWRTC_RTP_PARAMETERS_H_

peerconnection.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ type PeerConnection struct {
7272
OnIceGatheringChange func(new_state string)
7373
OnIceCandidate func(candidate *IceCandidate)
7474
OnIceCandidateError func(address string, port int, url string, error_code int, error_text string)
75-
OnTrack func(track *MediaStreamTrack, streams ...*MediaStream)
75+
OnTrack func(transceiver *RtpTransceiver)
7676
}
7777

7878
func (me *PeerConnection) Init(config RTCConfiguration) *PeerConnection {

peerconnectionfactory.go

+40
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,35 @@ func (me *PeerConnectionFactory) GetRtpSenderCapabilities(kind string) RtpCapabi
5353
capabilities RtpCapabilities
5454
)
5555

56+
k := C.CString(kind)
57+
defer func() {
58+
C.free((unsafe.Pointer(k)))
59+
}()
60+
61+
rtp_capabilities := C.GetRtpSenderCapabilities(me.fd, k)
62+
size := int(rtp_capabilities.size)
63+
if size > 0 {
64+
defer func() {
65+
C.Free(unsafe.Pointer(rtp_capabilities.codecs))
66+
}()
67+
}
68+
69+
for i := 0; i < size; i++ {
70+
arr := (*[1024]C.raw_rtp_codec_capability_t)(unsafe.Pointer(rtp_capabilities.codecs))[:size:size]
71+
src := arr[i]
72+
defer (func(src C.raw_rtp_codec_capability_t) {
73+
C.Free(unsafe.Pointer(src.mime_type))
74+
C.Free(unsafe.Pointer(src.sdp_fmtp_line))
75+
})(src)
76+
77+
dst := new(RtpCodecCapability)
78+
dst.fd = src.fd
79+
dst.MimeType = C.GoString(src.mime_type)
80+
dst.ClockRate = int(src.clock_rate)
81+
dst.Channels = int(src.channels)
82+
dst.SdpFmtpLine = C.GoString(src.sdp_fmtp_line)
83+
capabilities.Codecs = append(capabilities.Codecs, *dst)
84+
}
5685
return capabilities
5786
}
5887

@@ -68,15 +97,26 @@ func (me *PeerConnectionFactory) GetRtpReceiverCapabilities(kind string) RtpCapa
6897

6998
rtp_capabilities := C.GetRtpReceiverCapabilities(me.fd, k)
7099
size := int(rtp_capabilities.size)
100+
if size > 0 {
101+
defer func() {
102+
C.Free(unsafe.Pointer(rtp_capabilities.codecs))
103+
}()
104+
}
71105

72106
for i := 0; i < size; i++ {
73107
arr := (*[1024]C.raw_rtp_codec_capability_t)(unsafe.Pointer(rtp_capabilities.codecs))[:size:size]
74108
src := arr[i]
109+
defer (func(src C.raw_rtp_codec_capability_t) {
110+
C.Free(unsafe.Pointer(src.mime_type))
111+
C.Free(unsafe.Pointer(src.sdp_fmtp_line))
112+
})(src)
113+
75114
dst := new(RtpCodecCapability)
76115
dst.fd = src.fd
77116
dst.MimeType = C.GoString(src.mime_type)
78117
dst.ClockRate = int(src.clock_rate)
79118
dst.Channels = int(src.channels)
119+
dst.SdpFmtpLine = C.GoString(src.sdp_fmtp_line)
80120
capabilities.Codecs = append(capabilities.Codecs, *dst)
81121
}
82122
return capabilities

rtpreceiver.go

+31-2
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,37 @@ func (me *RtpReceiver) Streams() []*MediaStream {
4646
return streams
4747
}
4848

49-
func (me *RtpReceiver) GetParameters() interface{} {
50-
return nil
49+
func (me *RtpReceiver) GetParameters() RtpParameters {
50+
var (
51+
parameters RtpParameters
52+
dst C.raw_rtp_parameters_t
53+
)
54+
55+
C.RtpReceiverGetParameters(me.fd, &dst)
56+
size := int(dst.size)
57+
if size > 0 {
58+
defer func() {
59+
C.Free(unsafe.Pointer(dst.codecs))
60+
}()
61+
}
62+
63+
for i := 0; i < size; i++ {
64+
arr := (*[1024]C.raw_rtp_codec_parameters_t)(unsafe.Pointer(dst.codecs))[:size:size]
65+
src := arr[i]
66+
defer (func(src C.raw_rtp_codec_parameters_t) {
67+
C.free(unsafe.Pointer(src.fd))
68+
C.Free(unsafe.Pointer(src.mime_type))
69+
})(src)
70+
71+
dst := new(RtpCodecParameters)
72+
dst.fd = src.fd
73+
dst.PayloadType = int(src.payload_type)
74+
dst.MimeType = C.GoString(src.mime_type)
75+
dst.ClockRate = int(src.clock_rate)
76+
dst.Channels = int(src.channels)
77+
parameters.Codecs = append(parameters.Codecs, *dst)
78+
}
79+
return parameters
5180
}
5281

5382
func (me *RtpReceiver) GetStats() map[string]interface{} {

rtpsender.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,12 @@ func (me *RtpSender) Streams() []string {
6767
return stream_ids
6868
}
6969

70-
func (me *RtpSender) SetParameters(parameters interface{}) {
71-
70+
func (me *RtpSender) SetParameters(parameters RtpParameters) error {
71+
return nil
7272
}
7373

74-
func (me *RtpSender) GetParameters() interface{} {
75-
return nil
74+
func (me *RtpSender) GetParameters() RtpParameters {
75+
return RtpParameters{}
7676
}
7777

7878
func (me *RtpSender) GetStats() map[string]interface{} {

rtptransceiver.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,9 @@ func (me *RtpTransceiver) SetCodecPreferences(codecs []RtpCodecCapability) {
6262
for i, codec := range codecs {
6363
array[i] = codec.fd
6464
}
65-
C.RtpTransceiverSetCodecPreferences(me.fd, (*unsafe.Pointer)(&array[0]), C.size_t(size))
65+
if len(codecs) > 0 {
66+
C.RtpTransceiverSetCodecPreferences(me.fd, (*unsafe.Pointer)(&array[0]), C.size_t(size))
67+
}
6668
}
6769

6870
func (me *RtpTransceiver) SetDirection(new_direction string) error {

0 commit comments

Comments
 (0)