Почему видео не воспроизводится при записи удаленного потока? - PullRequest
0 голосов
/ 04 апреля 2020

Так что, если я получу такой поток с веб-камеры, запишите и воспроизведите его на лету ...

<script>
    const constraints = { video: true, audio:false };

    const video1 = document.querySelector('.real1');
    const video2 = document.querySelector('.real2');

    var mediaSource = new MediaSource();
    video2.src = window.URL.createObjectURL(mediaSource);
    var sourceBuffer;
    mediaSource.addEventListener('sourceopen', function () {
        sourceBuffer = mediaSource.addSourceBuffer('video/webm; codecs=vp8');
        console.log(sourceBuffer);
    })

    function handleSuccess(stream) {
        video1.srcObject = stream;
        var mediaRecorder = new MediaRecorder(stream, { mimeType: "video/webm; codecs=vp8" });
        console.log(mediaRecorder.mimeType)
        mediaRecorder.ondataavailable = function (e) {
            var reader = new FileReader();
            reader.onload = function (e) {              
                sourceBuffer.appendBuffer(new Uint8Array(e.target.result));
            }
            reader.readAsArrayBuffer(e.data);

            if (video2.paused) {
                video2.play(0); // Start playing after 1st chunk is appended.
            }
        }
        mediaRecorder.start(20);
    }

    function handleError(error) {
        console.error('Reeeejected!', error);
    }
    navigator.mediaDevices.getUserMedia(constraints).
        then(handleSuccess).catch(handleError);
</script>

Это работает без проблем. Если я заменяю локальный поток удаленным потоком, тот же код, только полученный через webRT C, я вижу первый кадр и больше ничего ... Без ошибок ... jsut один кадр.

chrome: // media-internals / from player

render_id: 4
player_id: 4
origin_url: http://myurl/
kFrameUrl: http://myurl/index.html
kFrameTitle: 
url: blob:http://myurl/23baa428-df7a-4d95-8625-f442f9fab5bc
info: (Log limit reached. Further similar entries may be suppressed): Estimating WebM block duration=63ms for the last (Simple)Block in the Cluster for this Track (PTS=0ms). Use BlockGroups with BlockDurations at the end of each Cluster to avoid estimation.
pipeline_state: kSuspended
kVideoTracks: [object Object]
kIsVideoDecryptingDemuxerStream: false
kVideoDecoderName: VpxVideoDecoder
kIsPlatformVideoDecoder: false
duration: unknown
height: 240
width: 320
kResolution: 320x240
event: SUSPENDED

Код сверху: https://jsfiddle.net/pkj4sa1n/ Скрипка не работает в chrome из-за ограничений iframe для ВЭБ-камера?! Скопируйте и вставьте приведенный выше код в файл html и откройте его или используйте firefox.

спасибо за помощь или идеи

1 Ответ

0 голосов
/ 05 апреля 2020

вот ссылка, чтобы поделиться более подробной информацией о поведении. https://axel.isouard.fr/blog/2016/05/24/streaming-webm-video-over-html5-with-media-source Я полагаю, что может быть случай кластерного блока.

...