Ich versuche, eine Webcam mit kurento
Medienserver aufnehmen, hier ist die Funktion, die ich im Backend bin:Kurento Endpunkte, um aufzuzeichnen, um Screencasts
var startScreen = (sessionId, ws, sdpOffer, callback) => {
console.log("Start screen")
getKurentoClient((error, kurentoClient) => {
if (error) {
return callback(error)
}
kurentoClient.create('MediaPipeline', (error, pipeline) => {
if (error) {
return callback(error)
}
var recordParams = {
stopOnEndOfStream: true,
mediaProfile: 'WEBM_VIDEO_ONLY',
uri: 'file:///PATH/TO/VIDEO/screen.webm'
}
pipeline.create('RecorderEndpoint', recordParams, (error, recorder) => {
if (error) return callback(error)
screenRecorder = recorder
recorder.record(() => console.log("recording"))
pipeline.create('WebRtcEndpoint', (error, webRtcEndpoint) => {
if (error) {
pipeline.release()
return callback(error)
}
screenRtcEndpoint = webRtcEndpoint
if (candidatesQueue[sessionId]) {
while(candidatesQueue[sessionId].length) {
var candidate = candidatesQueue[sessionId].shift()
webRtcEndpoint.addIceCandidate(candidate)
}
}
webRtcEndpoint.on('OnIceCandidate', (event) => {
var candidate = kurento.register.complexTypes.IceCandidate(event.candidate)
ws.send(JSON.stringify({
id: 'iceCandidateScreen',
candidate: candidate
}))
})
webRtcEndpoint.processOffer(sdpOffer, (error, sdpAnswer) => {
if (error) {
pipeline.release()
return callback(error)
}
sessions[sessionId] = {
'pipeline': pipeline,
'webRtcEndpoint': webRtcEndpoint
}
webRtcEndpoint.connect(webRtcEndpoint, error => {
if (error) {
return callback(error)
}
console.log("Connect webrtcEndpoint")
webRtcEndpoint.connect(screenRecorder, error => {
if (error) {
return callback(error)
}
console.log("connect to the screen recorder")
})
callback(null, sdpAnswer)
})
})
webRtcEndpoint.gatherCandidates((error) => {
if (error) {
return callback(error)
}
})
})
})
})
})
}
die Pipeline etwa wie folgt aussieht:
mediaPipeline -> recorderEndpoint and recorder.record -> WebRtcEndpoint connect webrtcendpoint -> connect recorder endpoint
am vorderen Ende ich das tun:
mediaConstrains = {
audio: false,
video: {
mandatory: {
maxWidth: 640,
maxHeight: 480,
maxFrameRate: 15,
minFrameRate: 1
}
}
}
var getMediaConstrains =() => mediaConstrains
var setMediaConstrains = (config) => {
mediaConstrains = config
}
var startScreen =() => {
var options = {
mediaConstrains: mediaConstrains,
onicecandidate: onIceCandidate,
configuration: { iceServers: [
{'url': 'turn:numb.viagenie.ca:3478',
'username': '[email protected]',
'credential': 'passwordrandom'}
] }
}
webRtcPeerScreen = kurentoUtils.WebRtcPeer.WebRtcPeerSendonly(options, function (error) {
if (error) {
return onError(error)
}
this.generateOffer(onOfferScreen)
})
}
Dies ist nur für Screencasts welche nicht funktioniert, ich bin mit fast genau dem gleichen Code eine Webcam aufnehmen, die ihr voll funktionsfähigen, Dies ist die Funktion stop:
var stop =() => {
if (webRtcPeerWebcam && webRtcPeerScreen) {
webRtcPeerWebcam.dispose()
webRtcPeerWebcam = null
webRtcPeerScreen.dispose()
webRtcPeerScreen = null
var message = {
id: 'stop'
}
sendMessage(message)
}
}
Wo ich die Pipeline am vorderen Ende verfügen, aber ich dieses schicken Nachricht an das Backend und dann diese WSS Nachricht ruft diese Funktion:
var stop = (sessionId) => {
if (sessions[sessionId]) {
var pipeline = sessions[sessionId].pipeline
pipeline.release()
delete sessions[sessionId]
delete candidatesQueue[sessionId]
}
}
ich denke, das vielleicht das Problem, warum dies für die Aufzeichnung des Screencasts nicht funktioniert oder vielleicht die Pipelines nicht ordnungsgemäß
ich verbinde auf jeden Fall Vielen Dank!
PD: Ich fand diese auf KMS-Protokolle:
KurentoMediaElementImpl MediaElementImpl.cpp:434 mediaFlowOutStateChange() <kmswebrtcendpoint373> Media N OT Flowing OUT in pad default with type video
Wie verbinden Sie die Endpunkte? – igracia
Recorder -> WebRTC wie folgt aus: webRtcEndpoint.connect (webRtcEndpoint, Fehler => webRtcEndpoint.connect (Screen, Fehler => console.log (Fehler))) – AbdulHamid
Sind Sie in der Lage Screencasts richtig zu tun? Wirst du diesen Stream irgendwo zeigen? Vielleicht ist das Problem, dass Ihr Bildschirm überhaupt nicht geteilt wird. – igracia