MediaStream API旨在方便地从用户本地摄像机和麦克风访问媒体流。getUserMedia()方法是访问本机输入设备的主要方式。
5. 每个MediaStreamTrack对象可能包括几个信道(右声道和左声道)。这些是MediaStream定义的最小部件。
有两种方法可以输出MediaStream对象。首先,我们可以将输出显示为视频或音频元素。其次,我们可以将输出发送到RtcPeerConnection对象,然后将其发送到远程计算机。
让我们创建一个简单的WebRTC应用程序。它将在屏幕上显示一个视频元素,询问用户使用摄像机的权限,并在浏览器中显示实时视频流。创建index. html文件
1
2
3
4
5
6
7
8
9
10
然后创建client.js文件并添加以下内容:
1 function hasUserMedia() {
2 //check if the browser supports the WebRTC
3 return !!(navigator.getUserMedia || navigator.webkitGetUserMedia ||
4 navigator.mozGetUserMedia);
5 }
6
7 if (hasUserMedia()) {
8 navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia
9 || navigator.mozGetUserMedia;
10 //enabling video and audio channels
11 navigator.getUserMedia({ video: true, audio: true }, function (stream) {
12 var video = document.querySelector('video');
13 //inserting our stream to the video tag
14 video.src = window.URL.createObjectURL(stream);
15 }, function (err) {});
16 } else {
17 alert("WebRTC is not supported");
18 }
在这里,我们创建getUserMedia()函数,它检查webrtc是否受支持。然后,我们访问getUserMedia函数,其中第二个参数是接受来自用户设备的流的回调。然后,我们使用window.url.createObjectUrl将流加载到视频元素中,它创建一个表示参数中给定对象的URL。
(注意:以上可能已经过期,最好用下面的写法:)
1 navigator.mediaDevices.getUserMedia({
2 video: true,
3 audio: true
4 }).then(stream => {
5 const video = document.querySelector('video');
6 video.srcObject = stream;
7 }).catch(error => {
8 alert('error: ', error);
9 })
现在刷新你的页面,点击允许,你应该看到你的脸在屏幕上。
要测试上述API,请以下列方式修改index.html:
1
2
3
4
5
6
7
8
9
11
13
14
16
18
20
21
22
我们添加几个按钮来尝试几个MediaStreamAPI。然后,为新创建的按钮添加事件处理程序,我们来修改client.js文件。
1 var stream;
2
3 function hasUserMedia() {
4 //check if the browser supports the WebRTC
5 return !!(navigator.getUserMedia || navigator.webkitGetUserMedia ||
6 navigator.mozGetUserMedia);
7 }
8
9 if (hasUserMedia()) {
10 navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia
11 || navigator.mozGetUserMedia;
12 //enabling video and audio channels
13 navigator.getUserMedia({ video: true, audio: true }, function (s) {
14 stream = s;
15 var video = document.querySelector('video');
16 //inserting our stream to the video tag
17 video.src = window.URL.createObjectURL(stream);
18 }, function (err) {});
19 } else {
20 alert("WebRTC is not supported");
21 }
22
23 btnGetAudioTracks.addEventListener("click", function(){
24 console.log("getAudioTracks");
25 console.log(stream.getAudioTracks());
26 });
27
28 btnGetTrackById.addEventListener("click", function(){
29 console.log("getTrackById");
30 console.log(stream.getTrackById(stream.getAudioTracks()[0].id));
31 });
32
33 btnGetTracks.addEventListener("click", function(){
34 console.log("getTracks()");
35 console.log(stream.getTracks());
36 });
37
38 btnGetVideoTracks.addEventListener("click", function(){
39 console.log("getVideoTracks()");
40 console.log(stream.getVideoTracks());
41 });
42
43 btnRemoveAudioTrack.addEventListener("click", function(){
44 console.log("removeAudioTrack()");
45 stream.removeTrack(stream.getAudioTracks()[0]);
46 });
47
48 btnRemoveVideoTrack.addEventListener("click", function(){
49 console.log("removeVideoTrack()");
50 stream.removeTrack(stream.getVideoTracks()[0]);
51 });
刷新页面。单击getAudioTracks()按钮,然后单击removeTrack()- audio按钮。现在应该删除音轨。然后做同样的视频轨道。