1. 程式人生 > >webRTC Android與Web 視訊通訊

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));}