2017-05-08 72 views
0

我想發送Base64 PNG圖片(從捕捉網絡攝像頭產生)到鳳凰頻道的流。菲尼克斯頻道接受base64 png生

channel.push(:

據我所知,在通道handle_in方法只接收JSON字符串,所以我現在要做的就是用它發送「流:視頻」,JSON.stringify(數據))

像以下片段:

var delay = 100 
if (navigator.userAgent.toLowerCase().indexOf("chrome") > -1) { 
    delay = 40 
    console.info(">>> using chrome") 
} else { 
    console.info(">>> using non chrome!") 
} 
let canvasContext = null 
let camVideo = document.getElementById("cam-video") 
let camCanvas = document.getElementById("cam-canvas") 

let onSucceed = (stream) => { 
    camVideo.srcObject = stream 

    setInterval(() => { 
     canvasContext.drawImage(camVideo, 0, 0, 240, 120) 
     let data = camCanvas.toDataURL("image/png") 

     // This is where I push Base64 image as string 
     // I don't like this :P 
     channel.push("stream:video", JSON.stringify(data)) 
    }, delay) 
} 

let onFailed = (error) => { 
    console.error(error) 
} 

if (camVideo && camCanvas) { 
    canvasContext = camCanvas.getContext("2d") 

    navigator.getUserMedia = (navigator.getUserMedia 
    || navigator.webkitGetUserMedia || navigator.mozGetUserMedia 
    || navigator.msGetUserMedia || navigator.oGetUserMedia) 
    navigator.getUserMedia({video: true}, onSucceed, onFailed) 
} 

到目前爲止使用上面的代碼,我可以看到的Base64字符串表示的流流向我的頻道(來回m服務器端控制檯日誌)。

我不喜歡這一點,因爲我寧願如果反正我可以調整鳳凰通道能夠接收RAW Base64二進制流。

我檢查了這article但它似乎只啓用服務器端二進制推送到瀏覽器。

有沒有反正我可以調整handle_in接收二進制?

回答

0

是的,您可以將二進制文件上傳到Phoenix的頻道,但是您必須記住提供給handle_in/3的消息必須是map,但是此映射可以包含二進制文件。

您可以檢查我的artitle關於使用Channels上傳文件,其中params包含文件的文件名和二進制文件。