簡體   English   中英

將視頻從客戶端發送到服務器

[英]Sending videos from the client to the server

我最近閱讀了有關File API的信息,該文件API允許客戶端使用網站中文件系統中的文件。

我做了所有添加文件輸入標簽,讀取文件和所有內容的工作。

我使用FileReader將文件讀取為ArrayBuffer並在其上使用了Uint8Array視圖,然后將視圖發送到服務器。

我嘗試使用txt,pdf和圖像,但效果很好。 但是,當將它與視頻文件一起使用時,計算機卻滯后了,我什至沒有等待並關閉瀏覽器!

是代碼

為什么視頻文件會出現延遲,有辦法避免這種情況嗎?

我遍歷了代碼,您將讀取的數據追加到數組中,這可能是它滯后的原因。

您需要分塊上傳視頻。 要制作您選擇的文件塊,您可以在此處查看HTML5文件閱讀器API

  function readBlob(opt_startByte, opt_stopByte) {
    var files = document.getElementById('files').files;
    if (!files.length) {
      alert('Please select a file!');
      return;
    }

    var file = files[0];
    var start = parseInt(opt_startByte) || 0;
    var stop = parseInt(opt_stopByte) || file.size - 1;

    var reader = new FileReader();

    // If we use onloadend, we need to check the readyState.
    reader.onloadend = function(evt) {
      if (evt.target.readyState == FileReader.DONE) { // DONE == 2
        document.getElementById('byte_content').textContent = evt.target.result;
        document.getElementById('byte_range').textContent = 
            ['Read bytes: ', start + 1, ' - ', stop + 1,
             ' of ', file.size, ' byte file'].join('');
      }
    };

    var blob = file.slice(start, stop + 1);
    reader.readAsBinaryString(blob);
    }

    document.querySelector('.readBytesButtons')
      .addEventListener('click', function(evt) {
    if (evt.target.tagName.toLowerCase() == 'button') {
      var startByte = evt.target.getAttribute('data-startbyte');
      var endByte = evt.target.getAttribute('data-endbyte');
      readBlob(startByte, endByte);
    }
  }, false);

您需要根據需要進行修改。 在這里,當您獲得塊時,請求上傳或播放它。

您也可以在這里播放視頻文件在這里上傳視頻文件進行測試

希望這能解決您的問題。 為了使此工作正常進行,您還需要在后端正確處理這些塊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM