我如何让用户随时允许或拒绝摄像头/麦克风访问,以及他们如何更改设备源?

时间:2016-08-23 09:12:40

标签: javascript html5 google-chrome firefox webrtc

我正在使用webRTC和使用https,用户可以选择是允许还是拒绝一次访问摄像头和麦克风,然后保存他们的选择以供下次访问。 我想添加一些代码,让用户可以在他们想要的任何特定时间开启或关闭他们的网络摄像头或麦克风,以及让他们在任何时候有多个摄像头或麦克风设备的情况下更换他们的摄像头或麦克风设备

请帮我这样做..谢谢

1 个答案:

答案 0 :(得分:1)

您可以通过停止从stream.getTracks().forEach(track => track.stop()) 收到的曲目来关闭相机和麦克风:

getUserMedia

要重新打开它们,请再次致电enumerateDevices

您可以使用deviceId构建内容相机和/或麦克风选择器,它会返回deviceId的列表,其中getUserMedia可以与var log = msg => div.innerHTML += msg + "<br>"; navigator.mediaDevices.enumerateDevices() .then(devices => { var cams = devices.filter(device => device.kind == "videoinput"); log("You have " + cams.length + " camera(s)."); if (cams.length) { return navigator.mediaDevices.getUserMedia({ video: { deviceId: { exact: cams[0].deviceId } }, }) .then(stream => (video.srcObject = stream)); } }) .catch(log);约束一起使用使用<div id="div"></div><br> <video id="video" height="120" width="160" autoplay></video>选择特定设备(在Chrome中使用ResX Resource Manager):

&#13;
&#13;
using System;
using System.Web.Script.Serialization;

namespace ConsoleApplication1
{
    class Program
    {
        private const string Json = @"{
        ""SaveData"": {
        ""TransactionType"": ""2"",
        ""Date"": ""8/10/2016"",
        ""BankAccountID"": ""449"",
        ""PaidTo"": ""Cash"",
        ""Amount"": ""1551"",
        ""CheckNumber"": ""51451"",
        ""SupportingDocNo"": ""51521"",
        ""Remarks"": ""This is a remarks & this contains special character"",
        ""CheckPaymentID"": 0
    },
    ""Type"": ""Save""}";

        static void Main(string[] args)
        {
            try
            {
                var data = new JavaScriptSerializer().Deserialize<CheckPaymentsService>(Json);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
    }

    public class CheckPaymentsService
    {
        public SaveData SaveData { get; set; }
        public string Type { get; set; }
    }

    public class SaveData
    {        
        public int TransactionType { get; set; }
        public DateTime Date { get; set; }
        public int BankAccountID { get; set; }
        public string PaidTo { get; set; }
        public int Amount { get; set; }
        public int CheckNumber { get; set; }
        public int SupportingDocNo { get; set; }
        public string Remarks { get; set; }
        public int CheckPaymentID { get; set; }
    }
}
&#13;
{{1}}
&#13;
&#13;
&#13;

请注意,使用Chrome 52需要https fiddle(已修复54)。

有关该版本的完整演示,请参阅adapter.js