Nano Hash - криптовалюты, майнинг, программирование

TypeError: не удалось выполнить «addTrack» для «MediaStream»: параметр 1 не имеет типа «MediaStreamTrack».

Я пытаюсь добавить и удалить звуковую дорожку из потока. Функция removeTrack работает, но функция addTrack выдает следующую ошибку при ее вызове

Uncaught TypeError: Failed to execute 'addTrack' on 'MediaStream': parameter 1 is not of type 'MediaStreamTrack'.
    at addAudio (video.jsx:22)
    at HTMLButtonElement.document.querySelector.onclick (video.jsx:32)

Ниже мой код

    componentDidMount = () => {
        var Mstream;
        const video = document.querySelector("video")
        const hasMedia = () => {
            return navigator.getUserMedia = navigator.getUserMedia || navigator.mozGetUserMedia || navigator.webkitGetUserMedia
        }

        const fetchMedia = () => {
            var constraints = { video: true, audio: true }
            navigator.getUserMedia(constraints, (stream) => {
                Mstream = stream
                video.srcObject = stream
            }, (error) => { })
        }

        const addAudio = () => {
            console.log("Adding")
            const audioTracks = Mstream.getAudioTracks()
            Mstream.addTrack(audioTracks[0])
            console.log('Added')
        }

        const removeAudio = () => {
            console.log('removing')
            const audioTracks = Mstream.getAudioTracks()
            Mstream.removeTrack(audioTracks[0])
            console.log('Removed')
        }
        document.querySelector("button#add").onclick = () => addAudio()

        document.querySelector("button#remove").onclick = () => removeAudio()
        hasMedia() && fetchMedia()
    }

РЕДАКТИРОВАТЬ

Но он по-прежнему возвращает ту же ошибку с функцией addTrack.

        const addAudio = () => {
            console.log("Adding")
            const audioTracks = Mstream.getAudioTracks()
            if(audioTracks.length <= 0){
                Mstream.addTrack(audioTracks[0])
                console.log("Track Added")
            }
            else{
                console.log("Cannot Add Track")
            }

        }

        const removeAudio = () => {
            console.log('removing')
            const audioTracks = Mstream.getAudioTracks()
            if (audioTracks.length > 0) {
                Mstream.removeTrack(audioTracks[0])
            }
            else {
                console.log("Cannot Remove It")
            }
        }

Ответы:


1

Метод MediaStream.getAudioTracks() возвращает массив из MediaStreamTrack объектов. Но это не гарантирует, что в массиве есть какие-либо элементы. audioTracks[0] может быть undefined, что приведет к возникновению этой ошибки.

12.11.2020
  • @hackingtechhome просто проверьте, что возвращенный массив имеет length, прежде чем пытаться вызвать addTrack 12.11.2020
  • Я отредактировал вопрос и добавил новый код, который использовал, но все равно возвращает ту же ошибку. Пожалуйста, посмотрите выше 12.11.2020
  • @hackingtechhome вы ошиблись: если длина меньше или равна нулю, вы не можете использовать addTrack. Замените ‹= на ›. 12.11.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..