Opentok + пользовательский аудио веб-звук создает акустическую обратную связь

Если вы используете FtpWebRequest Class , вам просто нужно добавить некоторые вещи к настройке запроса. Обязательно включите оператор using System.Security.Cryptography.X509Certificates;.

    FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpUrl);
    request.Credentials = new NetworkCredential(userName, password);

    request.EnableSsl = true;
    //ServicePointManager.ServerCertificateValidationCallback = ServicePointManager_ServerCertificateValidationCallback;

    X509Certificate cert = X509Certificate.CreateFromCertFile(@"C:\MyCertDir\MyCertFile.cer");
    X509CertificateCollection certCollection = new X509CertificateCollection();
    certCollection.Add(cert);

    request.ClientCertificates = certCollection;

Кроме того, если у вас возникли проблемы с созданием исключений для сертификата, вам может потребоваться реализовать собственный метод обратного вызова проверки сертификатов для использования с ServicePointManager .ServerCertificateValidationCallback Property . Это может быть так же просто, как всегда возвращать true или быть более сложным, как тот, который я использую для отладки:

    public static bool ServicePointManager_ServerCertificateValidationCallback(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
    {
        bool allowCertificate = true;

        if (sslPolicyErrors != SslPolicyErrors.None)
        {
            Console.WriteLine("Accepting the certificate with errors:");
            if ((sslPolicyErrors & SslPolicyErrors.RemoteCertificateNameMismatch) == SslPolicyErrors.RemoteCertificateNameMismatch)
            {
                Console.WriteLine("\tThe certificate subject {0} does not match.", certificate.Subject);
            }

            if ((sslPolicyErrors & SslPolicyErrors.RemoteCertificateChainErrors) == SslPolicyErrors.RemoteCertificateChainErrors)
            {
                Console.WriteLine("\tThe certificate chain has the following errors:");
                foreach (X509ChainStatus chainStatus in chain.ChainStatus)
                {
                    Console.WriteLine("\t\t{0}", chainStatus.StatusInformation);

                    if (chainStatus.Status == X509ChainStatusFlags.Revoked)
                    {
                        allowCertificate = false;
                    }
                }
            }

            if ((sslPolicyErrors & SslPolicyErrors.RemoteCertificateNotAvailable) == SslPolicyErrors.RemoteCertificateNotAvailable)
            {
                Console.WriteLine("No certificate available.");
                allowCertificate = false;
            }

            Console.WriteLine();
        }

        return allowCertificate;
    }

1
задан Matthieu Bouxin 19 March 2019 в 10:11
поделиться

1 ответ

После некоторых копаний я решил использовать OT.audioContext вместо window.AudioContext, чтобы построить мои узлы web-audio и связал их с OT.audioContext.destination, и это сработало.

К сожалению, OT.audioContext не описан в документации, поэтому он может измениться в будущем, но сейчас он работает

.
0
ответ дан Matthieu Bouxin 19 March 2019 в 10:11
поделиться