webRTC Android與Web 視訊通訊
阿新 • • 發佈:2019-01-04
對於視訊聊天,首先需要訪問使用者的音訊和視訊。
在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));}