Safari技術預覽版34向開發者展現了一些選項,能夠更容易的測試他們的WebRTC網站或將Safari集成到持續集成系統中,入口在開發>WebRTC子菜單中。html
ICE候選項限制ios
ICE候選項在WebRTC鏈接的早期階段進行信息交換,以識別兩個對等鏈接之間的全部可能的網絡路徑。爲此,WebKit必須將每一個對等鏈接的ICE候選項暴露給網站並共享它們。ICE候選項公開IP地址,特別是那些能夠用於跟蹤的主機IP地址。web
partial interface Navigator {macos
// Switch to navigator.mediaDevices.getUserMediacanvas
void getUserMedia(MediaStreamConstraints constraints, NavigatorUserMediaSuccessCallback successCallback, NavigatorUserMediaErrorCallback errorCallback);promise
};瀏覽器
partial interface RTCPeerConnection {安全
// Switch to getSenders, and look at RTCRtpSender.track網絡
sequence<MediaStream> getLocalStreams();app
// Switch to getReceivers, and look at RTCRtpReceiver.track
sequence<MediaStream> getRemoteStreams();
// Switch to getSenders/getReceivers
MediaStream getStreamById(DOMString streamId);
// Switch to addTrack
void addStream(MediaStream stream);
// Switch to removeTrack
void removeStream(MediaStream stream);
// Listen to ontrack event
attribute EventHandler onaddstream;
// Update to promise-only version of createOffer
Promise<void> createOffer(RTCSessionDescriptionCallback successCallback, RTCPeerConnectionErrorCallback failureCallback, optional RTCOfferOptions options);
// Update to promise-only version of setLocalDescription
Promise<void> setLocalDescription(RTCSessionDescriptionInit description, VoidFunction successCallback, RTCPeerConnectionErrorCallback failureCallback);
// Update to promise-only version of createAnswer
Promise<void> createAnswer(RTCSessionDescriptionCallback successCallback, RTCPeerConnectionErrorCallback failureCallback);
// Update to promise-only version of setRemoteDescription
Promise<void> setRemoteDescription(RTCSessionDescriptionInit description, VoidFunction successCallback, RTCPeerConnectionErrorCallback failureCallback);
// Update to promise-only version of addIceCandidate
Promise<void> addIceCandidate((RTCIceCandidateInit or RTCIceCandidate) candidate, VoidFunction successCallback, RTCPeerConnectionErrorCallback failureCallback);
};
var pc = new RTCPeerConnection();
pc.addTransceiver('audio');
pc.addTransceiver('video');
var offer = await pc.createOffer();
await pc.setLocalDescription(offer);
// send offer to the other party
...
var stream = await navigator.mediaDevices.getUserMedia({audio: true, video: true});
var pc = new RTCPeerConnection();
var audioSender = pc.addTrack(stream.getAudioTracks()[0], stream);
var videoSender = pc.addTrack(stream.getVideoTracks()[0], stream);
var offer = await pc.createOffer();
await pc.setLocalDescription(offer);
// send offer to the other party
...
videoSender.track.applyConstraints({width: 1280, height: 720});
videoSender.track.enabled = false;
videoSender.track.enabled = true;
renderWithEffects(video, canvas);
videoSender.replaceTrack(canvas.captureStream().getVideoTracks()[0]);
Safari容許用戶徹底控制網站對其攝像設備的訪問權限。
navigator.mediaDevices.enumerateDevices
·若是網頁已在捕獲,則MediaStream支持的媒體將自動播放。
·若是網頁已播放音頻,則MediaStream支持的媒體將自動播放。但仍然須要用戶手勢來激活音頻回放。
WebRTC是一個很是強大的特性,能夠衍生許多應用程序。咱們都知道,強大的力量帶來了巨大的責任。設計WebRTC應用程序須要從一開始就考慮到效率。 CPU,內存和網絡均可能嚴重影響用戶體驗。Web引擎和Web應用程序都應該解決此問題。在Web應用程序方面,已經有各類機制可供選擇:選擇正確的視頻分辨率和幀速率,選擇正確的視頻編解碼器配置文件,使用CVO,在源處將媒體軌靜音,以及在客戶端執行WebRTC統計數據的監視。