Skip to content

Commit b96fd4b

Browse files
authored
webrtc-rs 0.8.0 (#51)
* webrtc-rs 0.8.0 * rs-client
1 parent c383ed2 commit b96fd4b

File tree

4 files changed

+87
-91
lines changed

4 files changed

+87
-91
lines changed

webrtc-rs/client/Cargo.toml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@ edition = "2018"
66
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
77

88
[dependencies]
9-
webrtc = "=0.2.1"
10-
interceptor = "=0.4.0"
9+
webrtc = "=0.8.0"
1110
tokio = { version = "1.12.0", features = ["full"] }
1211
serde = { version = "1.0", features = ["derive"] }
1312
serde_json = "1.0"

webrtc-rs/client/src/main.rs

Lines changed: 31 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,25 @@
11
use anyhow::Result;
22
use clap::{App, AppSettings, Arg};
33
use hyper::{Body, Client, Method, Request};
4-
use interceptor::registry::Registry;
54
use std::io::Write;
65
use std::sync::Arc;
76
use tokio::time::Duration;
87
use webrtc::api::interceptor_registry::register_default_interceptors;
98
use webrtc::api::media_engine::{MediaEngine, MIME_TYPE_VP8};
109
use webrtc::api::APIBuilder;
11-
use webrtc::media::rtp::rtp_codec::{RTCRtpCodecCapability, RTCRtpCodecParameters, RTPCodecType};
12-
use webrtc::media::track::track_local::track_local_static_rtp::TrackLocalStaticRTP;
13-
use webrtc::media::track::track_local::TrackLocal;
14-
use webrtc::peer::configuration::RTCConfiguration;
15-
use webrtc::peer::ice::ice_candidate::RTCIceCandidate;
16-
use webrtc::peer::ice::ice_connection_state::RTCIceConnectionState;
17-
use webrtc::peer::ice::ice_server::RTCIceServer;
18-
use webrtc::peer::peer_connection_state::RTCPeerConnectionState;
19-
use webrtc::peer::sdp::session_description::RTCSessionDescription;
20-
use webrtc::peer::signaling_state::RTCSignalingState;
10+
use webrtc::ice_transport::ice_candidate::RTCIceCandidate;
11+
use webrtc::ice_transport::ice_connection_state::RTCIceConnectionState;
12+
use webrtc::ice_transport::ice_server::RTCIceServer;
13+
use webrtc::interceptor::registry::Registry;
14+
use webrtc::peer_connection::configuration::RTCConfiguration;
15+
use webrtc::peer_connection::peer_connection_state::RTCPeerConnectionState;
16+
use webrtc::peer_connection::sdp::session_description::RTCSessionDescription;
17+
use webrtc::peer_connection::signaling_state::RTCSignalingState;
18+
use webrtc::rtp_transceiver::rtp_codec::{
19+
RTCRtpCodecCapability, RTCRtpCodecParameters, RTPCodecType,
20+
};
21+
use webrtc::track::track_local::track_local_static_rtp::TrackLocalStaticRTP;
22+
use webrtc::track::track_local::TrackLocal;
2123

2224
//const ECHO_TEST_SERVER_URL: &str = "http://localhost:8080/offer";
2325
const CONNECTION_ATTEMPT_TIMEOUT_SECONDS: u64 = 10;
@@ -150,14 +152,12 @@ async fn main() -> Result<()> {
150152
});
151153

152154
// Add ICE candidates to the local offer (simulates non-trickle).
153-
peer_connection
154-
.on_ice_candidate(Box::new(move |c: Option<RTCIceCandidate>| {
155-
if c.is_none() {
156-
//println!(peer_connection.LocalDescription())
157-
}
158-
Box::pin(async {})
159-
}))
160-
.await;
155+
peer_connection.on_ice_candidate(Box::new(move |c: Option<RTCIceCandidate>| {
156+
if c.is_none() {
157+
//println!(peer_connection.LocalDescription())
158+
}
159+
Box::pin(async {})
160+
}));
161161

