webRTC Android与Web 视频通信

对于视频聊天,首先需要访问用户的音频和视频。
在这里插入图片描述在web上,有getUserMedia API。调用此API,它会为您提供MediaStream对象,用于来自摄像头和麦克风的音频和视频。
在这里插入图片描述下面是代码的实际应用。调用getUserMedia(),然后得到媒体流。

navigator.getUserMedia(constraints, onStream);
function onStream(localStream)
 {  
 // do something with stream
 }

Android上的等价的是VideoCapturer。 这涉及更多工作,但你基本上创建一个捕获器,然后使用它来创建一个轨道,最后将其放入MediaStream。

VideoCapturer c = VideoCapturer.create(device);
PeerConnectionFactory factory = new PeerConnectionFactory();
MediaStream localStream = factory.createLocalMediaStream(streamName);
VideoSource s = factory.createVideoSource(c, constraints);
VideoTrack t = factory.createVideoTrack(trackName, s);
localStream.addTrack(t);

一旦我们从摄像头和麦克风获得MediaStreams,我们需要建立一个网络连接来在用户之间传输流 - 从一个对等端到另一个对等端。
要在web上执行此操作,我们有RTCPeerConnection,用于音频和视频通信的JavaScript API。这是WebRTC的核心。 PeerConnection API做了很多! 信号处理,编解码处理,点对点通信,安全性,带宽管理…
在这里插入图片描述下面是RTCPeerConnection的实际应用。onaddstream允许对等体处理传入的流。 addStream()使对等体能够发送MediaStream。PeerConnection还使对等体能够找到发送媒体的方式和位置。然后可以通过消息传递机制共享该信息,从而调用信令信道。

pc = new RTCPeerConnection(config);
pc.onaddstream = onRemoteStream;pc.addStream(localStream);
pc.createOffer(onCreateSuccess);
function onCreateSuccess(offer) { sendMessage(offer); }

在Android上,等效的API是PeerConnection。 在这里,我们使用观察者模式而不是直接传递回调。

PeerConnection pc =     
factory.createPeerConnection(iceServers, constraints, observer);
pc.addStream(localStream);
pc.createOffer(this, offerConstraints);
public void onCreateSuccess(    
final SessionDescription offer) { sendMessage(offer); }

因此,一旦我们在对等实体之间共享音频和视频,我们就需要显示它。
在这里插入图片描述在Web上,我们可以使用createObjectURL()方法将MediaStream直接流式传输到视频元素。
在Android上,我们通过观察者得到通知,然后我们可以将流连接到基于OpenGL的渲染器。

public void onAddStream(final MediaStream stream) {  
VideoTrack track = stream.getVideoTracks(0);
  YuvImageRenderer renderer = remoteRenderer;
  track.addRenderer(new VideoRenderer(renderer));}

猜你喜欢

转载自blog.csdn.net/TangxinMantou10503/article/details/85771808