2015-06-16 358 views
104

我對blob URL有非常多的問題。什麼是blob網址及其用途?

我正在尋找在YouTube上的視頻標籤的src,我發現視頻src是這樣的:

src="blob:https://crap.crap" 

我打開那是在視頻的src斑點URL它給了一個錯誤,我可以」打開但與src標籤一起工作。這怎麼可能?

要求:

  • 什麼是BLOB網址?
  • 爲什麼使用它?
  • 我可以在服務器上創建自己的Blob URL嗎?
  • 如果您有任何其他細節

在此先感謝

+1

現在我可以隱藏視頻的網址,但它可以被記錄.....無論你做什麼,如果你在網站上顯示視頻,那麼它可以下載..... 我正在做一個PHP文件,需要ID參數,它會檢查服務器上的真實姓名和文件夾名稱,然後如果在數據庫中爲用戶設置了特定IP地址的cookie,那麼我現在讓用戶查看視頻如果他使用的是IDM,那麼IDM會' t使用cookies所以視頻不能被下載 – Waqas

+1

但是,如果視頻是通過chrome從php腳本下載的,那麼它可以被下載,但是U也可以檢查用戶代理,所以我正在創建一個能夠生成也隱藏了用戶,如果它檢測到有另一個程序正在下載視頻 – Waqas

+1

也給出了403錯誤也用JavaScript我做了一個blob,然後確保blob不是全球性的,然後我做一個畫布,並繪製th e視頻從一次又一次的視頻所以這將是非常艱難的程序獲得src的視頻,我正在使用一個php文件來生成音頻文件順便說一句,我有另一個不是那麼簡單,它需要一個好的程序員..... 你可以通過php腳本創建一個頁面,並在頁面上生成100幀的php視頻框架集,然後使用javascript捕獲該頁面,並在畫布上處理該頁面+還加載第二頁以獲得其他100幀並首先製作視頻播放。 – Waqas

回答

104

的Blob網址serveral的方式來做到這一點,例如嘗試http://php.net/manual/en/function.ibase-blob-echo.php

閱讀( [R例如,官方名稱爲W3C)或對象URL(ref。 MDN和方法名稱)與BlobFile對象一起使用。

SRC =「斑點:https://crap.crap」我打開了BLOB網址那是在 視頻SRC它給了一個錯誤,我不能打開,但在與SRC 標籤它是如何可能的工作?

Blob URL只能由瀏覽器在內部生成。 URL.createObjectURL()將創建一個特殊的Blob或File對象的引用,以後可以使用URL.revokeObjectURL()發佈。這些URL只能在瀏覽器的單個實例中和同一會話中(即頁面/文檔的生命週期)在本地使用。

什麼是blob url?
爲什麼使用它?

Blob URL/Object URL是一個僞協議,允許Blob和File對象用作圖像,下載二進制數據鏈接等的URL源。

例如,您不能處理Image對象原始字節數據,因爲它不知道如何處理它。它需要例如圖像(二進制數據)通過URL加載。這適用於任何需要URL作爲源的東西。除了上傳二進制數據,還可以通過URL提供回來,最好使用額外的本地步驟,以便無需通過服務器即可直接訪問數據。

對於編碼爲Base-64的字符串的Data-URI也是一個更好的選擇。 Data-URI的問題是每個char在JavaScript中佔用兩個字節。最重要的是,由於Base-64編碼增加了33%。 Blob是純粹的二進制字節數組,它不像Data-URI那樣具有任何重要的開銷,這使得它們處理速度越來越快。

我可以在服務器上創建自己的blob url嗎?

不,Blob URLs/Object URLs只能在瀏覽器內部製作。您可以通過文件讀取器API創建Blob並獲取File對象,儘管BLOB只是意味着Binary Large對象並以字節數組的形式存儲。客戶端可以請求數據以ArrayBuffer或Blob的形式發送。服務器應該將數據作爲純二進制數據發送。數據庫通常也使用Blob來描述二進制對象,實際上我們基本上是在談論字節數組。

如果你有那麼其他細節

您需要封裝二進制數據作爲BLOB對象,然後使用URL.createObjectURL()爲其生成本地網址:

var blob = new Blob([arrayBufferWithPNG], {type: "image/png"}), 
    url = URL.createObjectURL(blob), 
    img = new Image(); 

img.onload = function() { 
    URL.revokeObjectURL(this.src);  // clean-up memory 
    document.body.appendChild(this); // add image to DOM 
} 

img.src = url;       // can now "stream" the bytes 

注意URL可能會在webkit瀏覽器中添加前綴,因此請使用:

var url = (URL || webkitURL).createObjectURL(...); 
+0

我有一個PHP腳本,流的視頻ID爲$ _GET [「ID」],所以我怎麼可以給一個URL像BLOB:/ /所以它可以用我的視頻SRC像YouTube使用的。看起來只是javascript ....讓我給你一些關於url的信息我有像http://website.com/video.php?id=ljduwkbcj27dj這樣的網址,所以如何使用JavaScript或PHP給出一個blob url – Waqas

+0

@Waqas如果URL轉到在線視頻文件(或推送視頻文件的頁面),則可以將該URL直接設置爲視頻元素的源(例如'video.src =「http://website.com/video.php ?ID = ljduwkbcj27dj「;')。這與來自服務器的響應標題以及頁面發回的數據類型更相關。但是,這可能會超出原始問題的範圍。對象URL僅在本地用作二進制數據和需要URL作爲源的元素之間的橋樑。 – K3N

+0

那麼爲什麼youtube使用blob – Waqas

3

什麼是BLOB網址?爲什麼使用它?

BLOB只是字節序列。瀏覽器將其識別爲字節流。它用於從源獲取字節流。

Blob對象表示不可變的原始數據的類文件對象。 Blob表示不一定採用JavaScript本地格式的數據。 File接口基於Blob,繼承blob功能並將其擴展爲支持用戶系統上的文件。

我可以在服務器上創建我自己的blob url嗎?

是的,你可以有更多的

+0

我可以通過使用BLOB網址獲得任何好處嗎? – Waqas

+0

你可以閱讀[this](http://stackoverflow.com/questions/20950791/html5s-file-api-blob-usages)來得到你的答案。顯然有利弊。 – Robert

+0

您正在將對象URL與BLOB混合在一起。 Object-URL是一種僞協議,允許將BLOB用作URI源。 – K3N