162162
// Create an offer to send to the other process
163163
let offer = peer_connection.create_offer(None).await?;
@@ -167,17 +167,17 @@ async fn main() -> Result<()> {
167167

168168
// Set the handler for ICE connection state
169169
// This will notify you when the peer has connected/disconnected
170-
peer_connection
171-
.on_ice_connection_state_change(Box::new(|connection_state: RTCIceConnectionState| {
170+
peer_connection.on_ice_connection_state_change(Box::new(
171+
|connection_state: RTCIceConnectionState| {
172172
println!("ICE connection state has changed {}.", connection_state);
173173
Box::pin(async {})
174-
}))
175-
.await;
174+
},
175+
));
176176

177177
let (done_tx, mut done_rx) = tokio::sync::mpsc::channel::<()>(1);
178178
let done_tx = Arc::new(done_tx);
179-
peer_connection
180-
.on_peer_connection_state_change(Box::new(move |state: RTCPeerConnectionState| {
179+
peer_connection.on_peer_connection_state_change(Box::new(
180+
move |state: RTCPeerConnectionState| {
181181
println!("Peer connection state has changed to {}.", state);
182182

183183
let done_tx2 = Arc::clone(&done_tx);
@@ -191,15 +191,13 @@ async fn main() -> Result<()> {
191191
std::process::exit(SUCCESS_RETURN_VALUE);
192192
}
193193
})
194-
}))
195-
.await;
194+
},
195+
));
196196

197-
peer_connection
198-
.on_signaling_state_change(Box::new(|state: RTCSignalingState| {
199-
println!("Signaling state has changed to {}.", state);
200-
Box::pin(async {})
201-
}))
202-
.await;
197+
peer_connection.on_signaling_state_change(Box::new(|state: RTCSignalingState| {
198+
println!("Signaling state has changed to {}.", state);
199+
Box::pin(async {})
200+
}));
203201

204202
// Create channel that is blocked until ICE Gathering is complete
205203
let mut gather_complete = peer_connection.gathering_complete_promise().await;

webrtc-rs/server/Cargo.toml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@ edition = "2018"
66
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
77

88
[dependencies]
9-
webrtc = "=0.2.1"
10-
interceptor = "=0.4.0"
9+
webrtc = "=0.8.0"
1110
tokio = { version = "1.12.0", features = ["full"] }
1211
serde = { version = "1.0", features = ["derive"] }
1312
serde_json = "1.0"

webrtc-rs/server/src/main.rs

Lines changed: 54 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ use async_trait::async_trait;
33
use clap::{App, AppSettings, Arg};
44
use hyper::service::{make_service_fn, service_fn};
55
use hyper::{Body, Method, Request, Response, Server, StatusCode};
6-
use interceptor::registry::Registry;
76
use std::any::Any;
87
use std::io::Write;
98
use std::net::SocketAddr;
@@ -14,17 +13,19 @@ use tokio_util::codec::{BytesCodec, FramedRead};
1413
use webrtc::api::interceptor_registry::register_default_interceptors;
1514
use webrtc::api::media_engine::MediaEngine;
1615
use webrtc::api::APIBuilder;
17-
use webrtc::media::rtp::rtp_codec::{RTCRtpCodecParameters, RTPCodecType};
18-
use webrtc::media::rtp::rtp_receiver::RTCRtpReceiver;
19-
use webrtc::media::track::track_local::{TrackLocal, TrackLocalContext};
20-
use webrtc::media::track::track_remote::TrackRemote;
21-
use webrtc::peer::configuration::RTCConfiguration;
22-
use webrtc::peer::ice::ice_connection_state::RTCIceConnectionState;
23-
use webrtc::peer::ice::ice_server::RTCIceServer;
24-
use webrtc::peer::peer_connection::RTCPeerConnection;
25-
use webrtc::peer::peer_connection_state::RTCPeerConnectionState;
26-
use webrtc::peer::sdp::session_description::RTCSessionDescription;
27-
use webrtc::peer::signaling_state::RTCSignalingState;
16+
use webrtc::ice_transport::ice_connection_state::RTCIceConnectionState;
17+
use webrtc::ice_transport::ice_server::RTCIceServer;
18+
use webrtc::interceptor::registry::Registry;
19+
use webrtc::peer_connection::configuration::RTCConfiguration;
20+
use webrtc::peer_connection::peer_connection_state::RTCPeerConnectionState;
21+
use webrtc::peer_connection::sdp::session_description::RTCSessionDescription;
22+
use webrtc::peer_connection::signaling_state::RTCSignalingState;
23+
use webrtc::peer_connection::RTCPeerConnection;
24+
use webrtc::rtp_transceiver::rtp_codec::{RTCRtpCodecParameters, RTPCodecType};
25+
use webrtc::rtp_transceiver::rtp_receiver::RTCRtpReceiver;
26+
use webrtc::rtp_transceiver::RTCRtpTransceiver;
27+
use webrtc::track::track_local::{TrackLocal, TrackLocalContext};
28+
use webrtc::track::track_remote::TrackRemote;
2829

2930
#[macro_use]
3031
extern crate lazy_static;
@@ -173,8 +174,7 @@ async fn process_offer(req: Request<Body>) -> Result<Response<Body>, hyper::Erro
173174
});
174175
}
175176
Box::pin(async {})
176-
}))
177-
.await;
177+
}));
178178

