This is the simplest example of sending a device media stream such as a webcam to WebRTC Provider.
// Connection URL
let webSocketUrl = ""
// Initialize QenocdeWebRTC
let qencodeWebRTC = QencodeWebRTC.create();
// Attach user video
qencodeWebRTC.attachMedia(document.getElementById('userVideo'));
// Get media stream from user device and start stream
qencodeWebRTC.getUserMedia({
audio: true,
video: true
}).then(function () {
// Got device stream and start streaming
qencodeWebRTC.startStreaming(webSocketUrl);
});Initialization and destroying instanceQencodeWebRTC.create()Configurationinstance.remove()
Input device listingQencodeWebRTC.getDevices()
Media APIsinstance.attachMedia(videoElement)instance.getUserMedia()
Streaming APIsinstance.startStreaming()instance.stopStreaming()
Configuration parameters could be provided to QencodeWebRTC.js upon instantiation of the QencodeWebRTC object.
// Configuration
var config = {
callbacks: {
error: function (error) {
},
connected: function (event) {
},
connectionClosed: function (type, event) {
},
iceStateChange: function (state) {
}
}
}
// Initialize qencodeWebRTC instance
let qencodeWebRTC = QencodeWebRTC.create(config);
// Release all resources and destroy the instance
qencodeWebRTC.remove();- parameters
- config: Initialization configurations.
- Initialize QencodeWebRTC instance.
- type
- Function
- parameters
- error: Various Type of Error
- A callback that receives any errors that occur in an instance of QencodeWebRTC.
- Errors are could occur from
getUserMedia,webSocket, orpeerConnection.
- type
- Function
- parameters
- event: event object of iceconnectionstatechange
- This is a callback that occurs when the
RTCPeerConnection.iceConnectionStatebecomesconnected. - It means that the media stream is normally being transmitted to WebRTC Provider.
- type
- Function
- parameters
- type: (
ice|websocket) Notes which connection is closed. - event: event object of iceconnectionstatechange or websocket
- type: (
- A callback that is fired when the websocket's
oncloseevent occurs, or whenRTCPeerConnection.iceConnectionStatechanges tofailed,disconnected, orclosed. - It may be that the media stream is not being sent normally to WebRTC Provider.
- type
- Function
- parameters
- event: event object of iceconnectionstatechange
- A callback that fires whenever
RTCPeerConnection.iceConnectionStatechanges. - This is useful when checking the current streaming status.
- Release all resources(websocket, peerconnection, mediastream) and destroy the instance.
QencodeWebRTC provides an API to get a list of user devices for convenience.
// Lists the available media input and output devices
QencodeWebRTC.getDevices().then(function (devices) {
// Got a list of user devices
console.log(devices);
/*
console output is
{
"videoinput": [
{
"deviceId": "b1ab3a7041b1c9a91037b51d9c380f599f3914297b5c0ce2eb8d385dab3b8812",
"label": "c922 Pro Stream Webcam (046d:085c)"
}
],
"audioinput": [
{
"deviceId": "default",
"label": "default - Microphone(C922 Pro Stream Webcam) (046d:085c)"
},
{
"deviceId": "communications",
"label": "Communication - Microphone(C922 Pro Stream Webcam) (046d:085c)"
},
{
"deviceId": "2feb7f29a130802404f47d8ad9adc9418b1a01e0a4d37e60335771aba21f328d",
"label": "Microphone(C922 Pro Stream Webcam) (046d:085c)"
}
],
"audiooutput": [
{
"deviceId": "default",
"label": "default - Headphone(2- Xbox Controller) (045e:02f6)"
},
{
"deviceId": "communications",
"label": "Communication - Headphone(2- Xbox Controller) (045e:02f6)"
},
{
"deviceId": "c3d04828621712f9cc006c49486218aca0d89619ac9993809d5f082a2d13a6b0",
"label": "Headphone(2- Xbox Controller) (045e:02f6)"
},
],
"other": []
}
*/
}).catch(function (error) {
// Failed to get a list of user devices
console.log(error);
});- This static method lists the available media input and output devices, such as microphones, cameras, headsets, and so forth.
videoinput,audioinput,audiooutput,otheris available input/output devices. You can usedeviceIdto specify a device to streaming orlabelto make device selection UI.
QencodeWebRTC also provides APIs to control a media stream from a user device.
<video id="myVideo"></video>// Create instance
let qencodeWebRTC = QencodeWebRTC.create();
// Attaching video element for playing device stream
qencodeWebRTC.attachMedia(document.getElementById('myVideo'));
// Gets a device stream with a constraint that specifies the type of media to request.
qencodeWebRTC.getUserMedia(constraints).then(function (stream) {
// Got device stream. Ready for streaming.
}).catch(function (error) {
// Failed to get device stream.
});- parameters
- videoElement: HTML
<video>element
- videoElement: HTML
- If the video element is attached, when the media stream is received from the user device, it starts playing in the automatically set video element.
- This can be useful when previewing the media stream you want to stream.
- parameters
- constraints: MediaStreamConstraints dictionary. If not set the optimal input that the browser thinks is selected.
- returns Promise
- resolved
- stream: MediaStream. You can use this stream for whatever you need.
- rejected
- error: Throws error while getting the stream from the user device.
- resolved
- You can get the media stream from any user input device you want using the
constraintsparameter. The device ID to be used in theconstraintsparameter can also be obtained fromQencodeWebRTC.getDevices(). - For natural behavior, you can have the browser automatically select the device stream without passing a
constraintsparameter. However, if you want to control the device stream strictly (e.g., specify input devices, video resolution, video frame rates), you can control it by passing the constraints parameter.