B4J=true Group=Default Group ModulesStructureVersion=1 Type=Class Version=5.9 @EndOfDesignText@ 'Created by alons on 9/8/2016. 'wrapped by Anele 'Mashy' Mbanga for ABMaterial 'anele@mbangas.com Sub Class_Globals Public ABMComp As ABMCustomComponent Public ABM As ABMaterial Private mvarWidth As String Private mvarHeight As String Private pg As ABMPage Private mvarWidthLess As Int Private camid As String Private su As StringUtils Dim page As ABMPage Private Element As HTMLElement Public Visibility As String Private JavaCalls As List Public displayVisibility As String Public DisableEnable As String End Sub 'Initializes the object. You can add parameters to this method if needed. Public Sub Initialize(InternalPage As ABMPage, ID As String, Width As String, Height As String) mvarWidth = Width mvarHeight = Height mvarWidthLess = Width - 3 displayVisibility= "none" pg = InternalPage ABMComp.Initialize("ABMComp", Me, InternalPage, ID,"") End Sub 'return the html portion of the component private Sub HTML As String Element.ID = camid Element.MaterialVisibility(Visibility) Return Element.html End Sub Sub dispalyCanvas(t As Boolean) If t =True Then displayVisibility="block" Else displayVisibility="none" End If End Sub Sub StartStop(t As Boolean) If t =True Then DisableEnable=True Else DisableEnable=False End If End Sub Sub ABMComp_Build(InternalPage As ABMPage,internalID As String) As String 'we create a div with a video and a canvas and we hide the canvas camid = internalID Return $"
"$ End Sub ' Is useful to run some initalisation script. Sub ABMComp_FirstRun(InternalPage As ABMPage, internalID As String) ' Dim script As String = PrepareDisplay(internalID) If DisableEnable=True Then Dim script As String = PrepareDisplay(internalID) Else Dim script As String = PrepareStopDisplay(internalID) End If InternalPage.ws.Eval(script, Array As Object(ABMComp.ID)) End Sub Sub refresh(InternalPage As ABMPage, internalID As String) ' camid = internalID ' Dim script As String = PrepareDisplay(camid) If DisableEnable=True Then Dim script As String = PrepareDisplay(internalID) Else Dim script As String = PrepareStopDisplay(internalID) End If InternalPage.ws.Eval(script, Array As Object(ABMComp.ID)) End Sub '''Sub Refresh ''' ABM.ReplaceMyHTML(page,camid,HTML) ''' ''' Dim script As StringBuilder ''' script.initialize ''' script.Append($"
''' ''' '''
"$) ''' 'add to global scripts ''' JavaCalls.Add(script) ''' Dim scripta As String = Element.MvFromList(JavaCalls,"") ''' If MashPlugIns.Debug = True Then ''' Element.VerifyJavaScript(JavaCalls) ''' Element.VerifyHTML(HTML) ''' page.ws.Eval(scripta, Array As String(camid)) ''' Else ''' page.ws.Eval(scripta, Array As String(camid)) ''' End If '''End Sub 'End Sub private Sub PrepareDisplay(internalID As String) As String Dim script As String = $"var ${internalID}canvas = document.getElementById('${internalID}canvas'); var ${internalID}context = ${internalID}canvas.getContext('2d'); var ${internalID}video = document.getElementById('${internalID}video'); vendorUrl = window.URL || window.webkitURL; navigator.gettMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia; navigator.gettMedia({ video:true, audio: false }, function (stream){ ${internalID}video.src = vendorUrl.createObjectURL(stream); ${internalID}video.play(); b4j_raiseEvent('${camid}_ready', {'value':'直播啟動'}); },function(error){ }); "$ Return script End Sub private Sub PrepareStopDisplay(internalID As String) As String Dim script As String = $"var ${internalID}canvas = document.getElementById('${internalID}canvas'); var ${internalID}context = ${internalID}canvas.getContext('2d'); var ${internalID}video = document.getElementById('${internalID}video'); vendorUrl = window.URL || window.webkitURL; navigator.gettMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia; navigator.gettMedia({ video:true, audio: false }, function (stream){ //${internalID}video.src = vendorUrl.createObjectURL(stream); ${internalID}video.pause(); //${internalID}video.src=""; b4j_raiseEvent('${camid}_ready', {'value':'停止直播'}); },function(error){ }); "$ Return script End Sub 'take a picture Sub TakePicture(img As ABMImage) Dim script As String = $"var ${camid}canvas = document.getElementById('${camid}canvas'); var ${camid}context = ${camid}canvas.getContext('2d'); var ${camid}video = document.getElementById('${camid}video'); ${camid}context.drawImage(${camid}video, 0, 0, ${mvarWidthLess}, ${mvarHeight}); var ${camid}dataURL = ${camid}canvas.toDataURL('image/jpeg'); var image = document.getElementById('${img.id}'); image.src = ${camid}dataURL; b4j_raiseEvent('${ABMComp.ID}_takepicture', {'value':${camid}dataURL});"$ pg.ws.Eval(script, Array As Object(ABMComp.ID)) End Sub 'convert the base64 string to an image private Sub Base64StringToImage(s As String) As Image Dim su As StringUtils Dim bytes() As Byte = su.DecodeBase64(s) Dim inp As InputStream inp.InitializeFromBytesArray(bytes, 0, bytes.Length) Dim bmp As Image bmp.Initialize2(inp) inp.Close Return bmp End Sub 'save the image public Sub Save(dataURL As String,imgDir As String, imgFile As String) Try 'clean up the image first dataURL = dataURL.Replace("data:image/jpeg;base64,","") Dim img As Image = Base64StringToImage(dataURL) Dim outp As OutputStream = File.OpenOutput(imgDir, imgFile,False) img.WriteToStream(outp) outp.Close Catch End Try End Sub ' runs when a refresh is called Sub ABMComp_Refresh(InternalPage As ABMPage, internalID As String) If DisableEnable=True Then Dim script As String = PrepareDisplay(internalID) Else Dim script As String = PrepareStopDisplay(internalID) End If InternalPage.ws.Eval(script, Array As Object(ABMComp.ID)) End Sub ' do the stuff needed when the object is removed Sub ABMComp_CleanUp(InternalPage As ABMPage, internalID As String) End Sub