179179
let audio_track = Arc::new(EchoTrack::new(
180180
"audio".to_owned(),
@@ -203,52 +203,51 @@ async fn process_offer(req: Request<Body>) -> Result<Response<Body>, hyper::Erro
203203
};
204204

205205
pc.on_track(Box::new(
206-
move |track: Option<Arc<TrackRemote>>, _receiver: Option<Arc<RTCRtpReceiver>>| {
206+
move |track: Arc<TrackRemote>,
207+
_receiver: Arc<RTCRtpReceiver>,
208+
_transceiver: Arc<RTCRtpTransceiver>| {
207209
let audio_track2 = Arc::clone(&audio_track);
208210
let video_track2 = Arc::clone(&video_track);
209211
Box::pin(async move {
210-
if let Some(track) = track {
211-
let mime_type = track.codec().await.capability.mime_type;
212-
let out_track = if mime_type.starts_with("audio") {
213-
audio_track2
214-
} else {
215-
video_track2
212+
let mime_type = track.codec().capability.mime_type;
213+
let out_track = if mime_type.starts_with("audio") {
214+
audio_track2
215+
} else {
216+
video_track2
217+
};
218+
219+
println!(
220+
"Track has started, of type {}: {}",
221+
track.payload_type(),
222+
mime_type
223+
);
224+
tokio::spawn(async move {
225+
let (ssrc, write_stream) = {
226+
let ctx = out_track.ctx.lock().await;
227+
(ctx[0].ssrc(), ctx[0].write_stream())
216228
};
229+
while let Ok((mut rtp, _)) = track.read_rtp().await {
230+
rtp.header.ssrc = ssrc;
231+
if let Some(ws) = &write_stream {
232+
if let Err(err) = ws.write_rtp(&rtp).await {
233+
println!("write_stream.write_rtp err: {}", err);
234+
break;
235+
}
236+
} else {
237+
println!("write_stream is none");
238+
break;
239+
}
240+
}
217241

218242
println!(
219-
"Track has started, of type {}: {}",
243+
"Track has ended, of type {}: {}",
220244
track.payload_type(),
221245
mime_type
222246
);
223-
tokio::spawn(async move {
224-
let (ssrc, write_stream) = {
225-
let ctx = out_track.ctx.lock().await;
226-
(ctx[0].ssrc(), ctx[0].write_stream())
227-
};
228-
while let Ok((mut rtp, _)) = track.read_rtp().await {
229-
rtp.header.ssrc = ssrc;
230-
if let Some(ws) = &write_stream {
231-
if let Err(err) = ws.write_rtp(&rtp).await {
232-
println!("write_stream.write_rtp err: {}", err);
233-
break;
234-
}
235-
} else {
236-
println!("write_stream is none");
237-
break;
238-
}
239-
}
240-
241-
println!(
242-
"Track has ended, of type {}: {}",
243-
track.payload_type(),
244-
mime_type
245-
);
246-
});
247-
}
247+
});
248248
})
249249
},
250-
))
251-
.await;
250+
));
252251

253252
let stats_id = pc.get_stats_id().to_owned();
254253
pc.on_peer_connection_state_change(Box::new(move |state: RTCPeerConnectionState| {
@@ -257,15 +256,13 @@ async fn process_offer(req: Request<Body>) -> Result<Response<Body>, hyper::Erro
257256
stats_id, state
258257
);
259258
Box::pin(async {})
260-
}))
261-
.await;
259+
}));
262260

263261
let stats_id = pc.get_stats_id().to_owned();
264262
pc.on_signaling_state_change(Box::new(move |state: RTCSignalingState| {
265263
println!("Signaling state {} has changed to {}.", stats_id, state);
266264
Box::pin(async {})
267-
}))
268-
.await;
265+
}));
269266

270267
if let Err(err) = pc.set_remote_description(offer).await {
271268
panic!("{}", err);
@@ -418,7 +415,10 @@ impl EchoTrack {
418415

419416
#[async_trait]
420417
impl TrackLocal for EchoTrack {
421-
async fn bind(&self, c: &TrackLocalContext) -> std::result::Result<RTCRtpCodecParameters, webrtc::Error> {
418+
async fn bind(
419+
&self,
420+
c: &TrackLocalContext,
421+
) -> std::result::Result<RTCRtpCodecParameters, webrtc::Error> {
422422
let mut ctx = self.ctx.lock().await;
423423
ctx.push(c.clone());
424424

0 commit comments

Comments
 (0)