Javascript TypeError:无法执行';addTrack';在';MediaStream';:参数1的类型不是';MediaStreamTrack';

Javascript TypeError:无法执行';addTrack';在';MediaStream';:参数1的类型不是';MediaStreamTrack';,javascript,webrtc,mediastream,Javascript,Webrtc,Mediastream,我正在尝试从流中添加和删除音频曲目。 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.querySelecto

我正在尝试从流中添加和删除音频曲目。 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")
            }
        }
const addAudio=()=>{
console.log(“添加”)
const audioTracks=Mstream.getAudioTracks()
if(audioTracks.length{
console.log('正在删除')
const audioTracks=Mstream.getAudioTracks()
如果(audioTracks.length>0){
Mstream.removeTrack(音频曲目[0])
}
否则{
console.log(“无法删除它”)
}
}

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

@hackingtechhome在尝试调用addtrack之前,只需检查返回的数组是否有
长度
。我已编辑了问题并添加了我使用的新代码,但仍然返回相同的错误。请查看above@hackingtechhome你搞错了:我如果长度小于或等于零,则不能使用addTrack.Replace。