微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

TypeError:无法在“ MediaStream”上执行“ addTrack”:参数1的类型不是“ MediaStreamTrack”

如何解决TypeError:无法在“ MediaStream”上执行“ addTrack”:参数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")
            }
        }

解决方法

MediaStream.getAudioTracks()方法返回一个MediaStreamTrack对象的数组。但是,它不能保证数组中有任何元素。 audioTracks[0]可能是undefined,这将导致发生此错误。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。