Записать холст как видео, используя DrawerJs - PullRequest
0 голосов
/ 20 сентября 2018

Я использую DrawerJs из здесь

Я пытаюсь записать действия холста как видео, когда пользователи рисуют на холсте.Все хорошо, но только то, что мне нужно исправить.и я не знаю, как я могу это исправить.Я не смог найти ничего об этом в документации DrawerJs: (

Проблема с карандашом для рисования от руки, мне нужно обновлять значение пути холста при каждом движении мыши. Поскольку DrawerJs обновляет холст, когда mouseUp и устройство записи холста не могут поймать перемещение мышиActions.I попытался изменить функцию _onMouseMoveInDrawingMode, она работает, но это не очень хорошее решение. Потому что что-то не так, и я не могу управлять курсором на холсте, потому что это так медленно и трудно рисовать что-либо.

Вот мойкод из boxJs.standalone.js:

_onMouseMoveInDrawingMode: function(e) {

        if (this._isCurrentlyDrawing) {
        var pointer = this.getPointer(e);
        this.freeDrawingBrush.onMouseMove(pointer);
        //  I added this region for set path values from every single mouse move
        if (this.clipTo) {
            this.contextTop.restore();
        }
        this.freeDrawingBrush.onMouseUp();
        // end

      }
      this.setCursor(this.freeDrawingCursor);
      this._handleEvent(e, 'move');
    },

    /**
     * @private
     * @param {Event} e Event object fired on mouseup
     */
    _onMouseUpInDrawingMode: function (e) {
      this._isCurrentlyDrawing = false;
      if (this.clipTo) {
        this.contextTop.restore();
      }
      //this.freeDrawingBrush.onMouseUp();  
      this._handleEvent(e, 'up');
    } 

Вот HTML-код:

<div class="row">
            <div class="col-md-6">
                <div id="canvas-editor"></div>
            </div>
            <div class="col-md-6">
                <video id="video1" playsinline autoplay></video>
            </div>
        </div>
        <div class="row">
            <button type="button" id="startCanvasRecord" onclick="StartClick();">Start Canvas Record</button>
            <button type="button" id="stopCanvasRecord" onclick="StopClick();">Stop Canvas Record</button>
        </div>

А вот мой код JavaScript для записи холста как видео,

    <script>
    var mediaRecorder;
            var recordedBlobs = [];
            var sourceBuffer;
            var stream;
        const mediaSource = new MediaSource();
        mediaSource.addEventListener('sourceopen', handleSourceOpen, false);

function handleSourceOpen(event) {
  console.log('MediaSource opened');
  sourceBuffer = mediaSource.addSourceBuffer('video/webm; codecs="vp8"');
  console.log('Source buffer: ', sourceBuffer);
}
            const video = document.getElementById('video1');

                $(document).ready(function () {
                    drawer = new DrawerJs.Drawer(null, {
                        texts: customLocalization,
                        exitOnOutsideClick: false,
                        plugins: drawerPlugins,
                        defaultImageUrl: '/images/drawer.jpg',
                        defaultActivePlugin : { name : 'Pencil', mode : 'lastUsed'},
                        contentConfig: {
                                        saveAfterInactiveSec: 0.1,
                                        saveInHtml: true,
                                    },
                    }, 600, 600);
                    $('#canvas-editor').append(drawer.getHtml()); 
                      drawer.onInsert();
                });

                function StartClick()
                {
                    canvas = $(".lower-canvas")[0];
                    if(canvas===undefined)
                     {  
                        alert("Canvas Undefined");
                        return;
                     }
                    startRecording();
                }

                function handleDataAvailable(event) {
                debugger;
                  if (event.data && event.data.size > 0) {
                    recordedBlobs.push(event.data);
                  }
                }


                function startRecording() {
                canvas = $(".lower-canvas")[0];
                if(canvas===undefined)
                 {  
                    alert("Canvas Undefined");
                    return;
                 }
                stream = canvas.captureStream();
                  try {
                  debugger;
                    mediaRecorder = new MediaRecorder(stream, options);
                  } catch (e0) {
                    console.log('Unable to create MediaRecorder with options Object: ', e0);
                    try {
                      options = {mimeType: 'video/webm,codecs=vp9'};
                      mediaRecorder = new MediaRecorder(stream, options);
                    } catch (e1) {
                      console.log('Unable to create MediaRecorder with options Object: ', e1);
                      try {
                        options = 'video/vp8'; // Chrome 47
                        mediaRecorder = new MediaRecorder(stream, options);
                      } catch (e2) {
                        alert('MediaRecorder is not supported by this browser.\n\n' +
                          'Try Firefox 29 or later, or Chrome 47 or later, ' +
                          'with Enable experimental Web Platform features enabled from chrome://flags.');
                        console.error('Exception while creating MediaRecorder:', e2);
                        return;
                      }
                    }
                  }
                    mediaRecorder.onstop = handleStop;
                    mediaRecorder.ondataavailable = handleDataAvailable;
                    mediaRecorder.start(100); // collect 100ms of data
                }


                function StopClick()
                {
                  mediaRecorder.stop();
                  console.log('Recorded Blobs: ', recordedBlobs);
                  video.controls = true;
                }
        <script>

У вас есть какое-нибудь решение?

С уважением

...