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