@snapcall/stream-ui 1.34.1 → 1.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/stream-ui.esm.js +1036 -874
- package/dist/stream-ui.js +1035 -873
- package/dist/types.d.ts +56 -18
- package/package.json +1 -1
package/dist/stream-ui.js
CHANGED
|
@@ -15,9 +15,9 @@ var $jQDcL$uuid = require("uuid");
|
|
|
15
15
|
var $jQDcL$protooclient = require("protoo-client");
|
|
16
16
|
var $jQDcL$mediasoupclientlibProducer = require("mediasoup-client/lib/Producer");
|
|
17
17
|
var $jQDcL$mediasoupclient = require("mediasoup-client");
|
|
18
|
+
var $jQDcL$buffer = require("buffer");
|
|
18
19
|
var $jQDcL$mediapipeselfie_segmentation = require("@mediapipe/selfie_segmentation");
|
|
19
20
|
require("./timer.fd5ed46d.js");
|
|
20
|
-
var $jQDcL$buffer = require("buffer");
|
|
21
21
|
var $jQDcL$qrcode = require("qrcode");
|
|
22
22
|
var $jQDcL$reactdom = require("react-dom");
|
|
23
23
|
var $jQDcL$reactmarkdown = require("react-markdown");
|
|
@@ -54,27 +54,27 @@ const $393bda1b33846dfc$export$604ba5624273df44 = ()=>{
|
|
|
54
54
|
|
|
55
55
|
|
|
56
56
|
var $20859e1dad0fd138$exports = {};
|
|
57
|
-
$20859e1dad0fd138$exports = JSON.parse('{"header":{"free":"Free version"},"loader":{"connection":"Connecting..."},"common":{"new":"new"},"notifications":{"error":"Error","screensharingError":"An error occured when trying to toggle screensharing","microphoneError":"An error occured when trying to toggle the microphone","cameraError":"An error occured when trying to toggle the camera","cameraRotateError":"An error occured when trying to rotate the camera","noCamera":"No camera available","blockedMicrophonePopupTitle":"Camera and microphone are blocked","blockedMicrophonePopup":"SnapCall requires access to your camera and microphone. Click the camera blocked icon in your browser\'s address bar.","reload":"Reload","criticalError":"A critical error has occurred (error {{code}}).","agentJoinError":"An error occured while trying to join the room as an agent","close":"Close","connectedTo":"Connected to {{name}}","recording":"Recording in progress","recordingStopped":"Recording stopped","invitationSentToFailed":"Sent to {{ name }} failed.","errorOccuredCode":"An error occured (error {{code}}).","unableToZoom":"Unable to zoom","unableToUnzoom":"Unable to unzoom","unableToSwitchCamera":"Unable to switch camera","uploadFailed":"Upload failed","permissionToShareScreenDenied":"Permission to share screen denied","somethingWentWrong":"Oops! Something went wrong","failedToMuteUnmuteMicrophone":"Failed to mute / unmute the microphone","failedToEnableMicrophone":"Failed to enable microphone","failedToEnableVideo":"Failed to enable video","failedToDisableVideo":"Failed to disable video","aQuickRefreshShouldFix":"A quick refresh should get things back on track","networkStability":"Network stability","yourInternetConnectionIsUnstable":"Your internet connection is unstable","locationIsRequired":"Location is required","locationIsBlocked":"Location is blocked","pleaseEnableLocation":"Please enable location services in your settings.","allow":"Allow"},"recordingPopup":{"recordingStartTitle":"Recording about to start.","recordingStartText":"This call will be recorded shortly. If you\u2019d rather not be recorded, you\u2019re welcome to leave the call at this time.","dismiss":"Dismiss"},"requestAccess":{"wantToJoin":"<bold>{{name}}</bold> wants to join!","deny":"Deny","admit":"Admit","defaultName":"An user"},"endView":{"goBack":"Go back to call","callEnded":"The call has ended","callNoLongerActive":"This call is no longer active. Thank you for participating.","callLeft":"You have left the call","ifMistakeRejoin":"If this was a mistake, you can rejoin using the button below.","full":"You can\'t join this call","fullDescription":"The room is full. Please try to join the call later.","invalidLink":"Invalid link","invalidOrExpired":"This link is invalid or expired.","openDashboard":"Open dashboard","howWasYourExperience":"How was your experience?","pleaseRateYourExperienceBelow":"Please rate your experience below","thankYouForYourFeedback":"Thank you for your feedback.","yourFeedbackHelpsUs":"Your feedback helps us improve. See you soon!","addAdditionalMedia":"Add additional media","allowsYouToShareMoreMedia":"This option allows you to share one or more media to add more context."},"menu":{"title":"Menu","new":"NEW","openNewTab":"Open new tab","quickConnect":"Quick Connect","pictureInPicture":"Picture-in-Picture","screenSharing":"Screen sharing","stopRecord":"Stop record","startRecord":"Record call"},"blockedFeature":{"titleConnected":"Upgrade your plan","titleGuest":"Feature not available","descriptionConnected":"This feature is only available on paid plans. Upgrade your plan to unlock all in-call features.","descriptionGuest":"You are participating in a call created with a free version of SnapCall. This feature is only available on paid plans.","dismissGuest":"Okay","dismissConnected":"Upgrade"},"copyLink":{"title":"Copy link","description":"Copy link to clipboard","error":"An error occured when trying to copy to clipboard","copied":"Link copied to clipboard","copy":"Copy"},"quickConnect":{"title":"Quick Connect","scanTitle":"Scan QR Code","scan":"Scan this QR code with your phone to open the call."},"settings":{"title":"Settings","preferences":"Preferences","language":"Language","devices":"Devices","help":"Help","helpCenter":"Go to help center","selectYourMicrophone":"Select your preferred microphone","selectYourCamera":"Select your preferred camera","selectYourLanguage":"Select your preferred language","callSettings":"Call settings","tools":"Tools","enableVideo":"Enable video","manageRecording":"Manage recording","startRecording":"Start recording","stopRecording":"Stop recording"},"audioMenu":{"title":"Audio","blockedMicrophone":"Microphone is blocked.","microphonePermissions":"Please accept microphone sharing before accessing these options."},"videoMenu":{"title":"Video","lowDef":"Low definition (240p)","standardDef":"Standard definition (480p)","highDef":"High definition (720p)","blockedCamera":"Camera is blocked.","cameraPermissions":"Please accept camera sharing before accessing these options.","sendResolution":"Send Resolution (maximum)"},"shareLink":{"title":"Share link","title2":"Share a link","invalid":"Invalid link","sentToUsers":"Link sent to users","sentToUser":"Link sent to {{user}}","failed":"Failed to send link","poweredBy":"Powered by","invoice":"{{user}} sent you an invoice.","pay":"Pay"},"invitePeople":{"PublicLink":"Public link","invitePeople":"Invite people","joinTheCall":"Join the call","inviteRecordClip":"Invite to record clip","inviteRecordVideo":"Record a video","inviteRecordAudio":"Record an audio","inviteRecordScreen":"Record a screen","inviteRecordPhoto":"Take a photo","inviteCall":"Invite to join call","sharePublicLink":"Share public link","inviteByEmail":"Invite by email","inviteByEmailOrNumber":"Invite by email or sms","emailsOrNumberPlaceholder":"Eg. john@acme.com or +33612345678","addEmailToInvite":"Add an email to invite.","email":"Email","emailPlaceholder":"Eg. john@acme.com","invite":"Invite","linkToJoinCall":"Link to join the call","linkToRecordAClip":"Link to record a clip","invalidEmail":"Invalid email format.","invalidEmailOrNumber":"Invalid email or number format.","addEmails":"Add emails...","invitationSentTo_one":"Sent to {{ name }}","invitationSentTo_other":"Sent to {{ name }} and {{ otherEmailsCount }}+","error":"Failed to send, please try again later.","inviteCallDefaultMessage":"Hey! You\'re invited to join our video call. Click the link to connect instantly.","inviteClipDefaultMessage":"Hey! Please record your video now and provide us with more context to assist you better.","inviteClipVideoDefaultMessage":"Hey! Please record your video now and provide us with more context to assist you better.","inviteClipAudioDefaultMessage":"Hey! Please record an audio message now and provide us with more context to assist you better.","inviteClipScreenDefaultMessage":"Hey! Please record your screen now and provide us with more context to assist you better.","inviteClipPhotoDefaultMessage":"Hey! Please take a photo and provide us with more context to assist you better.","message":"Message"},"youtube":{"title":"Watch Together","url":"YouTube URL","invalid":"Invalid YouTube URL","share":"Watch now","description":"Share a YouTube video with other participants."},"sharedHistory":{"shared":"Shared with you"},"snapshot":{"title":"Snapshot","shared":"Snapshot shared.","sentToUsers":"Snapshot sent to users.","sentToUser":"Snapshot sent to {{user}}","save":"Save photo","error":"An error occured when trying to send the snapshot","aSnapshotHasBeenShared":"A snapshot has been shared."},"gdpr":{"recordedWarning":"To improve the quality of our service, this call will be recorded."},"requestDevice":{"requestInput":"Request input devices","request":"{{user}} would like you to share your {{device}}","timedOut":"Your request has timed out.","declined":"Your request has been declined.","userDeclined":"{{user}} has declined your request.","askForDevice":"Ask for {{device}}","waitingForDevice":"Waiting for {{name}}\'s {{device}}","deviceActivated":"{{device}} activated","deviceActivationDeclined":"{{device}} activation declined","userWouldLikeYouToActivateYourDevice":"{{name}} would like you to activate your {{device}}."},"leave":{"title":"Leave","leaveCall":"Leave call","endCall":"End call for all"},"virtualBackground":{"title":"Virtual Background","setBackground":"Set Background","default":"Default","custom":"Custom","noCustomBackgrounds":"No custom backgrounds yet. Please contact your admin.","none":"None","blur":"Blur"},"iframe":{"featureNotAvailableInContext":"This feature is not available in the current context."},"misc":{"someone":"Someone","camera":"Camera","microphone":"Microphone","photo":"Photo","video":"Video","screen":"Screen","screenshot":"Screenshot","speaker":"Speaker","user":"User","open":"Open","from":"From","accept":"Accept","decline":"Decline","you":"You","cancel":"Cancel","confirm":"Confirm","remove":"Remove","proceed":"Proceed","audio":"Audio","download":"Download","add":"Add"},"greeting":{"mainTitle":"Welcome to SnapCall","sideTitle":"Hold tight, you\'re next!","sideDescription":"Please enter your name and adjust your camera and microphone","namePlaceholder":"Eg. Lucy or Peter","nameSubmit":"Join Conversation","footerTitle":"Powered by SnapCall","footerDescription":"Meet SnapCall, the easiest way to add real-time video to platform, product or service.","cameraDisabled":"Camera is Off","microphoneDisabled":"Microphone is Off","cameraEnabled":"Camera is On","microphoneEnabled":"Microphone is On","scheduleACall":"Schedule a call","requestACall":"Request a call","name":"Name","nameDescription":"This name will be displayed to all participants in the call.","setting":"Settings","askToJoin":"Ask to join","youWillJoinWhenSomeoneLetsYou":"You will join the call when someone from {{ companyName }} lets you in.","cantJoinCall":"You can\u2019t join this call","someoneDenied":"Someone in the call denied your request to join.","askingLetIn":"Asking to be let in...","takeFewMinute":"This may take a few minutes depending on the availability of the participants.","cantWait":"Can\'t wait?","whatYouCanDo":"Here\u2019s what you can do","leaveMessage":"Leave a message","cantWaitLeaveMessage":"Can\u2019t wait? You can leave a message and you will be contacted as soon as possible.","recordVideo":"Record video","recordVoice":"Record voice","canceledCallRequest":"The call request will be canceled and you will be redirected to the call scheduling page.","mediaDenied":"Microphone and camera access denied","clickOnLock":"Click on the <1></1> lock icon in your browser\'s bar."},"networkIssue":{"title":"Network issue","description":"The clip information may be damaged."},"recorder":{"addMore":"Add more","addNewClip":"Add new clip","limit":"Video recording limited to 5 min.","replyAttached":"Your reply has been attached","elementRecordedAndAttached":"Your clip has been sent and attached to the thread.","goBackToTicket":"Go back to ticket","openThread":"Open thread","clipSubmissionTitle_one":"Your clip has been sent","clipSubmissionTitle_other":"Your clips have been sent","clipSubmissionDescription":"Thank you for using SnapCall.","submissionTitle":"Thank you for your submission!","submissionDescription":"Your photo/video has been successfully submitted. We will review it and get back to you shortly.","confirmRemovalTitle":"Confirm deletion","confirmRemovalDescription":"Are you sure you want to delete this photo/video? This action cannot be undone.","elementBeingProcessed":"Please wait while your {{ type }} is being processed...","waitVideo":"A video may take up to 15 seconds to be ready.","elementCaptureSuccess":"{{ type }} captured successfully","takeNewElement":"Capture a new {{ type }}","send":"Send","sendElements_one":"Send {{ type }}","sendElements_other":"Send {{ count }} elements","clipCount_one":"{{ count }} clip","clipCount_other":"{{ count }} clips","attachElements_one":"Attach {{ type }} to ticket","attachElements_other":"Attach {{ count }} elements","allowAccess":"Allow access","okay":"Okay","allowCamMicAccess":"Allow access to cam/mic","allowScreenShareAccess":"Allow access to screen sharing","permissionDeniedTitle":"Something went wrong!","permissionDeniedDescription":"Without access to the camera and microphone, you won\'t be able to capture photos or videos to share with the support team. Please grant access in your browser settings.","photoInstructionsTitle":"Ready to snap a photo?","videoInstructionsTitle":"Ready to record a video?","screenShareInstructionsTitle":"Ready to share your screen?","audioInstructionsTitle":"Ready to record a voice message?","instructions":{"selectScreenshare":"Tap Record my screen and select the screen or window you want to record.","speakDuringRecord":"You can speak while recording to add details.","stopScreenOnFinish":"Press the Stop button when finished. The video will be sent to us automatically.","allowAccessOnPrompt":"When prompted, <bold>allow access</bold> to camera and microphone.","multiplePhotos":"Take a <bold>photo or multiple</bold> for detail, then review.","reviewAndSendPhotos":"<bold>Validate your photos</bold>, and they will be sent to us automatically.","tapVideoButton":"<bold>Tap the record button</bold> to begin and feel free to provide commentary.","videoSpeech":"You can <bold>talk during</bold> the recording to provide additional information.","tapStopVideoButton":"<bold>Tap stop</bold> when you are done.","reviewAndSendVideos":"<bold>Review your videos</bold>, and they will be sent to us automatically.","screenShareInstruction":"Select the screen or window you wish to record.","privacyPolicy":"By proceeding, you agree to our <bold>Privacy Policy</bold>.","tapAudioButton":"<bold>Tap the record button</bold> to start recording your audio message.","speakClearly":"<bold>Speak clearly</bold> and say what you need to convey.","reviewAndSendAudios":"<bold>Review your audios</bold>, and they will be sent to us automatically."},"switchToMobileTitle":"Switch to your mobile device","switchToMobileDescription":"Experience greater convenience by using your phone to take photos and record videos.","useDesktopVersion":"Use the desktop version","scanQRCode":"Scan this QR code with a compatible device.","startScreenShareButton":"Record my screen","stopScreenShareButton":"Stop recording","screenTitle":"Ready to capture your screen?","loggedAs":"Logged as","logIn":"Log in","audioLevelNotification":{"shortVideo":{"title":"Short video.","description":"This video is too short to get context."},"noSound":{"title":"No sound detected.","description":"Make sure your microphone is activated."},"spokenWordsQuestion":{"title":"Spoken words.","description":"Does your video include enough spoken details?"},"spokenWordsWarning":{"title":"No spoken words.","description":"The clip includes barely any spoken words."}},"audioLevelToast":{"continueSpeaking":"Continue speaking for clearer context.","rememberSpeaking":"Remember to speak to provide context.","noSound":"No sound detected."},"chooseWhatYouWantToShare":"Choose what you want to share","startScreenRecording":"Start screen recording","noCameraAndMicrophoneAccess":"No camera & microphone access","noCameraAccess":"No camera access","noMicrophoneAccess":"No microphone access","chooseWhatYouWantToShareDescription":"Select the screen or tab you want to share and start recording.","noCameraAndMicrophoneAccessDescription":"No camera & microphone access Allow microphone and camera access in your browser.","noMicrophoneAccessDescription":"No microphone access Allow microphone access in your browser.","noCameraAccessDescription":"No camera access Allow camera access in your browser.","mediaCount_one":"{{ count }} media","mediaCount_other":"{{ count }} media","mediaSent_one":"Your media has been sent","mediaSent_other":"Your media has been sent","showQrCode":"Show QR code","upload":"Upload","startByClickingOnTheButton":"Start by clicking on the round button below! \uD83D\uDC47","feelFreeToTalkGiveMoreContext":"\uD83D\uDDE3\uFE0F Feel free to talk to give me more context.","yourMedia":"Your media","thanksForYourMedia":"Thanks for your media!","videoBotThinking":"Thinking...","videoBotError":"Sorry, an error has occured.","mySuggestion":"My suggestion","recordNewMedia":"Record new media"}}');
|
|
57
|
+
$20859e1dad0fd138$exports = JSON.parse('{"header":{"free":"Free version"},"loader":{"connection":"Connecting..."},"common":{"new":"new"},"notifications":{"error":"Error","screensharingError":"An error occured when trying to toggle screensharing","microphoneError":"An error occured when trying to toggle the microphone","cameraError":"An error occured when trying to toggle the camera","cameraRotateError":"An error occured when trying to rotate the camera","noCamera":"No camera available","blockedMicrophonePopupTitle":"Camera and microphone are blocked","blockedMicrophonePopup":"SnapCall requires access to your camera and microphone. Click the camera blocked icon in your browser\'s address bar.","reload":"Reload","criticalError":"A critical error has occurred (error {{code}}).","agentJoinError":"An error occured while trying to join the room as an agent","close":"Close","connectedTo":"Connected to {{name}}","recording":"Recording in progress","recordingStopped":"Recording stopped","invitationSentToFailed":"Sent to {{ name }} failed.","errorOccuredCode":"An error occured (error {{code}}).","unableToZoom":"Unable to zoom","unableToUnzoom":"Unable to unzoom","unableToSwitchCamera":"Unable to switch camera","uploadFailed":"Upload failed","permissionToShareScreenDenied":"Permission to share screen denied","somethingWentWrong":"Oops! Something went wrong","failedToMuteUnmuteMicrophone":"Failed to mute / unmute the microphone","failedToEnableMicrophone":"Failed to enable microphone","failedToEnableVideo":"Failed to enable video","failedToDisableVideo":"Failed to disable video","aQuickRefreshShouldFix":"A quick refresh should get things back on track","networkStability":"Network stability","yourInternetConnectionIsUnstable":"Your internet connection is unstable","locationIsRequired":"Location is required","locationIsBlocked":"Location is blocked","pleaseEnableLocation":"Please enable location services in your settings.","allow":"Allow"},"recordingPopup":{"recordingStartTitle":"Recording about to start.","recordingStartText":"This call will be recorded shortly. If you\u2019d rather not be recorded, you\u2019re welcome to leave the call at this time.","dismiss":"Dismiss"},"requestAccess":{"wantToJoin":"<bold>{{name}}</bold> wants to join!","deny":"Deny","admit":"Admit","defaultName":"An user"},"endView":{"goBack":"Go back to call","callEnded":"The call has ended","callNoLongerActive":"This call is no longer active. Thank you for participating.","callLeft":"You have left the call","ifMistakeRejoin":"If this was a mistake, you can rejoin using the button below.","full":"You can\'t join this call","fullDescription":"The room is full. Please try to join the call later.","invalidLink":"Invalid link","invalidOrExpired":"This link is invalid or expired.","openDashboard":"Open dashboard","howWasYourExperience":"How was your experience?","pleaseRateYourExperienceBelow":"Please rate your experience below","thankYouForYourFeedback":"Thank you for your feedback.","yourFeedbackHelpsUs":"Your feedback helps us improve. See you soon!","addAdditionalMedia":"Add additional media","allowsYouToShareMoreMedia":"This option allows you to share one or more media to add more context."},"menu":{"title":"Menu","new":"NEW","openNewTab":"Open new tab","quickConnect":"Quick Connect","pictureInPicture":"Picture-in-Picture","screenSharing":"Screen sharing","stopRecord":"Stop record","startRecord":"Record call"},"blockedFeature":{"titleConnected":"Upgrade your plan","titleGuest":"Feature not available","descriptionConnected":"This feature is only available on paid plans. Upgrade your plan to unlock all in-call features.","descriptionGuest":"You are participating in a call created with a free version of SnapCall. This feature is only available on paid plans.","dismissGuest":"Okay","dismissConnected":"Upgrade"},"copyLink":{"title":"Copy link","description":"Copy link to clipboard","error":"An error occured when trying to copy to clipboard","copied":"Link copied to clipboard","copy":"Copy"},"quickConnect":{"title":"Quick Connect","scanTitle":"Scan QR Code","scan":"Scan this QR code with your phone to open the call."},"settings":{"title":"Settings","preferences":"Preferences","language":"Language","devices":"Devices","help":"Help","helpCenter":"Go to help center","selectYourMicrophone":"Select your preferred microphone","selectYourCamera":"Select your preferred camera","selectYourLanguage":"Select your preferred language","callSettings":"Call settings","tools":"Tools","enableVideo":"Enable video","manageRecording":"Manage recording","startRecording":"Start recording","stopRecording":"Stop recording"},"audioMenu":{"title":"Audio","blockedMicrophone":"Microphone is blocked.","microphonePermissions":"Please accept microphone sharing before accessing these options."},"videoMenu":{"title":"Video","lowDef":"Low definition (240p)","standardDef":"Standard definition (480p)","highDef":"High definition (720p)","blockedCamera":"Camera is blocked.","cameraPermissions":"Please accept camera sharing before accessing these options.","sendResolution":"Send Resolution (maximum)"},"shareLink":{"title":"Share link","title2":"Share a link","invalid":"Invalid link","sentToUsers":"Link sent to users","sentToUser":"Link sent to {{user}}","failed":"Failed to send link","poweredBy":"Powered by","invoice":"{{user}} sent you an invoice.","pay":"Pay"},"invitePeople":{"PublicLink":"Public link","invitePeople":"Invite people","joinTheCall":"Join the call","inviteRecordClip":"Invite to record clip","inviteRecordVideo":"Record a video","inviteRecordAudio":"Record an audio","inviteRecordScreen":"Record a screen","inviteRecordPhoto":"Take a photo","inviteCall":"Invite to join call","sharePublicLink":"Share public link","inviteByEmail":"Invite by email","inviteByEmailOrNumber":"Invite by email or sms","emailsOrNumberPlaceholder":"Eg. john@acme.com or +33612345678","addEmailToInvite":"Add an email to invite.","email":"Email","emailPlaceholder":"Eg. john@acme.com","invite":"Invite","linkToJoinCall":"Link to join the call","linkToRecordAClip":"Link to record a clip","invalidEmail":"Invalid email format.","invalidEmailOrNumber":"Invalid email or number format.","addEmails":"Add emails...","invitationSentTo_one":"Sent to {{ name }}","invitationSentTo_other":"Sent to {{ name }} and {{ otherEmailsCount }}+","error":"Failed to send, please try again later.","inviteCallDefaultMessage":"Hey! You\'re invited to join our video call. Click the link to connect instantly.","inviteClipDefaultMessage":"Hey! Please record your video now and provide us with more context to assist you better.","inviteClipVideoDefaultMessage":"Hey! Please record your video now and provide us with more context to assist you better.","inviteClipAudioDefaultMessage":"Hey! Please record an audio message now and provide us with more context to assist you better.","inviteClipScreenDefaultMessage":"Hey! Please record your screen now and provide us with more context to assist you better.","inviteClipPhotoDefaultMessage":"Hey! Please take a photo and provide us with more context to assist you better.","message":"Message"},"youtube":{"title":"Watch Together","url":"YouTube URL","invalid":"Invalid YouTube URL","share":"Watch now","description":"Share a YouTube video with other participants."},"sharedHistory":{"shared":"Shared with you"},"snapshot":{"title":"Snapshot","shared":"Snapshot shared.","sentToUsers":"Snapshot sent to users.","sentToUser":"Snapshot sent to {{user}}","save":"Save photo","error":"An error occured when trying to send the snapshot","aSnapshotHasBeenShared":"A snapshot has been shared."},"gdpr":{"recordedWarning":"To improve the quality of our service, this call will be recorded."},"requestDevice":{"requestInput":"Request input devices","request":"{{user}} would like you to share your {{device}}","timedOut":"Your request has timed out.","declined":"Your request has been declined.","userDeclined":"{{user}} has declined your request.","askForDevice":"Ask for {{device}}","waitingForDevice":"Waiting for {{name}}\'s {{device}}","deviceActivated":"{{device}} activated","deviceActivationDeclined":"{{device}} activation declined","userWouldLikeYouToActivateYourDevice":"{{name}} would like you to activate your {{device}}."},"leave":{"title":"Leave","leaveCall":"Leave call","endCall":"End call for all"},"virtualBackground":{"title":"Virtual Background","setBackground":"Set Background","default":"Default","custom":"Custom","noCustomBackgrounds":"No custom backgrounds yet. Please contact your admin.","none":"None","blur":"Blur"},"iframe":{"featureNotAvailableInContext":"This feature is not available in the current context."},"misc":{"someone":"Someone","camera":"Camera","pdf":"PDF","microphone":"Microphone","photo":"Photo","video":"Video","screen":"Screen","screenshot":"Screenshot","speaker":"Speaker","user":"User","open":"Open","from":"From","accept":"Accept","decline":"Decline","you":"You","cancel":"Cancel","confirm":"Confirm","remove":"Remove","proceed":"Proceed","audio":"Audio","download":"Download","add":"Add"},"greeting":{"mainTitle":"Welcome to SnapCall","sideTitle":"Hold tight, you\'re next!","sideDescription":"Please enter your name and adjust your camera and microphone","namePlaceholder":"Eg. Lucy or Peter","nameSubmit":"Join Conversation","footerTitle":"Powered by SnapCall","footerDescription":"Meet SnapCall, the easiest way to add real-time video to platform, product or service.","cameraDisabled":"Camera is Off","microphoneDisabled":"Microphone is Off","cameraEnabled":"Camera is On","microphoneEnabled":"Microphone is On","scheduleACall":"Schedule a call","requestACall":"Request a call","name":"Name","nameDescription":"This name will be displayed to all participants in the call.","setting":"Settings","askToJoin":"Ask to join","youWillJoinWhenSomeoneLetsYou":"You will join the call when someone from {{ companyName }} lets you in.","cantJoinCall":"You can\u2019t join this call","someoneDenied":"Someone in the call denied your request to join.","askingLetIn":"Asking to be let in...","takeFewMinute":"This may take a few minutes depending on the availability of the participants.","cantWait":"Can\'t wait?","whatYouCanDo":"Here\u2019s what you can do","leaveMessage":"Leave a message","cantWaitLeaveMessage":"Can\u2019t wait? You can leave a message and you will be contacted as soon as possible.","recordVideo":"Record video","recordVoice":"Record voice","canceledCallRequest":"The call request will be canceled and you will be redirected to the call scheduling page.","mediaDenied":"Microphone and camera access denied","clickOnLock":"Click on the <1></1> lock icon in your browser\'s bar."},"networkIssue":{"title":"Network issue","description":"The clip information may be damaged."},"recorder":{"addMore":"Add more","addNewClip":"Add new clip","limit":"Video recording limited to 5 min.","replyAttached":"Your reply has been attached","elementRecordedAndAttached":"Your clip has been sent and attached to the thread.","goBackToTicket":"Go back to ticket","openThread":"Open thread","clipSubmissionTitle_one":"Your clip has been sent","clipSubmissionTitle_other":"Your clips have been sent","clipSubmissionDescription":"Thank you for using SnapCall.","submissionTitle":"Thank you for your submission!","submissionDescription":"Your photo/video has been successfully submitted. We will review it and get back to you shortly.","confirmRemovalTitle":"Confirm deletion","confirmRemovalDescription":"Are you sure you want to delete this photo/video? This action cannot be undone.","elementBeingProcessed":"Please wait while your {{ type }} is being processed...","waitVideo":"A video may take up to 15 seconds to be ready.","elementCaptureSuccess":"{{ type }} captured successfully","takeNewElement":"Capture a new {{ type }}","send":"Send","sendElements_one":"Send {{ type }}","sendElements_other":"Send {{ count }} elements","clipCount_one":"{{ count }} clip","clipCount_other":"{{ count }} clips","attachElements_one":"Attach {{ type }} to ticket","attachElements_other":"Attach {{ count }} elements","allowAccess":"Allow access","okay":"Okay","allowCamMicAccess":"Allow access to cam/mic","allowScreenShareAccess":"Allow access to screen sharing","permissionDeniedTitle":"Something went wrong!","permissionDeniedDescription":"Without access to the camera and microphone, you won\'t be able to capture photos or videos to share with the support team. Please grant access in your browser settings.","photoInstructionsTitle":"Ready to snap a photo?","videoInstructionsTitle":"Ready to record a video?","screenShareInstructionsTitle":"Ready to share your screen?","audioInstructionsTitle":"Ready to record a voice message?","instructions":{"selectScreenshare":"Tap Record my screen and select the screen or window you want to record.","speakDuringRecord":"You can speak while recording to add details.","stopScreenOnFinish":"Press the Stop button when finished. The video will be sent to us automatically.","allowAccessOnPrompt":"When prompted, <bold>allow access</bold> to camera and microphone.","multiplePhotos":"Take a <bold>photo or multiple</bold> for detail, then review.","reviewAndSendPhotos":"<bold>Validate your photos</bold>, and they will be sent to us automatically.","tapVideoButton":"<bold>Tap the record button</bold> to begin and feel free to provide commentary.","videoSpeech":"You can <bold>talk during</bold> the recording to provide additional information.","tapStopVideoButton":"<bold>Tap stop</bold> when you are done.","reviewAndSendVideos":"<bold>Review your videos</bold>, and they will be sent to us automatically.","screenShareInstruction":"Select the screen or window you wish to record.","privacyPolicy":"By proceeding, you agree to our <bold>Privacy Policy</bold>.","tapAudioButton":"<bold>Tap the record button</bold> to start recording your audio message.","speakClearly":"<bold>Speak clearly</bold> and say what you need to convey.","reviewAndSendAudios":"<bold>Review your audios</bold>, and they will be sent to us automatically."},"switchToMobileTitle":"Switch to your mobile device","switchToMobileDescription":"Experience greater convenience by using your phone to take photos and record videos.","useDesktopVersion":"Use the desktop version","scanQRCode":"Scan this QR code with a compatible device.","startScreenShareButton":"Record my screen","stopScreenShareButton":"Stop recording","screenTitle":"Ready to capture your screen?","loggedAs":"Logged as","logIn":"Log in","audioLevelNotification":{"shortVideo":{"title":"Short video.","description":"This video is too short to get context."},"noSound":{"title":"No sound detected.","description":"Make sure your microphone is activated."},"spokenWordsQuestion":{"title":"Spoken words.","description":"Does your video include enough spoken details?"},"spokenWordsWarning":{"title":"No spoken words.","description":"The clip includes barely any spoken words."}},"audioLevelToast":{"continueSpeaking":"Continue speaking for clearer context.","rememberSpeaking":"Remember to speak to provide context.","noSound":"No sound detected."},"chooseWhatYouWantToShare":"Choose what you want to share","startScreenRecording":"Start screen recording","noCameraAndMicrophoneAccess":"No camera & microphone access","noCameraAccess":"No camera access","noMicrophoneAccess":"No microphone access","chooseWhatYouWantToShareDescription":"Select the screen or tab you want to share and start recording.","noCameraAndMicrophoneAccessDescription":"No camera & microphone access Allow microphone and camera access in your browser.","noMicrophoneAccessDescription":"No microphone access Allow microphone access in your browser.","noCameraAccessDescription":"No camera access Allow camera access in your browser.","mediaCount_one":"{{ count }} media","mediaCount_other":"{{ count }} media","mediaSent_one":"Your media has been sent","mediaSent_other":"Your media has been sent","showQrCode":"Show QR code","upload":"Upload","startByClickingOnTheButton":"Start by clicking on the round button below! \uD83D\uDC47","feelFreeToTalkGiveMoreContext":"\uD83D\uDDE3\uFE0F Feel free to talk to give me more context.","yourMedia":"Your media","thanksForYourMedia":"Thanks for your media!","videoBotThinking":"Thinking...","videoBotError":"Sorry, an error has occured.","mySuggestion":"My suggestion","recordNewMedia":"Record new media"}}');
|
|
58
58
|
|
|
59
59
|
|
|
60
60
|
var $a8febdc80ac5353b$exports = {};
|
|
61
|
-
$a8febdc80ac5353b$exports = JSON.parse('{"audioMenu":{"blockedMicrophone":"Microphone is blocked.","microphonePermissions":"Please accept microphone sharing before accessing these options.","title":"Audio"},"blockedFeature":{"descriptionConnected":"On a free plan, you can\'t use this feature. Upgrade your plan to enjoy all in-call features.","descriptionGuest":"You are participating in a call created with a free version of SnapCall. This feature is only available with a Pro version.","dismissConnected":"Upgrade to Pro","dismissGuest":"Okay","titleConnected":"Upgrade to Pro","titleGuest":"Feature not available"},"common":{"new":"new"},"copyLink":{"copied":"Link copied to clipboard","copy":"Copy","description":"Copy link into clipboard","error":"An error occured when trying to copy to clipboard","title":"Copy link"},"endView":{"addAdditionalMedia":"Add additional media","allowsYouToShareMoreMedia":"This option allows you to share one or more media to add more context.","callEnded":"The call is now ended","callIsOver":"The call is over or deleted","callLeft":"You left the call","callNoLongerActive":"This call is no longer active. Thank you for participating.","full":"You can\'t join this call","fullDescription":"The room is full. Please try to join the call later.","goBack":"Go back to call","howWasYourExperience":"How was your experience?","ifMistakeRejoin":"If this was a mistake, you can rejoin using the button below.","invalidLink":"Invalid link","invalidOrExpired":"This link is invalid or expired.","openDashboard":"Open dashboard","pleaseRateYourExperienceBelow":"Please rate your experience below","thankYouForYourFeedback":"Thank you for your feedback.","tooLate":"You arrived too late","yourFeedbackHelpsUs":"Your feedback helps us improve. See you soon!"},"gdpr":{"recordedWarning":"To improve the quality of our service, this call will be recorded."},"greeting":{"askToJoin":"Ask to join","askingLetIn":"Asking to be let in...","cameraDisabled":"Camera is Off","cameraEnabled":"Camera is On","canceledCallRequest":"The call request will be canceled and you will be redirected to the call scheduling page.","cantJoinCall":"You can\u2019t join this call","cantWait":"Can\'t wait?","cantWaitLeaveMessage":"Can\u2019t wait? You can leave a message and you will be contacted as soon as possible.","clickOnLock":"Click on the <1></1> lock icon in your browser\'s bar.","footerDescription":"Meet SnapCall, the easiest way to add real-time video to platform, product or service.","footerTitle":"Powered by SnapCall","leaveMessage":"Leave a message","mainTitle":"Welcome to SnapCall","mediaDenied":"Microphone and camera access denied","microphoneDisabled":"Microphone is Off","microphoneEnabled":"Microphone is On","name":"Name","nameDescription":"This name will be displayed to all participants in the call.","namePlaceholder":"Eg. Lucy or Peter","nameSubmit":"Join Conversation","recordVideo":"Record video","recordVoice":"Record voice","requestACall":"Request a call","scheduleACall":"Schedule a call","setting":"Settings","sideDescription":"Please enter your name and adjust your camera and microphone","sideTitle":"Hold tight, you\'re next!","someoneDenied":"Someone in the call denied your request to join.","takeFewMinute":"This may take a few minutes depending on the availability of the participants.","whatYouCanDo":"Here\u2019s what you can do","youWillJoinWhenSomeoneLetsYou":"You will join the call when someone from {{ companyName }} lets you in."},"header":{"free":"Free version"},"iframe":{"featureNotAvailableInContext":"This feature is not available in the current context."},"invitePeople":{"PublicLink":"Public link","addEmailToInvite":"Add an email to invite.","addEmails":"Add emails...","copyCallLinkDescription":"Copy this link and send it to anyone you wish to invite to join the call.","copyClipLinkDescription":"Copy this link and send it to anyone you wish to invite to record a clip.","email":"Email","emailPlaceholder":"Eg. john@acme.com","emailsOrNumberPlaceholder":"Eg. john@acme.com or +33612345678","error":"Failed to send, please try again later.","invalidEmail":"Invalid email format.","invalidEmailOrNumber":"Invalid email or number format.","invitationSentTo_one":"Sent to {{ name }}","invitationSentTo_other":"Sent to {{ name }} and {{ otherEmailsCount }}+","invite":"Invite","inviteByEmail":"Invite by email","inviteByEmailOrNumber":"Invite by email or sms","inviteCall":"Invite to join call","inviteCallDefaultMessage":"Hey! You\'re invited to join our video call. Click the link to connect instantly.","inviteClipAudioDefaultMessage":"Hey! Please record an audio message now and provide us with more context to assist you better.","inviteClipDefaultMessage":"Hey! Please record your video clip now and provide us with more context to assist you better.","inviteClipPhotoDefaultMessage":"Hey! Please take a photo and provide us with more context to assist you better.","inviteClipScreenDefaultMessage":"Hey! Please record your screen now and provide us with more context to assist you better.","inviteClipVideoDefaultMessage":"Hey! Please record your video now and provide us with more context to assist you better.","invitePeople":"Invite people","inviteRecordAudio":"Record an audio","inviteRecordClip":"Invite to record clip","inviteRecordPhoto":"Take a photo","inviteRecordScreen":"Record a screen","inviteRecordVideo":"Record a video","joinTheCall":"Join the call","linkToJoinCall":"Link to join the call","linkToRecordAClip":"Link to record a clip","message":"Message","sharePublicLink":"Share public link"},"leave":{"endCall":"End call for all","leaveCall":"Leave call","title":"Leave"},"loader":{"connection":"Connecting..."},"menu":{"new":"NEW","openNewTab":"Open new tab","pictureInPicture":"Picture-in-Picture","quickConnect":"Quick Connect","screenSharing":"Screen sharing","startRecord":"Record call","stopRecord":"Stop record","title":"Menu"},"misc":{"accept":"Accept","add":"Add","audio":"Audio","camera":"Camera","cancel":"Cancel","confirm":"Confirm","decline":"Decline","download":"Download","from":"From","microphone":"Microphone","open":"Open","photo":"Photo","proceed":"Proceed","remove":"Remove","screen":"Screen","screenshot":"Screenshot","someone":"Someone","speaker":"Speaker","user":"User","video":"Video","you":"You"},"networkIssue":{"description":"The clip information may be damaged.","title":"Network issue"},"notifications":{"aQuickRefreshShouldFix":"A quick refresh should get things back on track","agentJoinError":"An error occured while trying to join the room as an agent","allow":"Allow","blockedMicrophonePopup":"SnapCall requires access to your camera and microphone. Click the camera blocked icon in your browser\'s address bar.","blockedMicrophonePopupTitle":"Camera and microphone are blocked","cameraError":"An error occured when trying to toggle the camera","cameraRotateError":"An error occured when trying to rotate the camera","close":"Close","connectedTo":"Connected to {{name}}","criticalError":"A critical error has occurred (error {{code}}).","error":"Error","errorOccuredCode":"An error occured (error {{code}}).","failedToDisableVideo":"Failed to disable video","failedToEnableMicrophone":"Failed to enable microphone","failedToEnableVideo":"Failed to enable video","failedToMuteUnmuteMicrophone":"Failed to mute / unmute the microphone","invitationSentToFailed":"Sent to {{ name }} failed.","locationIsBlocked":"Location is blocked","locationIsRequired":"Location is required","microphoneError":"An error occured when trying to toggle the microphone","networkStability":"Network stability","noCamera":"No camera available","permissionToShareScreenDenied":"Permission to share screen denied","pleaseEnableLocation":"Please enable location services in your settings.","recording":"Recording in progress","recordingStopped":"Recording stopped","reload":"Reload","screensharingError":"An error occured when trying to toggle screensharing","somethingWentWrong":"Oops! Something went wrong","unableToSwitchCamera":"Unable to switch camera","unableToUnzoom":"Unable to unzoom","unableToZoom":"Unable to zoom","uploadError":"An error occured during the upload, please try again later.","uploadFailed":"Upload failed","yourInternetConnectionIsUnstable":"Your internet connection is unstable"},"quickConnect":{"scan":"Scan this QR code with your phone camera to open the call.","scanTitle":"Scan QR Code","title":"Quick Connect"},"recorder":{"addMore":"Add more","addNewClip":"Add new clip","allowAccess":"Allow access","allowCamMicAccess":"Allow access to cam/mic","allowScreenShareAccess":"Allow access to screen sharing","attachElements_one":"Attach {{ type }} to ticket","attachElements_other":"Attach {{ count }} elements","audioInstructionsTitle":"Ready to record a voice message?","audioLevelNotification":{"noSound":{"description":"Make sure your microphone is activated.","title":"No sound detected."},"shortVideo":{"description":"This video is too short to get context.","title":"Short video."},"spokenWordsQuestion":{"description":"Does your video include enough spoken details?","title":"Spoken words."},"spokenWordsWarning":{"description":"The clip includes barely any spoken words.","title":"No spoken words."}},"audioLevelToast":{"continueSpeaking":"Continue speaking for clearer context.","noSound":"No sound detected.","rememberSpeaking":"Remember to speak to provide context."},"chooseWhatYouWantToShare":"Choose what you want to share","chooseWhatYouWantToShareDescription":"Select the screen or tab you want to share and start recording.","clipCount_one":"{{ count }} clip","clipCount_other":"{{ count }} clips","clipSubmissionDescription":"Thank you for using SnapCall.","clipSubmissionTitle_one":"Your clip has been sent","clipSubmissionTitle_other":"Your clips have been sent","confirmRemovalDescription":"Are you sure you want to delete this photo/video? This action cannot be undone.","confirmRemovalTitle":"Confirm deletion","elementBeingProcessed":"Please wait while your {{ type }} is being processed...","elementCaptureSuccess":"{{ type }} captured successfully","elementRecordedAndAttached":"Your clip has been sent and attached to the thread.","feelFreeToTalkGiveMoreContext":"\uD83D\uDDE3\uFE0F Feel free to talk to give me more context.","goBackToTicket":"Go back to ticket","instructions":{"allowAccessOnPrompt":"When prompted, <bold>allow access</bold> to camera and microphone.","multiplePhotos":"Take a <bold>photo or multiple</bold> for detail, then review.","privacyPolicy":"By proceeding, you agree to our <bold>Privacy Policy</bold>.","reviewAndSendAudios":"<bold>Review your audios</bold>, and they will be sent to us automatically.","reviewAndSendPhotos":"<bold>Validate your photos</bold>, and they will be sent to us automatically.","reviewAndSendVideos":"<bold>Review your videos</bold>, and they will be sent to us automatically.","screenShareInstruction":"Select the screen or window you wish to record.","selectScreenshare":"Tap Record my screen and select the screen or window you want to record.","speakClearly":"<bold>Speak clearly</bold> and say what you need to convey.","speakDuringRecord":"You can speak while recording to add details.","stopScreenOnFinish":"Press the Stop button when finished. The video will be sent to us automatically.","tapAudioButton":"<bold>Tap the record button</bold> to start recording your audio message.","tapStopVideoButton":"<bold>Tap stop</bold> when you are done.","tapVideoButton":"<bold>Tap the record button</bold> to begin and feel free to provide commentary.","videoSpeech":"You can <bold>talk during</bold> the recording to provide additional information."},"limit":"Video recording limited to 5 min.","logIn":"Log in","loggedAs":"Logged as","mediaCount_one":"{{ count }} media","mediaCount_other":"{{ count }} media","mediaSent_one":"Your media has been sent","mediaSent_other":"Your media has been sent","mySuggestion":"My suggestion","noCameraAccess":"No camera access","noCameraAccessDescription":"No camera access Allow camera access in your browser.","noCameraAndMicrophoneAccess":"No camera & microphone access","noCameraAndMicrophoneAccessDescription":"No camera & microphone access Allow microphone and camera access in your browser.","noMicrophoneAccess":"No microphone access","noMicrophoneAccessDescription":"No microphone access Allow microphone access in your browser.","okay":"Okay","openThread":"Open thread","permissionDeniedDescription":"Without access to the camera and microphone, you won\'t be able to capture photos or videos to share with the support team. Please grant access in your browser settings.","permissionDeniedTitle":"Something went wrong!","photoInstructionsTitle":"Ready to snap a photo?","recordNewMedia":"Record new media","replyAttached":"Your reply has been attached","scanQRCode":"Scan this QR code with a compatible device.","screenShareInstructionsTitle":"Ready to share your screen?","screenTitle":"Ready to capture your screen?","send":"Send","sendElements_one":"Send {{ type }}","sendElements_other":"Send {{ count }} elements","showQrCode":"Show QR code","startByClickingOnTheButton":"Start by clicking on the round button below! \uD83D\uDC47","startScreenRecording":"Start screen recording","startScreenShareButton":"Record my screen","stopScreenShareButton":"Stop recording","submissionDescription":"Your photo/video has been successfully submitted. We will review it and get back to you shortly.","submissionTitle":"Thank you for your submission!","switchToMobileDescription":"Experience greater convenience by using your phone to take photos and record videos.","switchToMobileTitle":"Switch to your mobile device","takeNewElement":"Capture a new {{ type }}","thanksForYourMedia":"Thanks for your media!","upload":"Upload","useDesktopVersion":"Use the desktop version","videoBotError":"Sorry, an error has occured.","videoBotThinking":"Thinking...","videoInstructionsTitle":"Ready to record a video?","waitVideo":"A video may take up to 15 seconds to be ready.","yourMedia":"Your media"},"recordingPopup":{"dismiss":"Dismiss","recordingStartText":"This call will be recorded shortly. If you\u2019d rather not be recorded, you\u2019re welcome to leave the call at this time.","recordingStartTitle":"Recording about to start."},"requestAccess":{"admit":"Admit","defaultName":"An user","deny":"Deny","wantToJoin":"<bold>{{name}}</bold> wants to join!"},"requestDevice":{"askForDevice":"Ask for {{device}}","declined":"Your request has been declined.","deviceActivated":"{{device}} activated","deviceActivationDeclined":"{{device}} activation declined","request":"{{user}} would like you to share your {{device}}","requestInput":"Request input devices","timedOut":"Your request has timed out.","userDeclined":"{{user}} has declined your request.","userWouldLikeYouToActivateYourDevice":"{{name}} would like you to activate your {{device}}.","waitingForDevice":"Waiting for {{name}}\'s {{device}}"},"settings":{"callSettings":"Call settings","devices":"Devices","enableVideo":"Enable video","help":"Help","helpCenter":"Go to help center","language":"Language","manageRecording":"Manage recording","preferences":"Preferences","selectYourCamera":"Select your preferred camera","selectYourLanguage":"Select your preferred language","selectYourMicrophone":"Select your preferred microphone","startRecording":"Start recording","stopRecording":"Stop recording","title":"Settings","tools":"Tools"},"shareLink":{"failed":"Failed to send link","invalid":"Invalid link","invoice":"{{user}} sent you an invoice.","pay":"Pay","poweredBy":"Powered by","sentToUser":"Link sent to {{user}}","sentToUsers":"Link sent to users","title":"Share link","title2":"Share a link"},"sharedHistory":{"shared":"Shared with you"},"snapshot":{"aSnapshotHasBeenShared":"A snapshot has been shared.","error":"An error occured when trying to send the snapshot","save":"Save photo","sentToUser":"Snapshot sent to {{user}}","sentToUsers":"Snapshot sent to users.","shared":"Snapshot shared.","title":"Snapshot"},"videoMenu":{"blockedCamera":"Camera is blocked.","cameraPermissions":"Please accept camera sharing before accessing these options.","highDef":"High definition (720p)","lowDef":"Low definition (240p)","sendResolution":"Send Resolution (maximum)","standardDef":"Standard definition (480p)","title":"Video"},"virtualBackground":{"blur":"Blur","custom":"Custom","default":"Default","noCustomBackgrounds":"No custom backgrounds yet. Please contact your admin.","none":"None","setBackground":"Set Background","title":"Virtual Background"},"youtube":{"description":"Share a YouTube video with other participants.","invalid":"Invalid YouTube URL","share":"Watch now","title":"Watch Together","url":"YOUTUBE URL"}}');
|
|
61
|
+
$a8febdc80ac5353b$exports = JSON.parse('{"audioMenu":{"blockedMicrophone":"Microphone is blocked.","microphonePermissions":"Please accept microphone sharing before accessing these options.","title":"Audio"},"blockedFeature":{"descriptionConnected":"On a free plan, you can\'t use this feature. Upgrade your plan to enjoy all in-call features.","descriptionGuest":"You are participating in a call created with a free version of SnapCall. This feature is only available with a Pro version.","dismissConnected":"Upgrade to Pro","dismissGuest":"Okay","titleConnected":"Upgrade to Pro","titleGuest":"Feature not available"},"common":{"new":"new"},"copyLink":{"copied":"Link copied to clipboard","copy":"Copy","description":"Copy link into clipboard","error":"An error occured when trying to copy to clipboard","title":"Copy link"},"endView":{"addAdditionalMedia":"Have you forgotten to mention anything?","allowsYouToShareMoreMedia":"Add media here so that your support agent can review it offline.","callEnded":"The call is now ended","callIsOver":"The call is over or deleted","callLeft":"You left the call","callNoLongerActive":"This call is no longer active. Thank you for participating.","full":"You can\'t join this call","fullDescription":"The room is full. Please try to join the call later.","goBack":"Go back to call","howWasYourExperience":"Was the connection quality of your call satisfactory?","ifMistakeRejoin":"If this was a mistake, you can rejoin using the button below.","invalidLink":"Invalid link","invalidOrExpired":"This link is invalid or expired.","openDashboard":"Open dashboard","pleaseRateYourExperienceBelow":"We value your feedback. Please rate your experience below to help us improve.","thankYouForYourFeedback":"Thank you for your feedback.","tooLate":"You arrived too late","yourFeedbackHelpsUs":"Your feedback helps us improve. See you soon!"},"gdpr":{"recordedWarning":"To improve the quality of our service, this call will be recorded."},"greeting":{"askToJoin":"Ask to join","askingLetIn":"Asking to be let in...","cameraDisabled":"Camera is Off","cameraEnabled":"Camera is On","canceledCallRequest":"The call request will be canceled and you will be redirected to the call scheduling page.","cantJoinCall":"You can\u2019t join this call","cantWait":"Can\'t wait?","cantWaitLeaveMessage":"Can\u2019t wait? You can leave a message and you will be contacted as soon as possible.","clickOnLock":"Click on the <1></1> lock icon in your browser\'s bar.","footerDescription":"Meet SnapCall, the easiest way to add real-time video to platform, product or service.","footerTitle":"Powered by SnapCall","leaveMessage":"Leave a message","mainTitle":"Welcome to SnapCall","mediaDenied":"Microphone and camera access denied","microphoneDisabled":"Microphone is Off","microphoneEnabled":"Microphone is On","name":"Name","nameDescription":"This name will be displayed to all participants in the call.","namePlaceholder":"Eg. Lucy or Peter","nameSubmit":"Join Conversation","recordVideo":"Record video","recordVoice":"Record voice","requestACall":"Request a call","scheduleACall":"Schedule a call","setting":"Settings","sideDescription":"Please enter your name and adjust your camera and microphone","sideTitle":"Hold tight, you\'re next!","someoneDenied":"Someone in the call denied your request to join.","takeFewMinute":"This may take a few minutes depending on the availability of the participants.","whatYouCanDo":"Here\u2019s what you can do","youWillJoinWhenSomeoneLetsYou":"You will join the call when someone from {{ companyName }} lets you in."},"header":{"free":"Free version"},"iframe":{"featureNotAvailableInContext":"This feature is not available in the current context."},"invitePeople":{"PublicLink":"Public link","addEmailToInvite":"Add an email to invite.","addEmails":"Add emails...","copyCallLinkDescription":"Copy this link and send it to anyone you wish to invite to join the call.","copyClipLinkDescription":"Copy this link and send it to anyone you wish to invite to record a clip.","email":"Email","emailPlaceholder":"Eg. john@acme.com","emailsOrNumberPlaceholder":"Eg. john@acme.com or +33612345678","error":"Failed to send, please try again later.","invalidEmail":"Invalid email format.","invalidEmailOrNumber":"Invalid email or number format.","invitationSentTo_one":"Sent to {{ name }}","invitationSentTo_other":"Sent to {{ name }} and {{ otherEmailsCount }}+","invite":"Invite","inviteByEmail":"Invite by email","inviteByEmailOrNumber":"Invite by email or sms","inviteCall":"Invite to join call","inviteCallDefaultMessage":"Hey! You\'re invited to join our video call. Click the link to connect instantly.","inviteClipAudioDefaultMessage":"Hey! Please record an audio message now and provide us with more context to assist you better.","inviteClipDefaultMessage":"Hey! Please record your video clip now and provide us with more context to assist you better.","inviteClipPhotoDefaultMessage":"Hey! Please take a photo and provide us with more context to assist you better.","inviteClipScreenDefaultMessage":"Hey! Please record your screen now and provide us with more context to assist you better.","inviteClipVideoDefaultMessage":"Hey! Please record your video now and provide us with more context to assist you better.","invitePeople":"Invite people","inviteRecordAudio":"Record an audio","inviteRecordClip":"Invite to record clip","inviteRecordPhoto":"Take a photo","inviteRecordScreen":"Record a screen","inviteRecordVideo":"Record a video","joinTheCall":"Join the call","linkToJoinCall":"Link to join the call","linkToRecordAClip":"Link to record a clip","message":"Message","sharePublicLink":"Share public link"},"leave":{"endCall":"End call for all","leaveCall":"Leave call","title":"Leave"},"loader":{"connection":"Connecting..."},"menu":{"new":"NEW","openNewTab":"Open new tab","pictureInPicture":"Picture-in-Picture","quickConnect":"Quick Connect","screenSharing":"Screen sharing","startRecord":"Record call","stopRecord":"Stop record","title":"Menu"},"misc":{"accept":"Accept","add":"Add","audio":"Audio","camera":"Camera","cancel":"Cancel","confirm":"Confirm","decline":"Decline","download":"Download","from":"From","microphone":"Microphone","open":"Open","pdf":"PDF","photo":"Photo","proceed":"Proceed","remove":"Remove","screen":"Screen","screenshot":"Screenshot","someone":"Someone","speaker":"Speaker","user":"User","video":"Video","you":"You"},"networkIssue":{"description":"The clip information may be damaged.","title":"Network issue"},"notifications":{"aQuickRefreshShouldFix":"A quick refresh should get things back on track","agentJoinError":"An error occured while trying to join the room as an agent","allow":"Allow","blockedMicrophonePopup":"SnapCall requires access to your camera and microphone. Click the camera blocked icon in your browser\'s address bar.","blockedMicrophonePopupTitle":"Camera and microphone are blocked","cameraError":"An error occured when trying to toggle the camera","cameraRotateError":"An error occured when trying to rotate the camera","close":"Close","connectedTo":"Connected to {{name}}","criticalError":"An error has occurred, please check your connection and contact support if this persists (error {{code}}).","error":"Error","errorOccuredCode":"An error occured (error {{code}}).","failedToDisableVideo":"Something went wrong while disabling your camera. Please refresh your tab and try again.","failedToEnableMicrophone":"Enable microphone access in your browser settings to start your video.","failedToEnableVideo":"Enable camera access in your browser settings to start your video.","failedToMuteUnmuteMicrophone":"Something went wrong while disabling your microphone. Please refresh your tab and try again.","invitationSentToFailed":"Sent to {{ name }} failed.","locationIsBlocked":"Location is blocked","locationIsRequired":"Location is required","microphoneError":"An error occured when trying to toggle the microphone","networkStability":"Network stability","noCamera":"No camera available","permissionToShareScreenDenied":"Permission to share screen denied","pleaseEnableLocation":"Please enable location services in your settings.","recording":"Recording in progress","recordingStopped":"Recording stopped","reload":"Reload","screensharingError":"An error occured when trying to toggle screensharing","somethingWentWrong":"Oops! Something went wrong","unableToSwitchCamera":"Unable to switch camera","unableToUnzoom":"Unable to unzoom","unableToZoom":"Unable to zoom","uploadError":"An error occured during the upload, please try again later.","uploadFailed":"Upload failed","yourInternetConnectionIsUnstable":"Your internet connection is unstable"},"quickConnect":{"scan":"Scan this QR code with your phone camera to open the call.","scanTitle":"Scan QR Code","title":"Quick Connect"},"recorder":{"addMore":"Add more","addNewClip":"Add new clip","allowAccess":"Allow access","allowCamMicAccess":"Allow access to cam/mic","allowScreenShareAccess":"Allow access to screen sharing","attachElements_one":"Attach {{ type }} to ticket","attachElements_other":"Attach {{ count }} elements","audioInstructionsTitle":"Ready to record a voice message?","audioLevelNotification":{"noSound":{"description":"Make sure your microphone is activated.","title":"No sound detected."},"shortVideo":{"description":"This video is too short to get context.","title":"Short video."},"spokenWordsQuestion":{"description":"Does your video include enough spoken details?","title":"Spoken words."},"spokenWordsWarning":{"description":"The clip includes barely any spoken words.","title":"No spoken words."}},"audioLevelToast":{"continueSpeaking":"Continue speaking for clearer context.","noSound":"No sound detected.","rememberSpeaking":"Remember to speak to provide context."},"chooseWhatYouWantToShare":"Choose what you want to share","chooseWhatYouWantToShareDescription":"Select the screen or tab you want to share and start recording.","clipCount_one":"{{ count }} clip","clipCount_other":"{{ count }} clips","clipSubmissionDescription":"Thank you for using SnapCall.","clipSubmissionTitle_one":"Your clip has been sent","clipSubmissionTitle_other":"Your clips have been sent","confirmRemovalDescription":"Are you sure you want to delete this photo/video? This action cannot be undone.","confirmRemovalTitle":"Confirm deletion","elementBeingProcessed":"Please wait while your {{ type }} is being processed...","elementCaptureSuccess":"{{ type }} captured successfully","elementRecordedAndAttached":"Your clip has been sent and attached to the thread.","feelFreeToTalkGiveMoreContext":"\uD83D\uDDE3\uFE0F Feel free to talk to give me more context.","goBackToTicket":"Go back to ticket","instructions":{"allowAccessOnPrompt":"When prompted, <bold>allow access</bold> to camera and microphone.","multiplePhotos":"Take a <bold>photo or multiple</bold> for detail, then review.","privacyPolicy":"By proceeding, you agree to our <bold>Privacy Policy</bold>.","reviewAndSendAudios":"<bold>Review your audios</bold>, and they will be sent to us automatically.","reviewAndSendPhotos":"<bold>Validate your photos</bold>, and they will be sent to us automatically.","reviewAndSendVideos":"<bold>Review your videos</bold>, and they will be sent to us automatically.","screenShareInstruction":"Select the screen or window you wish to record.","selectScreenshare":"Tap Record my screen and select the screen or window you want to record.","speakClearly":"<bold>Speak clearly</bold> and say what you need to convey.","speakDuringRecord":"You can speak while recording to add details.","stopScreenOnFinish":"Press the Stop button when finished. The video will be sent to us automatically.","tapAudioButton":"<bold>Tap the record button</bold> to start recording your audio message.","tapStopVideoButton":"<bold>Tap stop</bold> when you are done.","tapVideoButton":"<bold>Tap the record button</bold> to begin and feel free to provide commentary.","videoSpeech":"You can <bold>talk during</bold> the recording to provide additional information."},"limit":"Video recording limited to 5 min.","logIn":"Log in","loggedAs":"Logged as","mediaCount_one":"{{ count }} media","mediaCount_other":"{{ count }} media","mediaSent_one":"Your media has been sent","mediaSent_other":"Your media has been sent","mySuggestion":"My suggestion","noCameraAccess":"No camera access","noCameraAccessDescription":"No camera access Allow camera access in your browser.","noCameraAndMicrophoneAccess":"No camera & microphone access","noCameraAndMicrophoneAccessDescription":"No camera & microphone access Allow microphone and camera access in your browser.","noMicrophoneAccess":"No microphone access","noMicrophoneAccessDescription":"No microphone access Allow microphone access in your browser.","okay":"Okay","openThread":"Open thread","permissionDeniedDescription":"Without access to the camera and microphone, you won\'t be able to capture photos or videos to share with the support team. Please grant access in your browser settings.","permissionDeniedTitle":"Something went wrong!","photoInstructionsTitle":"Ready to snap a photo?","recordNewMedia":"Record new media","replyAttached":"Your reply has been attached","scanQRCode":"Scan this QR code with a compatible device.","screenShareInstructionsTitle":"Ready to share your screen?","screenTitle":"Ready to capture your screen?","send":"Send","sendElements_one":"Send {{ type }}","sendElements_other":"Send {{ count }} elements","showQrCode":"Show QR code","startByClickingOnTheButton":"Start by clicking on the round button below! \uD83D\uDC47","startScreenRecording":"Start screen recording","startScreenShareButton":"Record my screen","stopScreenShareButton":"Stop recording","submissionDescription":"Your photo/video has been successfully submitted. We will review it and get back to you shortly.","submissionTitle":"Thank you for your submission!","switchToMobileDescription":"Experience greater convenience by using your phone to take photos and record videos.","switchToMobileTitle":"Switch to your mobile device","takeNewElement":"Capture a new {{ type }}","thanksForYourMedia":"Thanks for your media!","upload":"Upload","useDesktopVersion":"Use the desktop version","videoBotError":"Sorry, an error has occured.","videoBotThinking":"Thinking...","videoInstructionsTitle":"Ready to record a video?","waitVideo":"A video may take up to 15 seconds to be ready.","yourMedia":"Your media"},"recordingPopup":{"dismiss":"Dismiss","recordingStartText":"This call will be recorded shortly. If you\u2019d rather not be recorded, you\u2019re welcome to leave the call at this time.","recordingStartTitle":"Recording about to start."},"requestAccess":{"admit":"Admit","defaultName":"An user","deny":"Deny","wantToJoin":"<bold>{{name}}</bold> wants to join!"},"requestDevice":{"askForDevice":"Ask for {{device}}","declined":"Your request has been declined.","deviceActivated":"{{device}} activated","deviceActivationDeclined":"{{device}} activation declined","request":"{{user}} would like you to share your {{device}}","requestInput":"Request input devices","timedOut":"Your request has timed out.","userDeclined":"{{user}} has declined your request.","userWouldLikeYouToActivateYourDevice":"{{name}} would like you to activate your {{device}}.","waitingForDevice":"Waiting for {{name}}\'s {{device}}"},"settings":{"callSettings":"Call settings","devices":"Devices","enableVideo":"Enable video","help":"Help","helpCenter":"Go to help center","language":"Language","manageRecording":"Manage recording","preferences":"Preferences","selectYourCamera":"Select your preferred camera","selectYourLanguage":"Select your preferred language","selectYourMicrophone":"Select your preferred microphone","startRecording":"Start recording","stopRecording":"Stop recording","title":"Settings","tools":"Tools"},"shareLink":{"failed":"Failed to send link","invalid":"Invalid link","invoice":"{{user}} sent you an invoice.","pay":"Pay","poweredBy":"Powered by","sentToUser":"Link sent to {{user}}","sentToUsers":"Link sent to users","title":"Share link","title2":"Share a link"},"sharedHistory":{"shared":"Shared with you"},"snapshot":{"aSnapshotHasBeenShared":"A snapshot has been shared.","error":"An error occured when trying to send the snapshot","save":"Save photo","sentToUser":"Snapshot sent to {{user}}","sentToUsers":"Snapshot sent to users.","shared":"Snapshot shared.","title":"Snapshot"},"videoMenu":{"blockedCamera":"Camera is blocked.","cameraPermissions":"Please accept camera sharing before accessing these options.","highDef":"High definition (720p)","lowDef":"Low definition (240p)","sendResolution":"Send Resolution (maximum)","standardDef":"Standard definition (480p)","title":"Video"},"virtualBackground":{"blur":"Blur","custom":"Custom","default":"Default","noCustomBackgrounds":"No custom backgrounds yet. Please contact your admin.","none":"None","setBackground":"Set Background","title":"Virtual Background"},"youtube":{"description":"Share a YouTube video with other participants.","invalid":"Invalid YouTube URL","share":"Watch now","title":"Watch Together","url":"YOUTUBE URL"}}');
|
|
62
62
|
|
|
63
63
|
|
|
64
64
|
var $32156cf38812b83d$exports = {};
|
|
65
|
-
$32156cf38812b83d$exports = JSON.parse('{"audioMenu":{"blockedMicrophone":"Votre micro est bloqu\xe9.","microphonePermissions":"Please accept microphone sharing before accessing these options.","title":"Audio"},"blockedFeature":{"descriptionConnected":"Vous n\'avez pas acc\xe8s \xe0 cette fonctionnalit\xe9. Souscrivez au plan Pro pour d\xe9bloquer toutes les fonctionnalit\xe9s de SnapCall.","descriptionGuest":"Vous participez \xe0 un appel cr\xe9\xe9 avec la version gratuite de SnapCall. Cette fonctionnalit\xe9 n\'est disponible qu\'avec une version Pro.","dismissConnected":"Souscrire \xe0 Pro","dismissGuest":"D\'accord","titleConnected":"Souscrire au plan Pro","titleGuest":"Fonctionnalit\xe9 non disponible"},"common":{"new":"nouveau"},"copyLink":{"copied":"Lien copi\xe9 dans le presse-papier","copy":"Copier","description":"Copier le lien dans le presse-papiers","error":"Une erreur est survenue pendant la copie du lien dans le presse-papier","title":"Copier le lien"},"endView":{"addAdditionalMedia":"Ajouter des m\xe9dias suppl\xe9mentaires","allowsYouToShareMoreMedia":"Cette option vous permet de partager un ou plusieurs m\xe9dias pour ajouter plus de contexte.","callEnded":"Cet appel est termin\xe9","callIsOver":"Cet appel est termin\xe9 ou supprim\xe9","callLeft":"Vous avez quitt\xe9 l\'appel","callNoLongerActive":"Cet appel n\u2019est plus actif. Merci de votre participation.","full":"Impossible de rejoindre l\'appel","fullDescription":"Limite d\'utilisateurs atteinte. Merci de rejoindre l\'appel ult\xe9rieurement.","goBack":"Retourner dans l\'appel","howWasYourExperience":"Comment s\'est d\xe9roul\xe9e votre exp\xe9rience ?","ifMistakeRejoin":"S\'il s\'agit d\'une erreur, vous pouvez retourner dans l\'appel en utilisant le bouton ci-dessous.","invalidLink":"Lien invalide","invalidOrExpired":"Ce lien n\'est pas valide ou a expir\xe9.","openDashboard":"Ouvrir le dashboard","pleaseRateYourExperienceBelow":"Veuillez \xe9valuer votre exp\xe9rience ci-dessous","thankYouForYourFeedback":"Nous vous remercions pour votre avis.","tooLate":"Vous \xeates arriv\xe9 trop tard","yourFeedbackHelpsUs":"Vos commentaires nous aident \xe0 nous am\xe9liorer. A bient\xf4t !"},"gdpr":{"recordedWarning":"Pour am\xe9liorer la qualit\xe9 de notre service, cet appel va \xeatre enregistr\xe9."},"greeting":{"askToJoin":"Demander \xe0 rejoindre","askingLetIn":"Demande de participation...","cameraDisabled":"Cam\xe9ra d\xe9sactiv\xe9e","cameraEnabled":"Cam\xe9ra activ\xe9e","canceledCallRequest":"La demande d\'appel sera annul\xe9e et vous serez redirig\xe9 vers la page de planification des appels.","cantJoinCall":"Vous ne pouvez pas rejoindre cet appel","cantWait":"Vous ne souhaitez pas attendre ?","cantWaitLeaveMessage":"Vous ne pouvez pas attendre ? Vous pouvez laisser un message et vous serez contact\xe9 dans les plus brefs d\xe9lais.","clickOnLock":"Cliquez sur l\'ic\xf4ne de verrouillage <1></1> dans la barre de votre navigateur.","footerDescription":"D\xe9couvrez SnapCall, ajoutez de la vid\xe9o en temps r\xe9el \xe0 n\'importe quelle plateforme, produit ou service.","footerTitle":"Propuls\xe9 par SnapCall","leaveMessage":"Laisser un message","mainTitle":"Bienvenue sur SnapCall","mediaDenied":"Acc\xe8s au microphone et \xe0 la cam\xe9ra refus\xe9","microphoneDisabled":"Microphone d\xe9sactiv\xe9","microphoneEnabled":"Microphone activ\xe9","name":"Nom","nameDescription":"Ce nom sera affich\xe9 \xe0 tous les participants","namePlaceholder":"Ex. Lucie ou Pierre","nameSubmit":"Rejoindre la conversation","recordVideo":"Enregistrer une vid\xe9o","recordVoice":"Enregistrer un message vocal","requestACall":"Solliciter un appel maintenant","scheduleACall":"Planifier un appel","setting":"Param\xe8tres","sideDescription":"Veuillez entrer votre nom et configurer votre cam\xe9ra et microphone.","sideTitle":"C\'est bient\xf4t votre tour !","someoneDenied":"Quelqu\'un lors de l\'appel a refus\xe9 votre demande de participation.","takeFewMinute":"Cela peut prendre quelques minutes selon la disponibilit\xe9 des participants.","whatYouCanDo":"Voici ce que vous pouvez faire","youWillJoinWhenSomeoneLetsYou":"Votre acc\xe8s \xe0 l\'appel sera autoris\xe9 par un membre de l\'\xe9quipe {{ companyName }}."},"header":{"free":"Version gratuite"},"iframe":{"featureNotAvailableInContext":"This feature is not available in the current context."},"invitePeople":{"PublicLink":"Lien public","addEmailToInvite":"Ajoutez un e-mail pour inviter.","addEmails":"Ajouter des e-mails...","copyCallLinkDescription":"Copiez ce lien et envoyez-le \xe0 toute personne que vous souhaitez inviter \xe0 rejoindre l\'appel.","copyClipLinkDescription":"Copiez ce lien et envoyez-le \xe0 toute personne que vous souhaitez inviter \xe0 enregistrer un clip.","email":"Email","emailPlaceholder":"Ex. jean@acme.com","emailsOrNumberPlaceholder":"Par exemple: john@acme.com ou +33612345678","error":"\xc9chec de l\'envoi, veuillez r\xe9essayer plus tard.","invalidEmail":"Format d\'email invalide.","invalidEmailOrNumber":"Format d\'email ou de num\xe9ro invalide.","invitationSentTo_one":"Envoy\xe9 \xe0 {{ name }}","invitationSentTo_other":"Envoy\xe9 \xe0 {{ name }} et {{ otherEmailsCount }}+","invite":"Inviter","inviteByEmail":"Inviter par email","inviteByEmailOrNumber":"Inviter par e-mail ou SMS","inviteCall":"Inviter \xe0 rejoindre l\'appel","inviteCallDefaultMessage":"Vous \xeates invit\xe9 \xe0 rejoindre notre appel vid\xe9o. Cliquez sur le lien pour vous connecter instantan\xe9ment.","inviteClipAudioDefaultMessage":"Veuillez enregistrer un message audio et nous fournir plus de contexte pour mieux vous aider.","inviteClipDefaultMessage":"Veuillez enregistrer votre clip vid\xe9o et nous fournir plus de contexte pour mieux vous aider.","inviteClipPhotoDefaultMessage":"Veuillez prendre une photo et nous fournir plus de contexte pour mieux vous aider.","inviteClipScreenDefaultMessage":"Veuillez enregistrer votre \xe9cran et nous fournir plus de contexte pour mieux vous aider.","inviteClipVideoDefaultMessage":"Enregistrez votre vid\xe9o et donnez-nous plus de d\xe9tails pour que nous puissions mieux vous aider.","invitePeople":"Inviter des personnes","inviteRecordAudio":"Enregistrer un audio","inviteRecordClip":"Inviter \xe0 enregistrer un clip","inviteRecordPhoto":"Prendre une photo","inviteRecordScreen":"Enregistrer l\'\xe9cran","inviteRecordVideo":"Enregistrer une vid\xe9o","joinTheCall":"Rejoindre l\u2019appel","linkToJoinCall":"Lien pour rejoindre l\'appel","linkToRecordAClip":"Lien pour enregistrer un clip","message":"Message","sharePublicLink":"Partager le lien public"},"leave":{"endCall":"Terminer l\'appel","leaveCall":"Quitter l\'appel","title":"Quitter"},"loader":{"connection":"Connexion..."},"menu":{"new":"NOUVEAU","openNewTab":"Ouvrir un nouvel onglet","pictureInPicture":"Picture-in-Picture","quickConnect":"Quick Connect","screenSharing":"Partage d\'\xe9cran","startRecord":"Enregistrer l\'appel","stopRecord":"Arr\xeater l\'enregistrement","title":"Menu"},"misc":{"accept":"Accepter","add":"Ajouter","audio":"Audio","camera":"Cam\xe9ra","cancel":"Annuler","confirm":"Confirmer","decline":"D\xe9cliner","download":"T\xe9l\xe9charger","from":"Depuis","microphone":"Micro","open":"Ouvrir","photo":"Photo","proceed":"Proc\xe9der","remove":"Enlever","screen":"\xc9cran","screenshot":"Capture d\'\xe9cran","someone":"Quelqu\'un","speaker":"Haut-parleur","user":"Utilisateur","video":"Vid\xe9o","you":"Vous"},"networkIssue":{"description":"The clip information may be damaged.","title":"Network issue"},"notifications":{"aQuickRefreshShouldFix":"A quick refresh should get things back on track","agentJoinError":"Une erreur est survenue en essayant de rejoindre la salle en tant qu\'agent","allow":"Allow","blockedMicrophonePopup":"SnapCall a besoin d\'acc\xe9der \xe0 votre cam\xe9ra et micro. Cliquez sur l\'ic\xf4ne de cam\xe9ra bloqu\xe9e dans la barre d\'adresse du navigateur.","blockedMicrophonePopupTitle":"Votre cam\xe9ra et micro sont bloqu\xe9s","cameraError":"Une erreur est survenue pendant l\'activation de la cam\xe9ra","cameraRotateError":"Une erreur est survenue pendant la rotation de la cam\xe9ra","close":"Fermer","connectedTo":"Connect\xe9 \xe0 {{name}}","criticalError":"Une erreur critique est survenue (erreur {{code}}).","error":"Erreur","errorOccuredCode":"Une erreur s\'est produite (erreur {{code}}).","failedToDisableVideo":"Failed to disable video","failedToEnableMicrophone":"Failed to enable microphone","failedToEnableVideo":"Failed to enable video","failedToMuteUnmuteMicrophone":"Failed to mute / unmute the microphone","invitationSentToFailed":"L\'envoi \xe0 {{ name }} a \xe9chou\xe9.","locationIsBlocked":"Location is blocked","locationIsRequired":"Location is required","microphoneError":"Une erreur est survenue pendant l\'activation du micro","networkStability":"Network stability","noCamera":"Aucune cam\xe9ra disponible","permissionToShareScreenDenied":"Permission to share screen denied","pleaseEnableLocation":"Please enable location services in your settings.","recording":"Enregistrement en cours","recordingStopped":"Recording stopped","reload":"Recharger","screensharingError":"Une erreur est survenue pendant l\'activation du partage d\'\xe9cran","somethingWentWrong":"Oops! Something went wrong","unableToSwitchCamera":"Unable to switch camera","unableToUnzoom":"Unable to unzoom","unableToZoom":"Unable to zoom","uploadError":"Une erreur s\'est produite pendant le t\xe9l\xe9chargement, veuillez r\xe9essayer plus tard.","uploadFailed":"Upload failed","yourInternetConnectionIsUnstable":"Your internet connection is unstable"},"quickConnect":{"scan":"Scannez ce QR code avec votre t\xe9l\xe9phone pour ouvrir l\'appel.","scanTitle":"Scannez le QR Code","title":"Quick Connect"},"recorder":{"addMore":"Ajouter plus","addNewClip":"Ajouter un nouveau clip","allowAccess":"Autoriser l\'acc\xe8s","allowCamMicAccess":"Autoriser acc\xe8s cam\xe9ra/micro","allowScreenShareAccess":"Autoriser l\'acc\xe8s au partage d\'\xe9cran","attachElements_one":"Joindre {{ type }} au ticket","attachElements_other":"Joindre {{ count }} \xe9l\xe9ments","audioInstructionsTitle":"Pr\xeat \xe0 enregistrer un message vocal\xa0?","audioLevelNotification":{"noSound":{"description":"Assurez-vous que votre microphone est activ\xe9.","title":"Aucun son d\xe9tect\xe9."},"shortVideo":{"description":"Cette vid\xe9o semble assez courte, ne fournit pas assez de d\xe9tails.","title":"Vid\xe9o courte."},"spokenWordsQuestion":{"description":"Votre vid\xe9o offre-t-elle une explication d\xe9taill\xe9e et claire ?","title":"Avez-vous tout expliqu\xe9 ?"},"spokenWordsWarning":{"description":"La vid\xe9o ne comprend pratiquement aucun mot prononc\xe9.","title":"Aucun mot prononc\xe9."}},"audioLevelToast":{"continueSpeaking":"Continuez \xe0 parler pour expliquer.","noSound":"Aucun son d\xe9tect\xe9.","rememberSpeaking":"Veuillez parler \xe0 voix-haute."},"chooseWhatYouWantToShare":"Choisissez ce que vous souhaitez partager","chooseWhatYouWantToShareDescription":"S\xe9lectionnez l\'\xe9cran ou l\'onglet que vous souhaitez partager et commencez l\'enregistrement.","clipCount_one":"{{ count }} clip","clipCount_other":"{{ count }} clips","clipSubmissionDescription":"Merci d\'utiliser SnapCall.","clipSubmissionTitle_one":"Votre clip a \xe9t\xe9 envoy\xe9","clipSubmissionTitle_other":"Vos clips ont \xe9t\xe9 envoy\xe9s","confirmRemovalDescription":"Voulez-vous vraiment supprimer cette photo/vid\xe9o ? Cette action ne peut pas \xeatre annul\xe9e.","confirmRemovalTitle":"Confirmer la suppression","elementBeingProcessed":"Veuillez patienter un moment pendant que votre {{ type }} est en cours de traitement...","elementCaptureSuccess":"{{ type }} captur\xe9(e) avec succ\xe8s","elementRecordedAndAttached":"Votre clip a \xe9t\xe9 envoy\xe9 et joint au fil de discussion.","feelFreeToTalkGiveMoreContext":"\uD83D\uDDE3\uFE0F Feel free to talk to give me more context.","goBackToTicket":"Revenir au billet","instructions":{"allowAccessOnPrompt":"<bold>Autorisez l\'acc\xe8s</bold> \xe0 la cam\xe9ra et au micro lorsque demand\xe9.","multiplePhotos":"Prenez <bold>une ou plusieurs photos</bold> pour donner plus de d\xe9tails.","privacyPolicy":"En continuant, vous acceptez notre <bold>Politique de confidentialit\xe9</bold>.","reviewAndSendAudios":"<bold>V\xe9rifiez vos audios</bold>, et ils seront envoy\xe9s automatiquement \xe0 nous.","reviewAndSendPhotos":"<bold>Validez vos photos</bold>, et elles nous seront envoy\xe9es automatiquement.","reviewAndSendVideos":"<bold>Validez vos vid\xe9os</bold>, et elles nous seront envoy\xe9es automatiquement.","screenShareInstruction":"S\xe9lectionnez l\'\xe9cran ou la fen\xeatre que vous souhaitez enregistrer.","selectScreenshare":"Appuyez sur Enregistrer mon \xe9cran et s\xe9lectionnez l\'\xe9cran ou la fen\xeatre que vous souhaitez enregistrer.","speakClearly":"<bold>Parlez clairement</bold> et dites ce que vous devez transmettre.","speakDuringRecord":"Vous pouvez parler pendant l\'enregistrement pour ajouter des d\xe9tails.","stopScreenOnFinish":"Appuyez sur le bouton Stop lorsque vous avez termin\xe9. La vid\xe9o nous sera envoy\xe9e automatiquement.","tapAudioButton":"<bold>Appuyez sur le bouton d\'enregistrement</bold> pour commencer \xe0 enregistrer votre message audio.","tapStopVideoButton":"<bold>Appuyez sur Arr\xeat</bold> lorsque vous avez termin\xe9.","tapVideoButton":"<bold>Appuyez sur Enregistrer</bold>. Pensez \xe0 commenter.","videoSpeech":"Vous pouvez <bold>parler pendant</bold> l\'enregistrement pour ajouter des d\xe9tails."},"limit":"Enregistrement vid\xe9o limit\xe9 \xe0 5 min.","logIn":"Se connecter","loggedAs":"Connect\xe9 en tant que","mediaCount_one":"{{ count }} m\xe9dia","mediaCount_other":"{{ count }} m\xe9dias","mediaSent_one":"Votre m\xe9dia a \xe9t\xe9 envoy\xe9","mediaSent_other":"Votre m\xe9dia a \xe9t\xe9 envoy\xe9","mySuggestion":"My suggestion","noCameraAccess":"Pas d\'acc\xe8s \xe0 la cam\xe9ra","noCameraAccessDescription":"Pas d\'acc\xe8s \xe0 la cam\xe9ra Autoriser l\'acc\xe8s \xe0 la cam\xe9ra dans votre navigateur.","noCameraAndMicrophoneAccess":"Pas d\'acc\xe8s \xe0 la cam\xe9ra et au microphone","noCameraAndMicrophoneAccessDescription":"Pas d\'acc\xe8s \xe0 la cam\xe9ra et au microphone Autoriser l\'acc\xe8s au microphone et \xe0 la cam\xe9ra dans votre navigateur.","noMicrophoneAccess":"Pas d\'acc\xe8s au microphone","noMicrophoneAccessDescription":"Pas d\'acc\xe8s au microphone Autoriser l\'acc\xe8s au microphone dans votre navigateur.","okay":"D\'accord","openThread":"Ouvrir le fil de discussion","permissionDeniedDescription":"Sans acc\xe8s \xe0 la cam\xe9ra et au microphone, vous ne pouvez pas prendre de photos ou de vid\xe9os \xe0 partager avec l\'\xe9quipe d\'assistance. Veuillez accorder l\'acc\xe8s dans les param\xe8tres de votre navigateur.","permissionDeniedTitle":"Quelque chose s\'est mal pass\xe9 !","photoInstructionsTitle":"Pr\xeat \xe0 prendre une photo ?","recordNewMedia":"Record new media","replyAttached":"Votre r\xe9ponse a \xe9t\xe9 jointe","scanQRCode":"Scannez ce code QR avec un appareil compatible.","screenShareInstructionsTitle":"Pr\xeat \xe0 partager votre \xe9cran ?","screenTitle":"Pr\xeat \xe0 capturer votre \xe9cran ?","send":"Envoyer","sendElements_one":"Envoyer la {{ type }}","sendElements_other":"Envoyer {{ count }} \xe9l\xe9ments","showQrCode":"Afficher le QR code","startByClickingOnTheButton":"Start by clicking on the round button below! \uD83D\uDC47","startScreenRecording":"D\xe9marrer l\'enregistrement de l\'\xe9cran","startScreenShareButton":"Enregistrer \xe9cran","stopScreenShareButton":"Stop enregistrement","submissionDescription":"Votre photo/vid\xe9o a \xe9t\xe9 envoy\xe9e avec succ\xe8s. Nous l\'examinerons et reviendrons vers vous bient\xf4t.","submissionTitle":"Merci pour votre soumission !","switchToMobileDescription":"Profitez d\'une exp\xe9rience encore plus pratique en utilisant votre t\xe9l\xe9phone pour prendre des photos et enregistrer des vid\xe9os.","switchToMobileTitle":"Passez sur votre mobile","takeNewElement":"Prendre une nouvelle {{ type }}","thanksForYourMedia":"Thanks for your media!","upload":"Importer","useDesktopVersion":"Continuer","videoBotError":"Sorry, an error has occured.","videoBotThinking":"Thinking...","videoInstructionsTitle":"Pr\xeat \xe0 enregistrer une vid\xe9o ?","waitVideo":"Cela peut prendre jusqu\'\xe0 15 secondes pour qu\'une vid\xe9o soit pr\xeate.","yourMedia":"Your media"},"recordingPopup":{"dismiss":"Fermer","recordingStartText":"Cet appel sera enregistr\xe9 sous peu. Si vous pr\xe9f\xe9rez ne pas \xeatre enregistr\xe9, vous \xeates libre de quitter l\'appel \xe0 tout moment.","recordingStartTitle":"L\'enregistrement va commencer."},"requestAccess":{"admit":"Accepter","defaultName":"Un utilisateur","deny":"Refuser","wantToJoin":"{{name}} souhaite rejoindre!"},"requestDevice":{"askForDevice":"Demander l\'activation de {{device}}","declined":"Votre requ\xeate a \xe9t\xe9 refus\xe9.","deviceActivated":"{{device}} activ\xe9","deviceActivationDeclined":"{{device}} - activation refus\xe9e","request":"{{user}} voudrait que vous partagiez votre {{device}}","requestInput":"Demander l\'activation","timedOut":"Votre requ\xeate n\'a pas eu de r\xe9ponse","userDeclined":"{{user}} a d\xe9clin\xe9 votre requ\xeate.","userWouldLikeYouToActivateYourDevice":"{{name}} souhaite que vous activiez votre {{device}}.","waitingForDevice":"En attente du {{device}} de {{name}}"},"settings":{"callSettings":"Call settings","devices":"Appareils","enableVideo":"Enable video","help":"Aide","helpCenter":"Acc\xe9der au centre d\'aide","language":"Langage","manageRecording":"Manage recording","preferences":"Pr\xe9f\xe9rences","selectYourCamera":"S\xe9lectionnez votre cam\xe9ra pr\xe9f\xe9r\xe9","selectYourLanguage":"S\xe9lectionnez votre langue pr\xe9f\xe9r\xe9e","selectYourMicrophone":"S\xe9lectionnez votre microphone pr\xe9f\xe9r\xe9","startRecording":"Start recording","stopRecording":"Stop recording","title":"Param\xe8tres","tools":"Tools"},"shareLink":{"failed":"Une erreur est survenue pendant l\'envoi du lien","invalid":"Lien invalide","invoice":"{{user}} vous a envoy\xe9 une facture.","pay":"Payer","poweredBy":"Propos\xe9 par","sentToUser":"Lien envoy\xe9 \xe0 {{user}}","sentToUsers":"Lien envoy\xe9 aux participants","title":"Partager un lien","title2":"Partager un lien"},"sharedHistory":{"shared":"Partag\xe9 avec vous"},"snapshot":{"aSnapshotHasBeenShared":"Un instantan\xe9 a \xe9t\xe9 partag\xe9.","error":"Une erreur est survenue pendant l\'envoi du snapshot","save":"Sauvegarder l\'image","sentToUser":"Snapshot envoy\xe9 \xe0 {{user}}","sentToUsers":"Snapshot envoy\xe9 aux participants.","shared":"Snapshot envoy\xe9.","title":"Snapshot"},"videoMenu":{"blockedCamera":"Votre cam\xe9ra est bloqu\xe9.","cameraPermissions":"Please accept camera sharing before accessing these options.","highDef":"Haute d\xe9finition (720p)","lowDef":"Basse d\xe9finition (240p)","sendResolution":"R\xe9solution envoy\xe9e (max)","standardDef":"D\xe9finition standard (480p)","title":"Video"},"virtualBackground":{"blur":"Blur","custom":"Custom","default":"Default","noCustomBackgrounds":"No custom backgrounds yet. Please contact your admin.","none":"None","setBackground":"Mettre l\'arri\xe8re plan","title":"Arri\xe8re plan virtuel"},"youtube":{"description":"Share a YouTube video with other participants.","invalid":"URL YouTube invalide","share":"Regarder maintenant","title":"Regardons Ensemble","url":"URL YOUTUBE"}}');
|
|
65
|
+
$32156cf38812b83d$exports = JSON.parse('{"audioMenu":{"blockedMicrophone":"Votre micro est bloqu\xe9.","microphonePermissions":"Please accept microphone sharing before accessing these options.","title":"Audio"},"blockedFeature":{"descriptionConnected":"Vous n\'avez pas acc\xe8s \xe0 cette fonctionnalit\xe9. Souscrivez au plan Pro pour d\xe9bloquer toutes les fonctionnalit\xe9s de SnapCall.","descriptionGuest":"Vous participez \xe0 un appel cr\xe9\xe9 avec la version gratuite de SnapCall. Cette fonctionnalit\xe9 n\'est disponible qu\'avec une version Pro.","dismissConnected":"Souscrire \xe0 Pro","dismissGuest":"D\'accord","titleConnected":"Souscrire au plan Pro","titleGuest":"Fonctionnalit\xe9 non disponible"},"common":{"new":"nouveau"},"copyLink":{"copied":"Lien copi\xe9 dans le presse-papier","copy":"Copier","description":"Copier le lien dans le presse-papiers","error":"Une erreur est survenue pendant la copie du lien dans le presse-papier","title":"Copier le lien"},"endView":{"addAdditionalMedia":"Ajouter des m\xe9dias suppl\xe9mentaires","allowsYouToShareMoreMedia":"Cette option vous permet de partager un ou plusieurs m\xe9dias pour ajouter plus de contexte.","callEnded":"Cet appel est termin\xe9","callIsOver":"Cet appel est termin\xe9 ou supprim\xe9","callLeft":"Vous avez quitt\xe9 l\'appel","callNoLongerActive":"Cet appel n\u2019est plus actif. Merci de votre participation.","full":"Impossible de rejoindre l\'appel","fullDescription":"Limite d\'utilisateurs atteinte. Merci de rejoindre l\'appel ult\xe9rieurement.","goBack":"Retourner dans l\'appel","howWasYourExperience":"Comment s\'est d\xe9roul\xe9e votre exp\xe9rience ?","ifMistakeRejoin":"S\'il s\'agit d\'une erreur, vous pouvez retourner dans l\'appel en utilisant le bouton ci-dessous.","invalidLink":"Lien invalide","invalidOrExpired":"Ce lien n\'est pas valide ou a expir\xe9.","openDashboard":"Ouvrir le dashboard","pleaseRateYourExperienceBelow":"Veuillez \xe9valuer votre exp\xe9rience ci-dessous","thankYouForYourFeedback":"Nous vous remercions pour votre avis.","tooLate":"Vous \xeates arriv\xe9 trop tard","yourFeedbackHelpsUs":"Vos commentaires nous aident \xe0 nous am\xe9liorer. A bient\xf4t !"},"gdpr":{"recordedWarning":"Pour am\xe9liorer la qualit\xe9 de notre service, cet appel va \xeatre enregistr\xe9."},"greeting":{"askToJoin":"Demander \xe0 rejoindre","askingLetIn":"Demande de participation...","cameraDisabled":"Cam\xe9ra d\xe9sactiv\xe9e","cameraEnabled":"Cam\xe9ra activ\xe9e","canceledCallRequest":"La demande d\'appel sera annul\xe9e et vous serez redirig\xe9 vers la page de planification des appels.","cantJoinCall":"Vous ne pouvez pas rejoindre cet appel","cantWait":"Vous ne souhaitez pas attendre ?","cantWaitLeaveMessage":"Vous ne pouvez pas attendre ? Vous pouvez laisser un message et vous serez contact\xe9 dans les plus brefs d\xe9lais.","clickOnLock":"Cliquez sur l\'ic\xf4ne de verrouillage <1></1> dans la barre de votre navigateur.","footerDescription":"D\xe9couvrez SnapCall, ajoutez de la vid\xe9o en temps r\xe9el \xe0 n\'importe quelle plateforme, produit ou service.","footerTitle":"Propuls\xe9 par SnapCall","leaveMessage":"Laisser un message","mainTitle":"Bienvenue sur SnapCall","mediaDenied":"Acc\xe8s au microphone et \xe0 la cam\xe9ra refus\xe9","microphoneDisabled":"Microphone d\xe9sactiv\xe9","microphoneEnabled":"Microphone activ\xe9","name":"Nom","nameDescription":"Ce nom sera affich\xe9 \xe0 tous les participants","namePlaceholder":"Ex. Lucie ou Pierre","nameSubmit":"Rejoindre la conversation","recordVideo":"Enregistrer une vid\xe9o","recordVoice":"Enregistrer un message vocal","requestACall":"Solliciter un appel maintenant","scheduleACall":"Planifier un appel","setting":"Param\xe8tres","sideDescription":"Veuillez entrer votre nom et configurer votre cam\xe9ra et microphone.","sideTitle":"C\'est bient\xf4t votre tour !","someoneDenied":"Quelqu\'un lors de l\'appel a refus\xe9 votre demande de participation.","takeFewMinute":"Cela peut prendre quelques minutes selon la disponibilit\xe9 des participants.","whatYouCanDo":"Voici ce que vous pouvez faire","youWillJoinWhenSomeoneLetsYou":"Votre acc\xe8s \xe0 l\'appel sera autoris\xe9 par un membre de l\'\xe9quipe {{ companyName }}."},"header":{"free":"Version gratuite"},"iframe":{"featureNotAvailableInContext":"This feature is not available in the current context."},"invitePeople":{"PublicLink":"Lien public","addEmailToInvite":"Ajoutez un e-mail pour inviter.","addEmails":"Ajouter des e-mails...","copyCallLinkDescription":"Copiez ce lien et envoyez-le \xe0 toute personne que vous souhaitez inviter \xe0 rejoindre l\'appel.","copyClipLinkDescription":"Copiez ce lien et envoyez-le \xe0 toute personne que vous souhaitez inviter \xe0 enregistrer un clip.","email":"Email","emailPlaceholder":"Ex. jean@acme.com","emailsOrNumberPlaceholder":"Par exemple: john@acme.com ou +33612345678","error":"\xc9chec de l\'envoi, veuillez r\xe9essayer plus tard.","invalidEmail":"Format d\'email invalide.","invalidEmailOrNumber":"Format d\'email ou de num\xe9ro invalide.","invitationSentTo_one":"Envoy\xe9 \xe0 {{ name }}","invitationSentTo_other":"Envoy\xe9 \xe0 {{ name }} et {{ otherEmailsCount }}+","invite":"Inviter","inviteByEmail":"Inviter par email","inviteByEmailOrNumber":"Inviter par e-mail ou SMS","inviteCall":"Inviter \xe0 rejoindre l\'appel","inviteCallDefaultMessage":"Vous \xeates invit\xe9 \xe0 rejoindre notre appel vid\xe9o. Cliquez sur le lien pour vous connecter instantan\xe9ment.","inviteClipAudioDefaultMessage":"Veuillez enregistrer un message audio et nous fournir plus de contexte pour mieux vous aider.","inviteClipDefaultMessage":"Veuillez enregistrer votre clip vid\xe9o et nous fournir plus de contexte pour mieux vous aider.","inviteClipPhotoDefaultMessage":"Veuillez prendre une photo et nous fournir plus de contexte pour mieux vous aider.","inviteClipScreenDefaultMessage":"Veuillez enregistrer votre \xe9cran et nous fournir plus de contexte pour mieux vous aider.","inviteClipVideoDefaultMessage":"Enregistrez votre vid\xe9o et donnez-nous plus de d\xe9tails pour que nous puissions mieux vous aider.","invitePeople":"Inviter des personnes","inviteRecordAudio":"Enregistrer un audio","inviteRecordClip":"Inviter \xe0 enregistrer un clip","inviteRecordPhoto":"Prendre une photo","inviteRecordScreen":"Enregistrer l\'\xe9cran","inviteRecordVideo":"Enregistrer une vid\xe9o","joinTheCall":"Rejoindre l\u2019appel","linkToJoinCall":"Lien pour rejoindre l\'appel","linkToRecordAClip":"Lien pour enregistrer un clip","message":"Message","sharePublicLink":"Partager le lien public"},"leave":{"endCall":"Terminer l\'appel","leaveCall":"Quitter l\'appel","title":"Quitter"},"loader":{"connection":"Connexion..."},"menu":{"new":"NOUVEAU","openNewTab":"Ouvrir un nouvel onglet","pictureInPicture":"Picture-in-Picture","quickConnect":"Quick Connect","screenSharing":"Partage d\'\xe9cran","startRecord":"Enregistrer l\'appel","stopRecord":"Arr\xeater l\'enregistrement","title":"Menu"},"misc":{"accept":"Accepter","add":"Ajouter","audio":"Audio","camera":"Cam\xe9ra","cancel":"Annuler","confirm":"Confirmer","decline":"D\xe9cliner","download":"T\xe9l\xe9charger","from":"Depuis","microphone":"Micro","open":"Ouvrir","pdf":"PDF","photo":"Photo","proceed":"Proc\xe9der","remove":"Enlever","screen":"\xc9cran","screenshot":"Capture d\'\xe9cran","someone":"Quelqu\'un","speaker":"Haut-parleur","user":"Utilisateur","video":"Vid\xe9o","you":"Vous"},"networkIssue":{"description":"The clip information may be damaged.","title":"Network issue"},"notifications":{"aQuickRefreshShouldFix":"A quick refresh should get things back on track","agentJoinError":"Une erreur est survenue en essayant de rejoindre la salle en tant qu\'agent","allow":"Allow","blockedMicrophonePopup":"SnapCall a besoin d\'acc\xe9der \xe0 votre cam\xe9ra et micro. Cliquez sur l\'ic\xf4ne de cam\xe9ra bloqu\xe9e dans la barre d\'adresse du navigateur.","blockedMicrophonePopupTitle":"Votre cam\xe9ra et micro sont bloqu\xe9s","cameraError":"Une erreur est survenue pendant l\'activation de la cam\xe9ra","cameraRotateError":"Une erreur est survenue pendant la rotation de la cam\xe9ra","close":"Fermer","connectedTo":"Connect\xe9 \xe0 {{name}}","criticalError":"Une erreur critique est survenue (erreur {{code}}).","error":"Erreur","errorOccuredCode":"Une erreur s\'est produite (erreur {{code}}).","failedToDisableVideo":"Failed to disable video","failedToEnableMicrophone":"Failed to enable microphone","failedToEnableVideo":"Failed to enable video","failedToMuteUnmuteMicrophone":"Failed to mute / unmute the microphone","invitationSentToFailed":"L\'envoi \xe0 {{ name }} a \xe9chou\xe9.","locationIsBlocked":"Location is blocked","locationIsRequired":"Location is required","microphoneError":"Une erreur est survenue pendant l\'activation du micro","networkStability":"Network stability","noCamera":"Aucune cam\xe9ra disponible","permissionToShareScreenDenied":"Permission to share screen denied","pleaseEnableLocation":"Please enable location services in your settings.","recording":"Enregistrement en cours","recordingStopped":"Recording stopped","reload":"Recharger","screensharingError":"Une erreur est survenue pendant l\'activation du partage d\'\xe9cran","somethingWentWrong":"Oops! Something went wrong","unableToSwitchCamera":"Unable to switch camera","unableToUnzoom":"Unable to unzoom","unableToZoom":"Unable to zoom","uploadError":"Une erreur s\'est produite pendant le t\xe9l\xe9chargement, veuillez r\xe9essayer plus tard.","uploadFailed":"Upload failed","yourInternetConnectionIsUnstable":"Your internet connection is unstable"},"quickConnect":{"scan":"Scannez ce QR code avec votre t\xe9l\xe9phone pour ouvrir l\'appel.","scanTitle":"Scannez le QR Code","title":"Quick Connect"},"recorder":{"addMore":"Ajouter plus","addNewClip":"Ajouter un nouveau clip","allowAccess":"Autoriser l\'acc\xe8s","allowCamMicAccess":"Autoriser acc\xe8s cam\xe9ra/micro","allowScreenShareAccess":"Autoriser l\'acc\xe8s au partage d\'\xe9cran","attachElements_one":"Joindre {{ type }} au ticket","attachElements_other":"Joindre {{ count }} \xe9l\xe9ments","audioInstructionsTitle":"Pr\xeat \xe0 enregistrer un message vocal\xa0?","audioLevelNotification":{"noSound":{"description":"Assurez-vous que votre microphone est activ\xe9.","title":"Aucun son d\xe9tect\xe9."},"shortVideo":{"description":"Cette vid\xe9o semble assez courte, ne fournit pas assez de d\xe9tails.","title":"Vid\xe9o courte."},"spokenWordsQuestion":{"description":"Votre vid\xe9o offre-t-elle une explication d\xe9taill\xe9e et claire ?","title":"Avez-vous tout expliqu\xe9 ?"},"spokenWordsWarning":{"description":"La vid\xe9o ne comprend pratiquement aucun mot prononc\xe9.","title":"Aucun mot prononc\xe9."}},"audioLevelToast":{"continueSpeaking":"Continuez \xe0 parler pour expliquer.","noSound":"Aucun son d\xe9tect\xe9.","rememberSpeaking":"Veuillez parler \xe0 voix-haute."},"chooseWhatYouWantToShare":"Choisissez ce que vous souhaitez partager","chooseWhatYouWantToShareDescription":"S\xe9lectionnez l\'\xe9cran ou l\'onglet que vous souhaitez partager et commencez l\'enregistrement.","clipCount_one":"{{ count }} clip","clipCount_other":"{{ count }} clips","clipSubmissionDescription":"Merci d\'utiliser SnapCall.","clipSubmissionTitle_one":"Votre clip a \xe9t\xe9 envoy\xe9","clipSubmissionTitle_other":"Vos clips ont \xe9t\xe9 envoy\xe9s","confirmRemovalDescription":"Voulez-vous vraiment supprimer cette photo/vid\xe9o ? Cette action ne peut pas \xeatre annul\xe9e.","confirmRemovalTitle":"Confirmer la suppression","elementBeingProcessed":"Veuillez patienter un moment pendant que votre {{ type }} est en cours de traitement...","elementCaptureSuccess":"{{ type }} captur\xe9(e) avec succ\xe8s","elementRecordedAndAttached":"Votre clip a \xe9t\xe9 envoy\xe9 et joint au fil de discussion.","feelFreeToTalkGiveMoreContext":"\uD83D\uDDE3\uFE0F Feel free to talk to give me more context.","goBackToTicket":"Revenir au billet","instructions":{"allowAccessOnPrompt":"<bold>Autorisez l\'acc\xe8s</bold> \xe0 la cam\xe9ra et au micro lorsque demand\xe9.","multiplePhotos":"Prenez <bold>une ou plusieurs photos</bold> pour donner plus de d\xe9tails.","privacyPolicy":"En continuant, vous acceptez notre <bold>Politique de confidentialit\xe9</bold>.","reviewAndSendAudios":"<bold>V\xe9rifiez vos audios</bold>, et ils seront envoy\xe9s automatiquement \xe0 nous.","reviewAndSendPhotos":"<bold>Validez vos photos</bold>, et elles nous seront envoy\xe9es automatiquement.","reviewAndSendVideos":"<bold>Validez vos vid\xe9os</bold>, et elles nous seront envoy\xe9es automatiquement.","screenShareInstruction":"S\xe9lectionnez l\'\xe9cran ou la fen\xeatre que vous souhaitez enregistrer.","selectScreenshare":"Appuyez sur Enregistrer mon \xe9cran et s\xe9lectionnez l\'\xe9cran ou la fen\xeatre que vous souhaitez enregistrer.","speakClearly":"<bold>Parlez clairement</bold> et dites ce que vous devez transmettre.","speakDuringRecord":"Vous pouvez parler pendant l\'enregistrement pour ajouter des d\xe9tails.","stopScreenOnFinish":"Appuyez sur le bouton Stop lorsque vous avez termin\xe9. La vid\xe9o nous sera envoy\xe9e automatiquement.","tapAudioButton":"<bold>Appuyez sur le bouton d\'enregistrement</bold> pour commencer \xe0 enregistrer votre message audio.","tapStopVideoButton":"<bold>Appuyez sur Arr\xeat</bold> lorsque vous avez termin\xe9.","tapVideoButton":"<bold>Appuyez sur Enregistrer</bold>. Pensez \xe0 commenter.","videoSpeech":"Vous pouvez <bold>parler pendant</bold> l\'enregistrement pour ajouter des d\xe9tails."},"limit":"Enregistrement vid\xe9o limit\xe9 \xe0 5 min.","logIn":"Se connecter","loggedAs":"Connect\xe9 en tant que","mediaCount_one":"{{ count }} m\xe9dia","mediaCount_other":"{{ count }} m\xe9dias","mediaSent_one":"Votre m\xe9dia a \xe9t\xe9 envoy\xe9","mediaSent_other":"Votre m\xe9dia a \xe9t\xe9 envoy\xe9","mySuggestion":"My suggestion","noCameraAccess":"Pas d\'acc\xe8s \xe0 la cam\xe9ra","noCameraAccessDescription":"Pas d\'acc\xe8s \xe0 la cam\xe9ra Autoriser l\'acc\xe8s \xe0 la cam\xe9ra dans votre navigateur.","noCameraAndMicrophoneAccess":"Pas d\'acc\xe8s \xe0 la cam\xe9ra et au microphone","noCameraAndMicrophoneAccessDescription":"Pas d\'acc\xe8s \xe0 la cam\xe9ra et au microphone Autoriser l\'acc\xe8s au microphone et \xe0 la cam\xe9ra dans votre navigateur.","noMicrophoneAccess":"Pas d\'acc\xe8s au microphone","noMicrophoneAccessDescription":"Pas d\'acc\xe8s au microphone Autoriser l\'acc\xe8s au microphone dans votre navigateur.","okay":"D\'accord","openThread":"Ouvrir le fil de discussion","permissionDeniedDescription":"Sans acc\xe8s \xe0 la cam\xe9ra et au microphone, vous ne pouvez pas prendre de photos ou de vid\xe9os \xe0 partager avec l\'\xe9quipe d\'assistance. Veuillez accorder l\'acc\xe8s dans les param\xe8tres de votre navigateur.","permissionDeniedTitle":"Quelque chose s\'est mal pass\xe9 !","photoInstructionsTitle":"Pr\xeat \xe0 prendre une photo ?","recordNewMedia":"Record new media","replyAttached":"Votre r\xe9ponse a \xe9t\xe9 jointe","scanQRCode":"Scannez ce code QR avec un appareil compatible.","screenShareInstructionsTitle":"Pr\xeat \xe0 partager votre \xe9cran ?","screenTitle":"Pr\xeat \xe0 capturer votre \xe9cran ?","send":"Envoyer","sendElements_one":"Envoyer la {{ type }}","sendElements_other":"Envoyer {{ count }} \xe9l\xe9ments","showQrCode":"Afficher le QR code","startByClickingOnTheButton":"Start by clicking on the round button below! \uD83D\uDC47","startScreenRecording":"D\xe9marrer l\'enregistrement de l\'\xe9cran","startScreenShareButton":"Enregistrer \xe9cran","stopScreenShareButton":"Stop enregistrement","submissionDescription":"Votre photo/vid\xe9o a \xe9t\xe9 envoy\xe9e avec succ\xe8s. Nous l\'examinerons et reviendrons vers vous bient\xf4t.","submissionTitle":"Merci pour votre soumission !","switchToMobileDescription":"Profitez d\'une exp\xe9rience encore plus pratique en utilisant votre t\xe9l\xe9phone pour prendre des photos et enregistrer des vid\xe9os.","switchToMobileTitle":"Passez sur votre mobile","takeNewElement":"Prendre une nouvelle {{ type }}","thanksForYourMedia":"Thanks for your media!","upload":"Importer","useDesktopVersion":"Continuer","videoBotError":"Sorry, an error has occured.","videoBotThinking":"Thinking...","videoInstructionsTitle":"Pr\xeat \xe0 enregistrer une vid\xe9o ?","waitVideo":"Cela peut prendre jusqu\'\xe0 15 secondes pour qu\'une vid\xe9o soit pr\xeate.","yourMedia":"Your media"},"recordingPopup":{"dismiss":"Fermer","recordingStartText":"Cet appel sera enregistr\xe9 sous peu. Si vous pr\xe9f\xe9rez ne pas \xeatre enregistr\xe9, vous \xeates libre de quitter l\'appel \xe0 tout moment.","recordingStartTitle":"L\'enregistrement va commencer."},"requestAccess":{"admit":"Accepter","defaultName":"Un utilisateur","deny":"Refuser","wantToJoin":"{{name}} souhaite rejoindre!"},"requestDevice":{"askForDevice":"Demander l\'activation de {{device}}","declined":"Votre requ\xeate a \xe9t\xe9 refus\xe9.","deviceActivated":"{{device}} activ\xe9","deviceActivationDeclined":"{{device}} - activation refus\xe9e","request":"{{user}} voudrait que vous partagiez votre {{device}}","requestInput":"Demander l\'activation","timedOut":"Votre requ\xeate n\'a pas eu de r\xe9ponse","userDeclined":"{{user}} a d\xe9clin\xe9 votre requ\xeate.","userWouldLikeYouToActivateYourDevice":"{{name}} souhaite que vous activiez votre {{device}}.","waitingForDevice":"En attente du {{device}} de {{name}}"},"settings":{"callSettings":"Call settings","devices":"Appareils","enableVideo":"Enable video","help":"Aide","helpCenter":"Acc\xe9der au centre d\'aide","language":"Langage","manageRecording":"Manage recording","preferences":"Pr\xe9f\xe9rences","selectYourCamera":"S\xe9lectionnez votre cam\xe9ra pr\xe9f\xe9r\xe9","selectYourLanguage":"S\xe9lectionnez votre langue pr\xe9f\xe9r\xe9e","selectYourMicrophone":"S\xe9lectionnez votre microphone pr\xe9f\xe9r\xe9","startRecording":"Start recording","stopRecording":"Stop recording","title":"Param\xe8tres","tools":"Tools"},"shareLink":{"failed":"Une erreur est survenue pendant l\'envoi du lien","invalid":"Lien invalide","invoice":"{{user}} vous a envoy\xe9 une facture.","pay":"Payer","poweredBy":"Propos\xe9 par","sentToUser":"Lien envoy\xe9 \xe0 {{user}}","sentToUsers":"Lien envoy\xe9 aux participants","title":"Partager un lien","title2":"Partager un lien"},"sharedHistory":{"shared":"Partag\xe9 avec vous"},"snapshot":{"aSnapshotHasBeenShared":"Un instantan\xe9 a \xe9t\xe9 partag\xe9.","error":"Une erreur est survenue pendant l\'envoi du snapshot","save":"Sauvegarder l\'image","sentToUser":"Snapshot envoy\xe9 \xe0 {{user}}","sentToUsers":"Snapshot envoy\xe9 aux participants.","shared":"Snapshot envoy\xe9.","title":"Snapshot"},"videoMenu":{"blockedCamera":"Votre cam\xe9ra est bloqu\xe9.","cameraPermissions":"Please accept camera sharing before accessing these options.","highDef":"Haute d\xe9finition (720p)","lowDef":"Basse d\xe9finition (240p)","sendResolution":"R\xe9solution envoy\xe9e (max)","standardDef":"D\xe9finition standard (480p)","title":"Video"},"virtualBackground":{"blur":"Blur","custom":"Custom","default":"Default","noCustomBackgrounds":"No custom backgrounds yet. Please contact your admin.","none":"None","setBackground":"Mettre l\'arri\xe8re plan","title":"Arri\xe8re plan virtuel"},"youtube":{"description":"Share a YouTube video with other participants.","invalid":"URL YouTube invalide","share":"Regarder maintenant","title":"Regardons Ensemble","url":"URL YOUTUBE"}}');
|
|
66
66
|
|
|
67
67
|
|
|
68
68
|
var $988a925d2edf1eb7$exports = {};
|
|
69
|
-
$988a925d2edf1eb7$exports = JSON.parse('{"audioMenu":{"blockedMicrophone":"Das Mikrofon ist blockiert.","microphonePermissions":"Bitte akzeptieren Sie die gemeinsame Nutzung des Mikrofons, bevor Sie auf diese Optionen zugreifen.","title":"Audio"},"blockedFeature":{"descriptionConnected":"Bei einem kostenlosen Tarif kannst du diese Funktion nicht nutzen. Aktualisieren Sie Ihren Tarif, um alle In-Call-Funktionen nutzen zu k\xf6nnen.","descriptionGuest":"Sie nehmen an einem Anruf teil, der mit einer kostenlosen Version von SnapCall erstellt wurde. Diese Funktion ist nur in einer Pro-Version verf\xfcgbar.","dismissConnected":"Auf Pro upgraden","dismissGuest":"Okay","titleConnected":"Auf Pro upgraden","titleGuest":"Funktion nicht verf\xfcgbar"},"common":{"new":"New"},"copyLink":{"copied":"Link in die Zwischenablage kopiert","copy":"Copy","description":"Link in die Zwischenablage kopieren","error":"Beim Versuch, in die Zwischenablage zu kopieren, ist ein Fehler aufgetreten","title":"LINK KOPIEREN"},"endView":{"addAdditionalMedia":"Add additional media","allowsYouToShareMoreMedia":"This option allows you to share one or more media to add more context.","callEnded":"Der Anruf ist beendet","callIsOver":"Der Anruf ist beendet oder gel\xf6scht","callLeft":"Sie haben den Anruf verlassen","callNoLongerActive":"Dieser Anruf ist nicht mehr aktiv. Danke f\xfcr Ihre Teilnahme.","full":"Sie k\xf6nnen an diesem Anruf nicht teilnehmen","fullDescription":"Das Zimmer ist voll. Bitte versuchen Sie sp\xe4ter, dem Anruf beizutreten.","goBack":"Geh zur\xfcck zum Anruf","howWasYourExperience":"How was your experience?","ifMistakeRejoin":"Wenn dies ein Fehler war, k\xf6nnen Sie \xfcber die Schaltfl\xe4che unten erneut beitreten.","invalidLink":"Ung\xfcltiger Link","invalidOrExpired":"Dieser Link ist ung\xfcltig oder abgelaufen.","openDashboard":"Dashboard \xf6ffnen","pleaseRateYourExperienceBelow":"Please rate your experience below","thankYouForYourFeedback":"Thank you for your feedback.","tooLate":"Du bist zu sp\xe4t gekommen","yourFeedbackHelpsUs":"Your feedback helps us improve. See you soon!"},"gdpr":{"recordedWarning":"Um die Qualit\xe4t unseres Service zu verbessern, wird dieser Anruf aufgezeichnet."},"greeting":{"askToJoin":"Bitten Sie um Beitritt","askingLetIn":"Ich bitte darum, eingelassen zu werden...","cameraDisabled":"Kamera ist aus","cameraEnabled":"Kamera ist an","canceledCallRequest":"Die Anrufanfrage wird storniert und Sie werden auf die Seite zur Anrufplanung weitergeleitet.","cantJoinCall":"Sie k\xf6nnen an diesem Anruf nicht teilnehmen","cantWait":"Kannst du es kaum erwarten?","cantWaitLeaveMessage":"Kannst du es kaum erwarten? Sie k\xf6nnen eine Nachricht hinterlassen und Sie werden so schnell wie m\xf6glich kontaktiert.","clickOnLock":"Klicken Sie in der Leiste Ihres Browsers auf das <1> </1> Schlosssymbol.","footerDescription":"Lernen Sie SnapCall kennen, den einfachsten Weg, um Echtzeitvideos zu einer Plattform, einem Produkt oder einer Dienstleistung hinzuzuf\xfcgen.","footerTitle":"Bereitgestellt von SnapCall","leaveMessage":"Hinterlassen Sie eine Nachricht","mainTitle":"Willkommen bei SnapCall","mediaDenied":"Zugriff auf Mikrofon und Kamera verweigert","microphoneDisabled":"Mikrofon ist aus","microphoneEnabled":"Mikrofon ist an","name":"Nome","nameDescription":"Dieser Name wird allen Teilnehmern des Anrufs angezeigt.","namePlaceholder":"z. B. Lucy oder Peter","nameSubmit":"An der Konversation teilnehmen","recordVideo":"Video aufzeichnen","recordVoice":"Stimme aufnehmen","requestACall":"Fordern Sie einen Anruf an","scheduleACall":"Einen Anruf vereinbaren","setting":"Einstellungen","sideDescription":"Bitte gib deinen Namen ein und passe deine Kamera und dein Mikrofon an","sideTitle":"Halt dich fest, du bist der N\xe4chste!","someoneDenied":"Jemand in dem Anruf hat Ihre Beitrittsanfrage abgelehnt.","takeFewMinute":"Dies kann je nach Verf\xfcgbarkeit der Teilnehmer einige Minuten dauern.","whatYouCanDo":"Folgendes k\xf6nnen Sie tun","youWillJoinWhenSomeoneLetsYou":"Sie nehmen an dem Anruf teil, wenn Sie jemand von {{ companyName }} hereinl\xe4sst."},"header":{"free":"Kostenlose Version"},"iframe":{"featureNotAvailableInContext":"This feature is not available in the current context."},"invitePeople":{"PublicLink":"\xd6ffentlicher Link","addEmailToInvite":"F\xfcgen Sie eine E-Mail zur Einladung hinzu.","addEmails":"E-Mails hinzuf\xfcgen...","copyCallLinkDescription":"Kopieren Sie diesen Link und senden Sie ihn an alle, die Sie zur Teilnahme an der Telefonkonferenz einladen m\xf6chten.","copyClipLinkDescription":"Kopieren Sie diesen Link und senden Sie ihn an alle, die Sie zur Aufnahme eines Clips einladen m\xf6chten.","email":"E-Mail","emailPlaceholder":"Z. B. john@acme.com","emailsOrNumberPlaceholder":"Z. B. john@acme.com oder +33612345678","error":"Fehler beim Senden, bitte versuchen Sie es sp\xe4ter erneut.","invalidEmail":"Ung\xfcltiges E-Mail-Format.","invalidEmailOrNumber":"Ung\xfcltiges E-Mail- oder Zahlenformat.","invitationSentTo_one":"Gesendet an {{ name }}","invitationSentTo_other":"Gesendet an {{ name }} und {{ otherEmailsCount }} +","invite":"Einladen","inviteByEmail":"Per E-Mail einladen","inviteByEmailOrNumber":"Per E-Mail oder SMS einladen","inviteCall":"Zum Telefongespr\xe4ch einladen","inviteCallDefaultMessage":"Hallo! Du bist eingeladen, an unserem Videoanruf teilzunehmen. Klicken Sie auf den Link, um sofort eine Verbindung herzustellen.","inviteClipAudioDefaultMessage":"Hallo! Bitte nehmen Sie jetzt eine Audionachricht auf und geben Sie uns mehr Kontext, um Ihnen besser helfen zu k\xf6nnen.","inviteClipDefaultMessage":"Hallo! Bitte nehmen Sie jetzt Ihr Video auf und geben Sie uns mehr Kontext, um Ihnen besser helfen zu k\xf6nnen.","inviteClipPhotoDefaultMessage":"Hallo! Bitte machen Sie ein Foto und geben Sie uns mehr Kontext, um Ihnen besser helfen zu k\xf6nnen.","inviteClipScreenDefaultMessage":"Hallo! Bitte nehmen Sie jetzt Ihren Bildschirm auf und geben Sie uns mehr Kontext, um Ihnen besser helfen zu k\xf6nnen.","inviteClipVideoDefaultMessage":"Hallo! Bitte nehmen Sie jetzt Ihr Video auf und geben Sie uns mehr Kontext, um Ihnen besser helfen zu k\xf6nnen.","invitePeople":"Leute einladen","inviteRecordAudio":"Nehmen Sie ein Audio auf","inviteRecordClip":"Laden Sie zum Aufnehmen eines Clips ein","inviteRecordPhoto":"Mache ein Foto","inviteRecordScreen":"Nehmen Sie einen Bildschirm auf","inviteRecordVideo":"Nehmen Sie ein Video auf","joinTheCall":"Nehmen Sie an der Telefonkonferenz teil","linkToJoinCall":"Link, um an der Telefonkonferenz teilzunehmen","linkToRecordAClip":"Link zum Aufnehmen eines Clips","message":"Nachricht","sharePublicLink":"\xd6ffentlichen Link teilen"},"leave":{"endCall":"Anruf f\xfcr alle beenden","leaveCall":"Anruf hinterlassen","title":"Verlassen Sie"},"loader":{"connection":"Verbindung wird hergestellt..."},"menu":{"new":"New","openNewTab":"Neuen Tab \xf6ffnen","pictureInPicture":"Bild-im-Bild","quickConnect":"Schnelle Verbindung","screenSharing":"Bildschirm\xfcbertragung","startRecord":"Anruf aufzeichnen","stopRecord":"Aufnahme beenden","title":"Men\xfc"},"misc":{"accept":"Akzeptieren","add":"Add","audio":"Audio","camera":"Kamera","cancel":"Abbrechen","confirm":"Confirm","decline":"R\xfcckgang","download":"Download","from":"vom","microphone":"Mikrofon","open":"\xd6ffnen Sie","photo":"Foto","proceed":"Proceed","remove":"entfernen","screen":"Bildschirm","screenshot":"Bildschirmfoto","someone":"Jemand","speaker":"Sprecher","user":"Nutzer","video":"Video","you":"Du"},"networkIssue":{"description":"The clip information may be damaged.","title":"Network issue"},"notifications":{"aQuickRefreshShouldFix":"A quick refresh should get things back on track","agentJoinError":"Beim Versuch, dem Raum als Agent beizutreten, ist ein Fehler aufgetreten","allow":"Allow","blockedMicrophonePopup":"SnapCall ben\xf6tigt Zugriff auf Ihre Kamera und Ihr Mikrofon. Klicken Sie in der Adressleiste Ihres Browsers auf das Symbol \u201EKamera blockiert\u201C.","blockedMicrophonePopupTitle":"Kamera und Mikrofon sind blockiert","cameraError":"Beim Versuch, die Kamera umzuschalten, ist ein Fehler aufgetreten","cameraRotateError":"Beim Versuch, die Kamera zu drehen, ist ein Fehler aufgetreten","close":"Schlie\xdfen","connectedTo":"Verbunden mit {{name}}","criticalError":"Ein kritischer Fehler ist aufgetreten (Fehler{{code}}).","error":"Fehler ","errorOccuredCode":"Ein Fehler ist aufgetreten (Fehler{{code}}).","failedToDisableVideo":"Failed to disable video","failedToEnableMicrophone":"Failed to enable microphone","failedToEnableVideo":"Failed to enable video","failedToMuteUnmuteMicrophone":"Failed to mute / unmute the microphone","invitationSentToFailed":"Gesendet an {{ name }} fehlgeschlagen.","locationIsBlocked":"Location is blocked","locationIsRequired":"Location is required","microphoneError":"Beim Versuch, das Mikrofon umzuschalten, ist ein Fehler aufgetreten","networkStability":"Network stability","noCamera":"Keine Kamera verf\xfcgbar","permissionToShareScreenDenied":"Permission to share screen denied","pleaseEnableLocation":"Please enable location services in your settings.","recording":"Aufnahme l\xe4uft","recordingStopped":"Recording stopped","reload":" Erneut laden ","screensharingError":"Beim Versuch, die Bildschirm\xfcbertragung umzuschalten, ist ein Fehler aufgetreten","somethingWentWrong":"Oops! Something went wrong","unableToSwitchCamera":"Unable to switch camera","unableToUnzoom":"Unable to unzoom","unableToZoom":"Unable to zoom","uploadError":"Beim Upload ist ein Fehler aufgetreten. Bitte versuchen Sie es sp\xe4ter erneut.","uploadFailed":"Upload failed","yourInternetConnectionIsUnstable":"Your internet connection is unstable"},"quickConnect":{"scan":"Scannen Sie diesen QR-Code mit Ihrer Handykamera, um den Anruf zu \xf6ffnen.","scanTitle":"QR-Code scannen","title":"Schnelle Verbindung"},"recorder":{"addMore":"Weitere hinzuf\xfcgen","addNewClip":"Neuen Clip hinzuf\xfcgen","allowAccess":"Zugriff erlauben","allowCamMicAccess":"Zugriff auf Kamera/Mikrofon erlauben","allowScreenShareAccess":"Zugriff auf Bildschirm\xfcbertragung zulassen","attachElements_one":"Dem Ticket {{ type }} beif\xfcgen","attachElements_other":"{{ count }}Elemente anh\xe4ngen","audioInstructionsTitle":"Bereit, eine Sprachnachricht aufzunehmen?","audioLevelNotification":{"noSound":{"description":"Vergewissern Sie sich, dass Ihr Mikrofon aktiviert ist.","title":"Es wurde kein Ton erkannt."},"shortVideo":{"description":"Dieses Video ist zu kurz, um den Kontext zu verstehen.","title":"Kurzes Video."},"spokenWordsQuestion":{"description":"Enth\xe4lt Ihr Video gen\xfcgend gesprochene Details?","title":"Gesprochene Worte."},"spokenWordsWarning":{"description":"Der Clip enth\xe4lt kaum gesprochene Worte.","title":"Keine gesprochenen Worte."}},"audioLevelToast":{"continueSpeaking":"Sprechen Sie weiter, um einen klareren Kontext zu erhalten.","noSound":"Es wurde kein Ton erkannt.","rememberSpeaking":"Denken Sie daran, zu sprechen, um den Kontext zu vermitteln."},"chooseWhatYouWantToShare":"W\xe4hle aus, was du teilen m\xf6chtest","chooseWhatYouWantToShareDescription":"W\xe4hlen Sie den Bildschirm oder die Registerkarte aus, die Sie teilen m\xf6chten, und starten Sie die Aufnahme.","clipCount_one":"{{ count }}Clip","clipCount_other":"{{ count }}Clips","clipSubmissionDescription":"Vielen Dank, dass Sie SnapCall verwenden.","clipSubmissionTitle_one":"Ihr Clip wurde gesendet","clipSubmissionTitle_other":"Deine Clips wurden gesendet","confirmRemovalDescription":"Bist du sicher, dass du dieses Foto/Video l\xf6schen m\xf6chtest? Diese Aktion kann nicht r\xfcckg\xe4ngig gemacht werden.","confirmRemovalTitle":"L\xf6schen best\xe4tigen","elementBeingProcessed":"Bitte warten Sie, Ihre {{ type }} wird bearbeitet...","elementCaptureSuccess":"{{ type }}erfolgreich erfasst","elementRecordedAndAttached":"Ihr Clip wurde gesendet und an den Thread angeh\xe4ngt.","feelFreeToTalkGiveMoreContext":"\uD83D\uDDE3\uFE0F Feel free to talk to give me more context.","goBackToTicket":"Gehe zur\xfcck zum Ticket","instructions":{"allowAccessOnPrompt":"<bold>Erlauben Sie den Zugriff auf Kamera und Mikrofon</bold>, wenn Sie dazu aufgefordert werden.","multiplePhotos":"Nehmen Sie ein oder mehrere <bold> Fotos auf, </bold> um weitere Informationen zu erhalten, und \xfcberpr\xfcfen Sie es dann.","privacyPolicy":"Indem Sie fortfahren, stimmen Sie unseren <bold> Datenschutzbestimmungen zu</bold>.","reviewAndSendAudios":"<bold>\xdcberpr\xfcfe deine Audios </bold> und sie werden automatisch an uns gesendet.","reviewAndSendPhotos":"<bold>Best\xe4tigen Sie Ihre Fotos </bold> und sie werden automatisch an uns gesendet.","reviewAndSendVideos":"<bold>\xdcberpr\xfcfe deine Videos </bold> und sie werden automatisch an uns gesendet.","screenShareInstruction":"W\xe4hlen Sie den Bildschirm oder das Fenster aus, das Sie aufnehmen m\xf6chten.","selectScreenshare":"Tippen Sie auf Meinen Bildschirm aufnehmen und w\xe4hlen Sie den Bildschirm oder das Fenster aus, das Sie aufnehmen m\xf6chten.","speakClearly":"<bold>Sprechen Sie deutlich </bold> und sagen Sie, was Sie vermitteln m\xfcssen.","speakDuringRecord":"Sie k\xf6nnen w\xe4hrend der Aufnahme sprechen, um Details hinzuzuf\xfcgen.","stopScreenOnFinish":"Dr\xfccken Sie die Stopp-Taste, wenn Sie fertig sind. Das Video wird automatisch an uns gesendet.","tapAudioButton":"<bold>Tippen Sie auf die Aufnahmetaste</bold>, um mit der Aufnahme Ihrer Audionachricht zu beginnen.","tapStopVideoButton":"<bold>Tippe auf Stopp</bold>, wenn du fertig bist.","tapVideoButton":"<bold>Tippen Sie auf die Aufnahmetaste</bold>, um zu beginnen, und Sie k\xf6nnen gerne einen Kommentar abgeben.","videoSpeech":"Sie k\xf6nnen w\xe4hrend </bold> der Aufnahme <bold> sprechen, um zus\xe4tzliche Informationen bereitzustellen."},"limit":"Videoaufnahme begrenzt auf 5 min.","logIn":"LOG IN","loggedAs":"Eingeloggt als","mediaCount_one":"{{ count }}Medien","mediaCount_other":"{{ count }}Medien","mediaSent_one":"Ihre Medien wurden gesendet","mediaSent_other":"Ihre Medien wurden gesendet","mySuggestion":"My suggestion","noCameraAccess":"Kein Kamerazugriff","noCameraAccessDescription":"Kein Kamerazugriff Erlauben Sie den Kamerazugriff in Ihrem Browser.","noCameraAndMicrophoneAccess":"Kein Kamera- und Mikrofonzugang","noCameraAndMicrophoneAccessDescription":"Kein Zugriff auf Kamera und Mikrofon Erlauben Sie den Zugriff auf Mikrofon und Kamera in Ihrem Browser.","noMicrophoneAccess":"Kein Mikrofonzugang","noMicrophoneAccessDescription":"Kein Mikrofonzugriff Erlauben Sie den Mikrofonzugriff in Ihrem Browser.","okay":"Okay","openThread":"Thread \xf6ffnen","permissionDeniedDescription":"Ohne Zugriff auf Kamera und Mikrofon k\xf6nnen Sie keine Fotos oder Videos aufnehmen, um sie mit dem Support-Team zu teilen. Bitte gew\xe4hren Sie Zugriff in Ihren Browsereinstellungen.","permissionDeniedTitle":"Etwas ist schief gelaufen!","photoInstructionsTitle":"Bereit, ein Foto zu machen?","recordNewMedia":"Record new media","replyAttached":"Ihre Antwort wurde angeh\xe4ngt","scanQRCode":"Scannen Sie diesen QR-Code mit einem kompatiblen Ger\xe4t.","screenShareInstructionsTitle":"Bereit, deinen Bildschirm zu teilen?","screenTitle":"Bereit, deinen Bildschirm aufzunehmen?","send":"Absschicken","sendElements_one":"Senden {{ type }}","sendElements_other":"{{ count }}Elemente senden","showQrCode":"QR Code anzeigen","startByClickingOnTheButton":"Start by clicking on the round button below! \uD83D\uDC47","startScreenRecording":"Bildschirmaufnahme starten","startScreenShareButton":"Meinen Bildschirm aufnehmen","stopScreenShareButton":"Aufnahme beenden","submissionDescription":"Ihr Foto/Video wurde erfolgreich eingereicht. Wir werden es \xfcberpr\xfcfen und uns in K\xfcrze bei Ihnen melden.","submissionTitle":"Danke f\xfcr deine Einreichung!","switchToMobileDescription":"Erleben Sie mehr Komfort, indem Sie Ihr Telefon zum Aufnehmen von Fotos und Videos verwenden.","switchToMobileTitle":"Wechseln Sie zu Ihrem Mobilger\xe4t","takeNewElement":"Erfassen Sie ein neues {{ type }}","thanksForYourMedia":"Thanks for your media!","upload":"Upload","useDesktopVersion":"Verwenden Sie die Desktop-Version","videoBotError":"Sorry, an error has occured.","videoBotThinking":"Thinking...","videoInstructionsTitle":"Bereit, ein Video aufzunehmen?","waitVideo":"Es kann bis zu 15 Sekunden dauern, bis ein Video fertig ist.","yourMedia":"Your media"},"recordingPopup":{"dismiss":"Abweisen","recordingStartText":"Dieser Anruf wird in K\xfcrze aufgezeichnet. Wenn Sie nicht aufgezeichnet werden m\xf6chten, k\xf6nnen Sie den Anruf gerne zu diesem Zeitpunkt verlassen.","recordingStartTitle":"Die Aufnahme beginnt gleich."},"requestAccess":{"admit":"Gib zu","defaultName":"Ein Nutzer","deny":"Verweigern","wantToJoin":"<bold>{{name}}</bold>will mitmachen!"},"requestDevice":{"askForDevice":"Ask for {{device}}","declined":"Ihre Anfrage wurde abgelehnt.","deviceActivated":"{{device}} activated","deviceActivationDeclined":"{{device}} activation declined","request":"{{user}}Ich m\xf6chte, dass du deine teilst {{device}}","requestInput":"Eingabeger\xe4te anfordern","timedOut":"Ihre Anfrage ist abgelaufen.","userDeclined":"{{user}}hat Ihre Anfrage abgelehnt.","userWouldLikeYouToActivateYourDevice":"{{name}} would like you to activate your {{device}}.","waitingForDevice":"Waiting for {{name}}\'s {{device}}"},"settings":{"callSettings":"Call settings","devices":"Ger\xe4te","enableVideo":"Enable video","help":"Hilfe","helpCenter":"Gehe zum Hilfecenter","language":"Sprache","manageRecording":"Manage recording","preferences":"Pr\xe4ferenzen","selectYourCamera":"W\xe4hlen Sie Ihre bevorzugte Kamera","selectYourLanguage":"W\xe4hlen Sie Ihre gew\xfcnschte Sprache","selectYourMicrophone":"W\xe4hlen Sie Ihr bevorzugtes Mikrofon","startRecording":"Start recording","stopRecording":"Stop recording","title":"Einstellungen","tools":"Tools"},"shareLink":{"failed":"Link konnte nicht gesendet werden","invalid":"Ung\xfcltiger Link","invoice":"{{user}}Ich habe dir eine Rechnung geschickt.","pay":"Zahlen","poweredBy":"Angetrieben von","sentToUser":"Link gesendet an {{user}}","sentToUsers":"Link an Benutzer gesendet","title":"Link teilen","title2":"Einen Link teilen"},"sharedHistory":{"shared":"Mit dir geteilt"},"snapshot":{"aSnapshotHasBeenShared":"A snapshot has been shared.","error":"Beim Versuch, den Snapshot zu senden, ist ein Fehler aufgetreten","save":"Foto speichern","sentToUser":"Snapshot gesendet an {{user}}","sentToUsers":"Snapshot wurde an Benutzer gesendet.","shared":"Schnappschuss geteilt.","title":"Schnappschuss"},"videoMenu":{"blockedCamera":"Die Kamera ist blockiert.","cameraPermissions":"Bitte akzeptieren Sie die gemeinsame Nutzung von Kameras, bevor Sie auf diese Optionen zugreifen.","highDef":"Hochaufl\xf6send (720p)","lowDef":"Niedrige Aufl\xf6sung (240p)","sendResolution":"Aufl\xf6sung senden (maximal)","standardDef":"Standardaufl\xf6sung (480p)","title":"Video"},"virtualBackground":{"blur":"Blur","custom":"Custom","default":"Default","noCustomBackgrounds":"No custom backgrounds yet. Please contact your admin.","none":"None","setBackground":"Hintergrund festlegen","title":"Virtueller Hintergrund"},"youtube":{"description":"Share a YouTube video with other participants.","invalid":"Ung\xfcltige YouTube-URL","share":"Jetzt ansehen","title":"Zusammen ansehen","url":"YOUTUBE-URL"}}');
|
|
69
|
+
$988a925d2edf1eb7$exports = JSON.parse('{"audioMenu":{"blockedMicrophone":"Das Mikrofon ist blockiert.","microphonePermissions":"Bitte akzeptieren Sie die gemeinsame Nutzung des Mikrofons, bevor Sie auf diese Optionen zugreifen.","title":"Audio"},"blockedFeature":{"descriptionConnected":"Bei einem kostenlosen Tarif kannst du diese Funktion nicht nutzen. Aktualisieren Sie Ihren Tarif, um alle In-Call-Funktionen nutzen zu k\xf6nnen.","descriptionGuest":"Sie nehmen an einem Anruf teil, der mit einer kostenlosen Version von SnapCall erstellt wurde. Diese Funktion ist nur in einer Pro-Version verf\xfcgbar.","dismissConnected":"Auf Pro upgraden","dismissGuest":"Okay","titleConnected":"Auf Pro upgraden","titleGuest":"Funktion nicht verf\xfcgbar"},"common":{"new":"New"},"copyLink":{"copied":"Link in die Zwischenablage kopiert","copy":"Copy","description":"Link in die Zwischenablage kopieren","error":"Beim Versuch, in die Zwischenablage zu kopieren, ist ein Fehler aufgetreten","title":"LINK KOPIEREN"},"endView":{"addAdditionalMedia":"Add additional media","allowsYouToShareMoreMedia":"This option allows you to share one or more media to add more context.","callEnded":"Der Anruf ist beendet","callIsOver":"Der Anruf ist beendet oder gel\xf6scht","callLeft":"Sie haben den Anruf verlassen","callNoLongerActive":"Dieser Anruf ist nicht mehr aktiv. Danke f\xfcr Ihre Teilnahme.","full":"Sie k\xf6nnen an diesem Anruf nicht teilnehmen","fullDescription":"Das Zimmer ist voll. Bitte versuchen Sie sp\xe4ter, dem Anruf beizutreten.","goBack":"Geh zur\xfcck zum Anruf","howWasYourExperience":"How was your experience?","ifMistakeRejoin":"Wenn dies ein Fehler war, k\xf6nnen Sie \xfcber die Schaltfl\xe4che unten erneut beitreten.","invalidLink":"Ung\xfcltiger Link","invalidOrExpired":"Dieser Link ist ung\xfcltig oder abgelaufen.","openDashboard":"Dashboard \xf6ffnen","pleaseRateYourExperienceBelow":"Please rate your experience below","thankYouForYourFeedback":"Thank you for your feedback.","tooLate":"Du bist zu sp\xe4t gekommen","yourFeedbackHelpsUs":"Your feedback helps us improve. See you soon!"},"gdpr":{"recordedWarning":"Um die Qualit\xe4t unseres Service zu verbessern, wird dieser Anruf aufgezeichnet."},"greeting":{"askToJoin":"Bitten Sie um Beitritt","askingLetIn":"Ich bitte darum, eingelassen zu werden...","cameraDisabled":"Kamera ist aus","cameraEnabled":"Kamera ist an","canceledCallRequest":"Die Anrufanfrage wird storniert und Sie werden auf die Seite zur Anrufplanung weitergeleitet.","cantJoinCall":"Sie k\xf6nnen an diesem Anruf nicht teilnehmen","cantWait":"Kannst du es kaum erwarten?","cantWaitLeaveMessage":"Kannst du es kaum erwarten? Sie k\xf6nnen eine Nachricht hinterlassen und Sie werden so schnell wie m\xf6glich kontaktiert.","clickOnLock":"Klicken Sie in der Leiste Ihres Browsers auf das <1> </1> Schlosssymbol.","footerDescription":"Lernen Sie SnapCall kennen, den einfachsten Weg, um Echtzeitvideos zu einer Plattform, einem Produkt oder einer Dienstleistung hinzuzuf\xfcgen.","footerTitle":"Bereitgestellt von SnapCall","leaveMessage":"Hinterlassen Sie eine Nachricht","mainTitle":"Willkommen bei SnapCall","mediaDenied":"Zugriff auf Mikrofon und Kamera verweigert","microphoneDisabled":"Mikrofon ist aus","microphoneEnabled":"Mikrofon ist an","name":"Nome","nameDescription":"Dieser Name wird allen Teilnehmern des Anrufs angezeigt.","namePlaceholder":"z. B. Lucy oder Peter","nameSubmit":"An der Konversation teilnehmen","recordVideo":"Video aufzeichnen","recordVoice":"Stimme aufnehmen","requestACall":"Fordern Sie einen Anruf an","scheduleACall":"Einen Anruf vereinbaren","setting":"Einstellungen","sideDescription":"Bitte gib deinen Namen ein und passe deine Kamera und dein Mikrofon an","sideTitle":"Halt dich fest, du bist der N\xe4chste!","someoneDenied":"Jemand in dem Anruf hat Ihre Beitrittsanfrage abgelehnt.","takeFewMinute":"Dies kann je nach Verf\xfcgbarkeit der Teilnehmer einige Minuten dauern.","whatYouCanDo":"Folgendes k\xf6nnen Sie tun","youWillJoinWhenSomeoneLetsYou":"Sie nehmen an dem Anruf teil, wenn Sie jemand von {{ companyName }} hereinl\xe4sst."},"header":{"free":"Kostenlose Version"},"iframe":{"featureNotAvailableInContext":"This feature is not available in the current context."},"invitePeople":{"PublicLink":"\xd6ffentlicher Link","addEmailToInvite":"F\xfcgen Sie eine E-Mail zur Einladung hinzu.","addEmails":"E-Mails hinzuf\xfcgen...","copyCallLinkDescription":"Kopieren Sie diesen Link und senden Sie ihn an alle, die Sie zur Teilnahme an der Telefonkonferenz einladen m\xf6chten.","copyClipLinkDescription":"Kopieren Sie diesen Link und senden Sie ihn an alle, die Sie zur Aufnahme eines Clips einladen m\xf6chten.","email":"E-Mail","emailPlaceholder":"Z. B. john@acme.com","emailsOrNumberPlaceholder":"Z. B. john@acme.com oder +33612345678","error":"Fehler beim Senden, bitte versuchen Sie es sp\xe4ter erneut.","invalidEmail":"Ung\xfcltiges E-Mail-Format.","invalidEmailOrNumber":"Ung\xfcltiges E-Mail- oder Zahlenformat.","invitationSentTo_one":"Gesendet an {{ name }}","invitationSentTo_other":"Gesendet an {{ name }} und {{ otherEmailsCount }} +","invite":"Einladen","inviteByEmail":"Per E-Mail einladen","inviteByEmailOrNumber":"Per E-Mail oder SMS einladen","inviteCall":"Zum Telefongespr\xe4ch einladen","inviteCallDefaultMessage":"Hallo! Du bist eingeladen, an unserem Videoanruf teilzunehmen. Klicken Sie auf den Link, um sofort eine Verbindung herzustellen.","inviteClipAudioDefaultMessage":"Hallo! Bitte nehmen Sie jetzt eine Audionachricht auf und geben Sie uns mehr Kontext, um Ihnen besser helfen zu k\xf6nnen.","inviteClipDefaultMessage":"Hallo! Bitte nehmen Sie jetzt Ihr Video auf und geben Sie uns mehr Kontext, um Ihnen besser helfen zu k\xf6nnen.","inviteClipPhotoDefaultMessage":"Hallo! Bitte machen Sie ein Foto und geben Sie uns mehr Kontext, um Ihnen besser helfen zu k\xf6nnen.","inviteClipScreenDefaultMessage":"Hallo! Bitte nehmen Sie jetzt Ihren Bildschirm auf und geben Sie uns mehr Kontext, um Ihnen besser helfen zu k\xf6nnen.","inviteClipVideoDefaultMessage":"Hallo! Bitte nehmen Sie jetzt Ihr Video auf und geben Sie uns mehr Kontext, um Ihnen besser helfen zu k\xf6nnen.","invitePeople":"Leute einladen","inviteRecordAudio":"Nehmen Sie ein Audio auf","inviteRecordClip":"Laden Sie zum Aufnehmen eines Clips ein","inviteRecordPhoto":"Mache ein Foto","inviteRecordScreen":"Nehmen Sie einen Bildschirm auf","inviteRecordVideo":"Nehmen Sie ein Video auf","joinTheCall":"Nehmen Sie an der Telefonkonferenz teil","linkToJoinCall":"Link, um an der Telefonkonferenz teilzunehmen","linkToRecordAClip":"Link zum Aufnehmen eines Clips","message":"Nachricht","sharePublicLink":"\xd6ffentlichen Link teilen"},"leave":{"endCall":"Anruf f\xfcr alle beenden","leaveCall":"Anruf hinterlassen","title":"Verlassen Sie"},"loader":{"connection":"Verbindung wird hergestellt..."},"menu":{"new":"New","openNewTab":"Neuen Tab \xf6ffnen","pictureInPicture":"Bild-im-Bild","quickConnect":"Schnelle Verbindung","screenSharing":"Bildschirm\xfcbertragung","startRecord":"Anruf aufzeichnen","stopRecord":"Aufnahme beenden","title":"Men\xfc"},"misc":{"accept":"Akzeptieren","add":"Add","audio":"Audio","camera":"Kamera","cancel":"Abbrechen","confirm":"Confirm","decline":"R\xfcckgang","download":"Download","from":"vom","microphone":"Mikrofon","open":"\xd6ffnen Sie","pdf":"PDF","photo":"Foto","proceed":"Proceed","remove":"entfernen","screen":"Bildschirm","screenshot":"Bildschirmfoto","someone":"Jemand","speaker":"Sprecher","user":"Nutzer","video":"Video","you":"Du"},"networkIssue":{"description":"The clip information may be damaged.","title":"Network issue"},"notifications":{"aQuickRefreshShouldFix":"A quick refresh should get things back on track","agentJoinError":"Beim Versuch, dem Raum als Agent beizutreten, ist ein Fehler aufgetreten","allow":"Allow","blockedMicrophonePopup":"SnapCall ben\xf6tigt Zugriff auf Ihre Kamera und Ihr Mikrofon. Klicken Sie in der Adressleiste Ihres Browsers auf das Symbol \u201EKamera blockiert\u201C.","blockedMicrophonePopupTitle":"Kamera und Mikrofon sind blockiert","cameraError":"Beim Versuch, die Kamera umzuschalten, ist ein Fehler aufgetreten","cameraRotateError":"Beim Versuch, die Kamera zu drehen, ist ein Fehler aufgetreten","close":"Schlie\xdfen","connectedTo":"Verbunden mit {{name}}","criticalError":"Ein kritischer Fehler ist aufgetreten (Fehler{{code}}).","error":"Fehler ","errorOccuredCode":"Ein Fehler ist aufgetreten (Fehler{{code}}).","failedToDisableVideo":"Failed to disable video","failedToEnableMicrophone":"Failed to enable microphone","failedToEnableVideo":"Failed to enable video","failedToMuteUnmuteMicrophone":"Failed to mute / unmute the microphone","invitationSentToFailed":"Gesendet an {{ name }} fehlgeschlagen.","locationIsBlocked":"Location is blocked","locationIsRequired":"Location is required","microphoneError":"Beim Versuch, das Mikrofon umzuschalten, ist ein Fehler aufgetreten","networkStability":"Network stability","noCamera":"Keine Kamera verf\xfcgbar","permissionToShareScreenDenied":"Permission to share screen denied","pleaseEnableLocation":"Please enable location services in your settings.","recording":"Aufnahme l\xe4uft","recordingStopped":"Recording stopped","reload":" Erneut laden ","screensharingError":"Beim Versuch, die Bildschirm\xfcbertragung umzuschalten, ist ein Fehler aufgetreten","somethingWentWrong":"Oops! Something went wrong","unableToSwitchCamera":"Unable to switch camera","unableToUnzoom":"Unable to unzoom","unableToZoom":"Unable to zoom","uploadError":"Beim Upload ist ein Fehler aufgetreten. Bitte versuchen Sie es sp\xe4ter erneut.","uploadFailed":"Upload failed","yourInternetConnectionIsUnstable":"Your internet connection is unstable"},"quickConnect":{"scan":"Scannen Sie diesen QR-Code mit Ihrer Handykamera, um den Anruf zu \xf6ffnen.","scanTitle":"QR-Code scannen","title":"Schnelle Verbindung"},"recorder":{"addMore":"Weitere hinzuf\xfcgen","addNewClip":"Neuen Clip hinzuf\xfcgen","allowAccess":"Zugriff erlauben","allowCamMicAccess":"Zugriff auf Kamera/Mikrofon erlauben","allowScreenShareAccess":"Zugriff auf Bildschirm\xfcbertragung zulassen","attachElements_one":"Dem Ticket {{ type }} beif\xfcgen","attachElements_other":"{{ count }}Elemente anh\xe4ngen","audioInstructionsTitle":"Bereit, eine Sprachnachricht aufzunehmen?","audioLevelNotification":{"noSound":{"description":"Vergewissern Sie sich, dass Ihr Mikrofon aktiviert ist.","title":"Es wurde kein Ton erkannt."},"shortVideo":{"description":"Dieses Video ist zu kurz, um den Kontext zu verstehen.","title":"Kurzes Video."},"spokenWordsQuestion":{"description":"Enth\xe4lt Ihr Video gen\xfcgend gesprochene Details?","title":"Gesprochene Worte."},"spokenWordsWarning":{"description":"Der Clip enth\xe4lt kaum gesprochene Worte.","title":"Keine gesprochenen Worte."}},"audioLevelToast":{"continueSpeaking":"Sprechen Sie weiter, um einen klareren Kontext zu erhalten.","noSound":"Es wurde kein Ton erkannt.","rememberSpeaking":"Denken Sie daran, zu sprechen, um den Kontext zu vermitteln."},"chooseWhatYouWantToShare":"W\xe4hle aus, was du teilen m\xf6chtest","chooseWhatYouWantToShareDescription":"W\xe4hlen Sie den Bildschirm oder die Registerkarte aus, die Sie teilen m\xf6chten, und starten Sie die Aufnahme.","clipCount_one":"{{ count }}Clip","clipCount_other":"{{ count }}Clips","clipSubmissionDescription":"Vielen Dank, dass Sie SnapCall verwenden.","clipSubmissionTitle_one":"Ihr Clip wurde gesendet","clipSubmissionTitle_other":"Deine Clips wurden gesendet","confirmRemovalDescription":"Bist du sicher, dass du dieses Foto/Video l\xf6schen m\xf6chtest? Diese Aktion kann nicht r\xfcckg\xe4ngig gemacht werden.","confirmRemovalTitle":"L\xf6schen best\xe4tigen","elementBeingProcessed":"Bitte warten Sie, Ihre {{ type }} wird bearbeitet...","elementCaptureSuccess":"{{ type }}erfolgreich erfasst","elementRecordedAndAttached":"Ihr Clip wurde gesendet und an den Thread angeh\xe4ngt.","feelFreeToTalkGiveMoreContext":"\uD83D\uDDE3\uFE0F Feel free to talk to give me more context.","goBackToTicket":"Gehe zur\xfcck zum Ticket","instructions":{"allowAccessOnPrompt":"<bold>Erlauben Sie den Zugriff auf Kamera und Mikrofon</bold>, wenn Sie dazu aufgefordert werden.","multiplePhotos":"Nehmen Sie ein oder mehrere <bold> Fotos auf, </bold> um weitere Informationen zu erhalten, und \xfcberpr\xfcfen Sie es dann.","privacyPolicy":"Indem Sie fortfahren, stimmen Sie unseren <bold> Datenschutzbestimmungen zu</bold>.","reviewAndSendAudios":"<bold>\xdcberpr\xfcfe deine Audios </bold> und sie werden automatisch an uns gesendet.","reviewAndSendPhotos":"<bold>Best\xe4tigen Sie Ihre Fotos </bold> und sie werden automatisch an uns gesendet.","reviewAndSendVideos":"<bold>\xdcberpr\xfcfe deine Videos </bold> und sie werden automatisch an uns gesendet.","screenShareInstruction":"W\xe4hlen Sie den Bildschirm oder das Fenster aus, das Sie aufnehmen m\xf6chten.","selectScreenshare":"Tippen Sie auf Meinen Bildschirm aufnehmen und w\xe4hlen Sie den Bildschirm oder das Fenster aus, das Sie aufnehmen m\xf6chten.","speakClearly":"<bold>Sprechen Sie deutlich </bold> und sagen Sie, was Sie vermitteln m\xfcssen.","speakDuringRecord":"Sie k\xf6nnen w\xe4hrend der Aufnahme sprechen, um Details hinzuzuf\xfcgen.","stopScreenOnFinish":"Dr\xfccken Sie die Stopp-Taste, wenn Sie fertig sind. Das Video wird automatisch an uns gesendet.","tapAudioButton":"<bold>Tippen Sie auf die Aufnahmetaste</bold>, um mit der Aufnahme Ihrer Audionachricht zu beginnen.","tapStopVideoButton":"<bold>Tippe auf Stopp</bold>, wenn du fertig bist.","tapVideoButton":"<bold>Tippen Sie auf die Aufnahmetaste</bold>, um zu beginnen, und Sie k\xf6nnen gerne einen Kommentar abgeben.","videoSpeech":"Sie k\xf6nnen w\xe4hrend </bold> der Aufnahme <bold> sprechen, um zus\xe4tzliche Informationen bereitzustellen."},"limit":"Videoaufnahme begrenzt auf 5 min.","logIn":"LOG IN","loggedAs":"Eingeloggt als","mediaCount_one":"{{ count }}Medien","mediaCount_other":"{{ count }}Medien","mediaSent_one":"Ihre Medien wurden gesendet","mediaSent_other":"Ihre Medien wurden gesendet","mySuggestion":"My suggestion","noCameraAccess":"Kein Kamerazugriff","noCameraAccessDescription":"Kein Kamerazugriff Erlauben Sie den Kamerazugriff in Ihrem Browser.","noCameraAndMicrophoneAccess":"Kein Kamera- und Mikrofonzugang","noCameraAndMicrophoneAccessDescription":"Kein Zugriff auf Kamera und Mikrofon Erlauben Sie den Zugriff auf Mikrofon und Kamera in Ihrem Browser.","noMicrophoneAccess":"Kein Mikrofonzugang","noMicrophoneAccessDescription":"Kein Mikrofonzugriff Erlauben Sie den Mikrofonzugriff in Ihrem Browser.","okay":"Okay","openThread":"Thread \xf6ffnen","permissionDeniedDescription":"Ohne Zugriff auf Kamera und Mikrofon k\xf6nnen Sie keine Fotos oder Videos aufnehmen, um sie mit dem Support-Team zu teilen. Bitte gew\xe4hren Sie Zugriff in Ihren Browsereinstellungen.","permissionDeniedTitle":"Etwas ist schief gelaufen!","photoInstructionsTitle":"Bereit, ein Foto zu machen?","recordNewMedia":"Record new media","replyAttached":"Ihre Antwort wurde angeh\xe4ngt","scanQRCode":"Scannen Sie diesen QR-Code mit einem kompatiblen Ger\xe4t.","screenShareInstructionsTitle":"Bereit, deinen Bildschirm zu teilen?","screenTitle":"Bereit, deinen Bildschirm aufzunehmen?","send":"Absschicken","sendElements_one":"Senden {{ type }}","sendElements_other":"{{ count }}Elemente senden","showQrCode":"QR Code anzeigen","startByClickingOnTheButton":"Start by clicking on the round button below! \uD83D\uDC47","startScreenRecording":"Bildschirmaufnahme starten","startScreenShareButton":"Meinen Bildschirm aufnehmen","stopScreenShareButton":"Aufnahme beenden","submissionDescription":"Ihr Foto/Video wurde erfolgreich eingereicht. Wir werden es \xfcberpr\xfcfen und uns in K\xfcrze bei Ihnen melden.","submissionTitle":"Danke f\xfcr deine Einreichung!","switchToMobileDescription":"Erleben Sie mehr Komfort, indem Sie Ihr Telefon zum Aufnehmen von Fotos und Videos verwenden.","switchToMobileTitle":"Wechseln Sie zu Ihrem Mobilger\xe4t","takeNewElement":"Erfassen Sie ein neues {{ type }}","thanksForYourMedia":"Thanks for your media!","upload":"Upload","useDesktopVersion":"Verwenden Sie die Desktop-Version","videoBotError":"Sorry, an error has occured.","videoBotThinking":"Thinking...","videoInstructionsTitle":"Bereit, ein Video aufzunehmen?","waitVideo":"Es kann bis zu 15 Sekunden dauern, bis ein Video fertig ist.","yourMedia":"Your media"},"recordingPopup":{"dismiss":"Abweisen","recordingStartText":"Dieser Anruf wird in K\xfcrze aufgezeichnet. Wenn Sie nicht aufgezeichnet werden m\xf6chten, k\xf6nnen Sie den Anruf gerne zu diesem Zeitpunkt verlassen.","recordingStartTitle":"Die Aufnahme beginnt gleich."},"requestAccess":{"admit":"Gib zu","defaultName":"Ein Nutzer","deny":"Verweigern","wantToJoin":"<bold>{{name}}</bold>will mitmachen!"},"requestDevice":{"askForDevice":"Ask for {{device}}","declined":"Ihre Anfrage wurde abgelehnt.","deviceActivated":"{{device}} activated","deviceActivationDeclined":"{{device}} activation declined","request":"{{user}}Ich m\xf6chte, dass du deine teilst {{device}}","requestInput":"Eingabeger\xe4te anfordern","timedOut":"Ihre Anfrage ist abgelaufen.","userDeclined":"{{user}}hat Ihre Anfrage abgelehnt.","userWouldLikeYouToActivateYourDevice":"{{name}} would like you to activate your {{device}}.","waitingForDevice":"Waiting for {{name}}\'s {{device}}"},"settings":{"callSettings":"Call settings","devices":"Ger\xe4te","enableVideo":"Enable video","help":"Hilfe","helpCenter":"Gehe zum Hilfecenter","language":"Sprache","manageRecording":"Manage recording","preferences":"Pr\xe4ferenzen","selectYourCamera":"W\xe4hlen Sie Ihre bevorzugte Kamera","selectYourLanguage":"W\xe4hlen Sie Ihre gew\xfcnschte Sprache","selectYourMicrophone":"W\xe4hlen Sie Ihr bevorzugtes Mikrofon","startRecording":"Start recording","stopRecording":"Stop recording","title":"Einstellungen","tools":"Tools"},"shareLink":{"failed":"Link konnte nicht gesendet werden","invalid":"Ung\xfcltiger Link","invoice":"{{user}}Ich habe dir eine Rechnung geschickt.","pay":"Zahlen","poweredBy":"Angetrieben von","sentToUser":"Link gesendet an {{user}}","sentToUsers":"Link an Benutzer gesendet","title":"Link teilen","title2":"Einen Link teilen"},"sharedHistory":{"shared":"Mit dir geteilt"},"snapshot":{"aSnapshotHasBeenShared":"A snapshot has been shared.","error":"Beim Versuch, den Snapshot zu senden, ist ein Fehler aufgetreten","save":"Foto speichern","sentToUser":"Snapshot gesendet an {{user}}","sentToUsers":"Snapshot wurde an Benutzer gesendet.","shared":"Schnappschuss geteilt.","title":"Schnappschuss"},"videoMenu":{"blockedCamera":"Die Kamera ist blockiert.","cameraPermissions":"Bitte akzeptieren Sie die gemeinsame Nutzung von Kameras, bevor Sie auf diese Optionen zugreifen.","highDef":"Hochaufl\xf6send (720p)","lowDef":"Niedrige Aufl\xf6sung (240p)","sendResolution":"Aufl\xf6sung senden (maximal)","standardDef":"Standardaufl\xf6sung (480p)","title":"Video"},"virtualBackground":{"blur":"Blur","custom":"Custom","default":"Default","noCustomBackgrounds":"No custom backgrounds yet. Please contact your admin.","none":"None","setBackground":"Hintergrund festlegen","title":"Virtueller Hintergrund"},"youtube":{"description":"Share a YouTube video with other participants.","invalid":"Ung\xfcltige YouTube-URL","share":"Jetzt ansehen","title":"Zusammen ansehen","url":"YOUTUBE-URL"}}');
|
|
70
70
|
|
|
71
71
|
|
|
72
72
|
var $2cbf9baa8030dfd2$exports = {};
|
|
73
|
-
$2cbf9baa8030dfd2$exports = JSON.parse('{"audioMenu":{"blockedMicrophone":"Il tuo microfono \xe8 bloccato.","microphonePermissions":"Si prega di accettare la condivisione del microfono prima di accedere a queste opzioni.","title":"Audio"},"blockedFeature":{"descriptionConnected":"Su un piano gratuito, non puoi utilizzare questa funzione. Aggiorna il tuo piano per usufruire di tutte le funzionalit\xe0 in chiamata.","descriptionGuest":"Stai partecipando a una chiamata creata con una versione gratuita di SnapCall. Questa funzione \xe8 disponibile solo con una versione Pro.","dismissConnected":"L\'aggiornamento a Pro","dismissGuest":"Okay","titleConnected":"L\'aggiornamento a Pro","titleGuest":"Funzione non disponibile"},"common":{"new":"new"},"copyLink":{"copied":"Link copiato negli Appunti","copy":"Copia","description":"Copia il link negli appunti","error":"Si \xe8 verificato un errore durante la copia negli Appunti","title":"Copia il link"},"endView":{"addAdditionalMedia":"Add additional media","allowsYouToShareMoreMedia":"This option allows you to share one or more media to add more context.","callEnded":"Questa chiamata \xe8 finita","callIsOver":"Questa chiamata \xe8 finita o \xe8 stata eliminata","callLeft":"Hai lasciato la chiamata","callNoLongerActive":"This call is no longer active. Thank you for participating.","full":"Impossibile partecipare alla chiamata","fullDescription":"Limite d\'uso attenente.","goBack":"Torna alla chiamata","howWasYourExperience":"How was your experience?","ifMistakeRejoin":"If this was a mistake, you can rejoin using the button below.","invalidLink":"Invalid link","invalidOrExpired":"This link is invalid or expired.","openDashboard":"Open dashboard","pleaseRateYourExperienceBelow":"Please rate your experience below","thankYouForYourFeedback":"Thank you for your feedback.","tooLate":"Sei arrivato troppo tardi","yourFeedbackHelpsUs":"Your feedback helps us improve. See you soon!"},"gdpr":{"recordedWarning":"Per migliorare la qualit\xe0 del nostro servizio, questa chiamata verr\xe0 registrata."},"greeting":{"askToJoin":"Chiedi di partecipare","askingLetIn":"Chiedo di essere fatto entrare...","cameraDisabled":"Fotocamera \xe8 spenta","cameraEnabled":"Fotocamera \xe8 accesa","canceledCallRequest":"La richiesta di chiamata verr\xe0 annullata e verrai reindirizzato alla pagina di pianificazione delle chiamate","cantJoinCall":"Non puoi partecipare a questa chiamata","cantWait":"Non vedo l\'ora?","cantWaitLeaveMessage":"Non vedi l\'ora? Puoi lasciare un messaggio e sarai contattato il prima possibile.","clickOnLock":"Fai clic sull\'icona del lucchetto <1></1> nella barra del browser.","footerDescription":"Incontrare SnapCall, il modo pi\xf9 semplice per aggiungere video in tempo reale a piattaforma, prodotto o servizio.","footerTitle":"Offerto da SnapCall","leaveMessage":"Lascia un messaggio","mainTitle":"Benvenuto a SnapCall","mediaDenied":"Accesso al microfono e alla fotocamera negato","microphoneDisabled":"Microfono \xe8 spento","microphoneEnabled":"Microfono \xe8 acceso","name":"Nome","nameDescription":"Questo nome verr\xe0 visualizzato a tutti i partecipanti alla chiamata.","namePlaceholder":"Per esempio. Lucia o Pietro","nameSubmit":"Partecipa alla conversazione","recordVideo":"Registra video","recordVoice":"Registra voce","requestACall":"Richiedi una chiamata","scheduleACall":"Pianifica una chiamata","setting":"Impostazioni","sideDescription":"Inserisci il tuo nome e regola la fotocamera e il microfono","sideTitle":"Tieni duro, il prossimo sei tu!","someoneDenied":"Qualcuno nella chiamata ha rifiutato la tua richiesta di partecipazione.","takeFewMinute":"L\'operazione potrebbe richiedere alcuni minuti a seconda della disponibilit\xe0 dei partecipanti.","whatYouCanDo":"Ecco cosa puoi fare","youWillJoinWhenSomeoneLetsYou":"Parteciperai alla chiamata quando qualcuno di {{ companyName }} ti far\xe0 entrare."},"header":{"free":"Versione gratuita"},"iframe":{"featureNotAvailableInContext":"This feature is not available in the current context."},"invitePeople":{"PublicLink":"Public link","addEmailToInvite":"Aggiungi un\'e-mail per invitare.","addEmails":"Aggiungi email...","copyCallLinkDescription":"Copia questo link e invialo a chiunque desideri invitare a partecipare alla chiamata.","copyClipLinkDescription":"Copia questo collegamento e invialo a chiunque desideri invitare a registrare una clip.","email":"Email","emailPlaceholder":"Es. john@acme.com","emailsOrNumberPlaceholder":"Eg. john@acme.com or +33612345678","error":"Impossibile inviare, riprova pi\xf9 tardi.","invalidEmail":"Formato email non valido.","invalidEmailOrNumber":"Invalid email or number format.","invitationSentTo_one":"Inviato a {{ name }}","invitationSentTo_other":"Inviato a {{ name }} e {{ otherEmailsCount }}+","invite":"Invita","inviteByEmail":"Invita via email","inviteByEmailOrNumber":"Invite by email or sms","inviteCall":"Invita a partecipare alla chiamata","inviteCallDefaultMessage":"Sei invitato a partecipare alla nostra videochiamata. Fare clic sul collegamento per connettersi immediatamente.","inviteClipAudioDefaultMessage":"Hey! Please record an audio message now and provide us with more context to assist you better.","inviteClipDefaultMessage":"Registra subito il tuo videoclip e forniscici pi\xf9 contesto per assisterti meglio.","inviteClipPhotoDefaultMessage":"Hey! Please take a photo and provide us with more context to assist you better.","inviteClipScreenDefaultMessage":"Hey! Please record your screen now and provide us with more context to assist you better.","inviteClipVideoDefaultMessage":"Hey! Please record your video now and provide us with more context to assist you better.","invitePeople":"Invite people","inviteRecordAudio":"Record an audio","inviteRecordClip":"Invita a registrare la clip","inviteRecordPhoto":"Take a photo","inviteRecordScreen":"Record a screen","inviteRecordVideo":"Record a video","joinTheCall":"Join the call","linkToJoinCall":"Link per partecipare alla chiamata","linkToRecordAClip":"Collegamento per registrare una clip","message":"Messaggio","sharePublicLink":"Condividi link"},"leave":{"endCall":"Termina la chiamata per tutti","leaveCall":"Lascia la chiamata","title":"Lasciare"},"loader":{"connection":"Connessione..."},"menu":{"new":"NUOVO","openNewTab":"Apri una nuova scheda","pictureInPicture":"Immagine nell\'immagine","quickConnect":"Connessione Rapida","screenSharing":"Condivisione dello schermo","startRecord":"Registra chiamata","stopRecord":"Interrompere la registrazione","title":"Men\xf9"},"misc":{"accept":"Accettare","add":"Add","audio":"Audio","camera":"Telecamera","cancel":"Annulla","confirm":"Confermare","decline":"Declinare","download":"Download","from":"Da","microphone":"Microfono","open":"Aprire","photo":"Foto","proceed":"Procedere","remove":"Rimuovere","screen":"Schermo","screenshot":"Schermata","someone":"Qualcuno","speaker":"Altoparlante","user":"Utente","video":"Video","you":"Voi"},"networkIssue":{"description":"The clip information may be damaged.","title":"Network issue"},"notifications":{"aQuickRefreshShouldFix":"A quick refresh should get things back on track","agentJoinError":"Si \xe8 verificato un errore cercando di entrare nella conversazione come agente","allow":"Allow","blockedMicrophonePopup":"SnapCall ha bisogno di accedere alla fotocamera e al microfono. Fare clic sull\'icona della fotocamera bloccata nella barra degli indirizzi del browser.","blockedMicrophonePopupTitle":"La tua fotocamera e il tuo microfono sono bloccati","cameraError":"Si \xe8 verificato un errore durante l\'attivazione della fotocamera","cameraRotateError":"Si \xe8 verificato un errore durante la rotazione della fotocamera","close":"Chiudere","connectedTo":"Connesso a {{name}}","criticalError":"Si \xe8 verificato un errore critico (errore {{code}}).","error":"Error","errorOccuredCode":"An error occured (error {{code}}).","failedToDisableVideo":"Failed to disable video","failedToEnableMicrophone":"Failed to enable microphone","failedToEnableVideo":"Failed to enable video","failedToMuteUnmuteMicrophone":"Failed to mute / unmute the microphone","invitationSentToFailed":"Sent to {{ name }} failed.","locationIsBlocked":"Location is blocked","locationIsRequired":"Location is required","microphoneError":"Si \xe8 verificato un errore durante l\'attivazione del microfono","networkStability":"Network stability","noCamera":"Nessuna fotocamera disponibile","permissionToShareScreenDenied":"Permission to share screen denied","pleaseEnableLocation":"Please enable location services in your settings.","recording":"Registrazione in corso","recordingStopped":"Recording stopped","reload":"Ricaricare","screensharingError":"Si \xe8 verificato un errore durante l\'attivazione della condivisione dello schermo","somethingWentWrong":"Oops! Something went wrong","unableToSwitchCamera":"Unable to switch camera","unableToUnzoom":"Unable to unzoom","unableToZoom":"Unable to zoom","uploadError":"An error occured during the upload, please try again later.","uploadFailed":"Upload failed","yourInternetConnectionIsUnstable":"Your internet connection is unstable"},"quickConnect":{"scan":"Scansiona questo codice QR con il telefono per aprire la chiamata.","scanTitle":"Scansiona il codice QR","title":"Connessione Rapida"},"recorder":{"addMore":"Aggiungere altro","addNewClip":"Aggiungi una nuova clip","allowAccess":"Consenti accesso","allowCamMicAccess":"Consenti l\'accesso a cam/mic","allowScreenShareAccess":"Consenti accesso alla condivisione dello schermo","attachElements_one":"Allega {{ type }} al biglietto","attachElements_other":"Allega {{ count }} elementi","audioInstructionsTitle":"Pronti per registrare un messaggio vocale?","audioLevelNotification":{"noSound":{"description":"Assicurati che il microfono sia attivato.","title":"Nessun suono rilevato."},"shortVideo":{"description":"Questo video \xe8 troppo breve per avere un contesto.","title":"Breve video."},"spokenWordsQuestion":{"description":"Il tuo video include abbastanza dettagli parlati?","title":"Parole pronunciate."},"spokenWordsWarning":{"description":"La clip include a malapena parole pronunciate.","title":"Nessuna parola detta."}},"audioLevelToast":{"continueSpeaking":"Continua a parlare per un contesto pi\xf9 chiaro.","noSound":"Nessun suono rilevato.","rememberSpeaking":"Ricordati di parlare per fornire il contesto."},"chooseWhatYouWantToShare":"Choose what you want to share","chooseWhatYouWantToShareDescription":"Select the screen or tab you want to share and start recording.","clipCount_one":"{{ count }} clip","clipCount_other":"{{ count }} clips","clipSubmissionDescription":"Grazie per aver utilizzato SnapCall.","clipSubmissionTitle_one":"La tua clip \xe8 stata inviata","clipSubmissionTitle_other":"I tuoi clip sono stati inviati","confirmRemovalDescription":"Sei sicuro di voler rimuovere questa foto/video? Questa azione non pu\xf2 essere annullata.","confirmRemovalTitle":"Conferma rimozione","elementBeingProcessed":"Attendi un momento mentre il tuo {{ type }} viene elaborato...","elementCaptureSuccess":"{{ type }} catturato con successo","elementRecordedAndAttached":"La tua clip \xe8 stata inviata e allegata al thread.","feelFreeToTalkGiveMoreContext":"\uD83D\uDDE3\uFE0F Feel free to talk to give me more context.","goBackToTicket":"Torna al biglietto","instructions":{"allowAccessOnPrompt":"<bold>Consenti l\'accesso</bold> alla fotocamera e al microfono.","multiplePhotos":"Scatta <bold>una foto o pi\xf9</bold> di una per i dettagli.","privacyPolicy":"Procedendo, accetti la nostra <bold>Politica sulla Privacy.</bold>","reviewAndSendAudios":"<bold>Rivedi i tuoi audio</bold> e verranno inviati automaticamente a noi.","reviewAndSendPhotos":"<bold>Convalida le tue foto</bold> e verranno inviate automaticamente a noi.","reviewAndSendVideos":"<bold>Convalida i tuoi video</bold> e verranno inviati automaticamente a noi.","screenShareInstruction":"Seleziona lo schermo o la finestra che desideri registrare.","selectScreenshare":"Tap Record my screen and select the screen or window you want to record.","speakClearly":"<bold>Parla chiaramente</bold> e d\xec ci\xf2 che devi comunicare.","speakDuringRecord":"You can speak while recording to add details.","stopScreenOnFinish":"Press the Stop button when finished. The video will be sent to us automatically.","tapAudioButton":"<bold>Premi il pulsante di registrazione</bold> per iniziare a registrare il tuo messaggio vocale.","tapStopVideoButton":"<bold>Premi Stop</bold> quando hai finito.","tapVideoButton":"<bold>Premi Registra</bold>. Ricordati di commentare.","videoSpeech":"Puoi <bold>parlare durante</bold> la registrazione per aggiungere dettagli."},"limit":"Registrazione video limitata a 5 min.","logIn":"Login","loggedAs":"Registrato come","mediaCount_one":"{{ count }} media","mediaCount_other":"{{ count }} media","mediaSent_one":"Your media has been sent","mediaSent_other":"Your media has been sent","mySuggestion":"My suggestion","noCameraAccess":"No camera access","noCameraAccessDescription":"No camera access Allow camera access in your browser.","noCameraAndMicrophoneAccess":"No camera & microphone access","noCameraAndMicrophoneAccessDescription":"No camera & microphone access Allow microphone and camera access in your browser.","noMicrophoneAccess":"No microphone access","noMicrophoneAccessDescription":"No microphone access Allow microphone access in your browser.","okay":"Okay","openThread":"Apri il thread","permissionDeniedDescription":"Senza l\'accesso alla fotocamera e al microfono, non \xe8 possibile scattare foto o registrare video da condividere con il team di supporto. Si prega di concedere l\'accesso nelle impostazioni del browser.","permissionDeniedTitle":"Qualcosa \xe8 andato storto!","photoInstructionsTitle":"Pronto a scattare una foto?","recordNewMedia":"Record new media","replyAttached":"La tua risposta \xe8 stata allegata","scanQRCode":"Scansiona questo codice QR con un dispositivo compatibile.","screenShareInstructionsTitle":"Pronto a condividere il tuo schermo?","screenTitle":"Pronto a catturare il tuo schermo?","send":"Invia","sendElements_one":"Invia {{ type }}","sendElements_other":"Invia {{ count }} elementi","showQrCode":"Show QR code","startByClickingOnTheButton":"Start by clicking on the round button below! \uD83D\uDC47","startScreenRecording":"Start screen recording","startScreenShareButton":"Registra il mio schermo","stopScreenShareButton":"Ferma registrazione","submissionDescription":"La tua foto/video \xe8 stata inviata con successo. La esamineremo e ti risponderemo al pi\xf9 presto.","submissionTitle":"Grazie per il tuo invio!","switchToMobileDescription":"Goditi un\'esperienza ancora pi\xf9 pratica utilizzando il tuo telefono per scattare foto e registrare video.","switchToMobileTitle":"Passa al tuo dispositivo mobile","takeNewElement":"Cattura un nuovo {{ type }}","thanksForYourMedia":"Thanks for your media!","upload":"Upload","useDesktopVersion":"Usa la versione desktop","videoBotError":"Sorry, an error has occured.","videoBotThinking":"Thinking...","videoInstructionsTitle":"Pronto a registrare un video?","waitVideo":"Potrebbero essere necessari fino a 15 secondi affinch\xe9 un video sia pronto.","yourMedia":"Your media"},"recordingPopup":{"dismiss":"Chiudi","recordingStartText":"Questa chiamata verr\xe0 registrata a breve. Se preferisci non essere registrato, sei libero di lasciare la chiamata in questo momento.","recordingStartTitle":"Registrazione in procinto di iniziare."},"requestAccess":{"admit":"Ammettere","defaultName":"Un utente","deny":"Negare","wantToJoin":"<bold>{{name}}</bold> vuole unirsi!"},"requestDevice":{"askForDevice":"Ask for {{device}}","declined":"La tua richiesta \xe8 stata rifiutata.","deviceActivated":"{{device}} activated","deviceActivationDeclined":"{{device}} activation declined","request":"{{user}} vorrebbe condividere il tuo {{device}}","requestInput":"Richiesta di attivazione","timedOut":"La tua richiesta non ha ricevuto risposta","userDeclined":"{{user}} ha rifiutato la tua richiesta","userWouldLikeYouToActivateYourDevice":"{{name}} would like you to activate your {{device}}.","waitingForDevice":"Waiting for {{name}}\'s {{device}}"},"settings":{"callSettings":"Call settings","devices":"Dispositivi","enableVideo":"Enable video","help":"Aiuto","helpCenter":"Accedi all\'Assistenza","language":"Linguaggio","manageRecording":"Manage recording","preferences":"Preferenze","selectYourCamera":"Select your preferred camera","selectYourLanguage":"Select your preferred language","selectYourMicrophone":"Select your preferred microphone","startRecording":"Start recording","stopRecording":"Stop recording","title":"Impostazioni","tools":"Tools"},"shareLink":{"failed":"Si \xe8 verificato un errore durante l\'invio del link","invalid":"Collegamento non valido","invoice":"{{user}} ti ha inviato una fattura.","pay":"Paga","poweredBy":"Proposto da","sentToUser":"Link inviato a {{user}}","sentToUsers":"Link inviato ai partecipanti","title":"Condividi un link","title2":"Condividi un link"},"sharedHistory":{"shared":"Condiviso con te"},"snapshot":{"aSnapshotHasBeenShared":"A snapshot has been shared.","error":"Si \xe8 verificato un errore durante l\'invio della schermata","save":"Salva l\'immagine","sentToUser":"Schermata inviata a {{user}}","sentToUsers":"Schermanta inviata ai partecipanti","shared":"Schermata inviata","title":"Schermata"},"videoMenu":{"blockedCamera":"La fotocamera \xe8 bloccata.","cameraPermissions":"Si prega di accettare la condivisione della fotocamera prima di accedere a queste opzioni.","highDef":"Alta definizione (720p)","lowDef":"Definizione bassa (240p)","sendResolution":"Risoluzione inviata (max)","standardDef":"Definizione standard (480p)","title":"Video"},"virtualBackground":{"blur":"Blur","custom":"Custom","default":"Default","noCustomBackgrounds":"No custom backgrounds yet. Please contact your admin.","none":"None","setBackground":"Imposta sfondo","title":"Sfondo virtuale"},"youtube":{"description":"Share a YouTube video with other participants.","invalid":"URL YouTube non valido","share":"Guarda ora","title":"Vedere Assieme","url":"URL YOUTUBE"}}');
|
|
73
|
+
$2cbf9baa8030dfd2$exports = JSON.parse('{"audioMenu":{"blockedMicrophone":"Il tuo microfono \xe8 bloccato.","microphonePermissions":"Si prega di accettare la condivisione del microfono prima di accedere a queste opzioni.","title":"Audio"},"blockedFeature":{"descriptionConnected":"Su un piano gratuito, non puoi utilizzare questa funzione. Aggiorna il tuo piano per usufruire di tutte le funzionalit\xe0 in chiamata.","descriptionGuest":"Stai partecipando a una chiamata creata con una versione gratuita di SnapCall. Questa funzione \xe8 disponibile solo con una versione Pro.","dismissConnected":"Upgrade a Pro","dismissGuest":"Okay","titleConnected":"Passa a SnapCall Pro","titleGuest":"Funzione non disponibile"},"common":{"new":"nuovo"},"copyLink":{"copied":"Link copiato negli Appunti","copy":"Copia","description":"Copia il link","error":"Si \xe8 verificato un errore durante la copia negli Appunti","title":"Copia il link"},"endView":{"addAdditionalMedia":"Aggiungi media","allowsYouToShareMoreMedia":"Questa opzione ti permette di condividere uno o pi\xf9 media.","callEnded":"Questa chiamata \xe8 finita","callIsOver":"Questa chiamata \xe8 finita o \xe8 stata eliminata","callLeft":"Hai lasciato la chiamata","callNoLongerActive":"Questa chiamata \xe8 stata terminata. Grazie per aver partecipato. ","full":"Impossibile partecipare alla chiamata","fullDescription":"Limite d\'uso attenente.","goBack":"Torna alla chiamata","howWasYourExperience":"Com\'\xe8 stata la tua esperienza?","ifMistakeRejoin":"Se sei uscito per errore, puoi tornare nella chiamata usando il pulsante in basso. ","invalidLink":"Link non valido.","invalidOrExpired":"Questo link non \xe8 valido o \xe8 scaduto.","openDashboard":"Apri la dashboard","pleaseRateYourExperienceBelow":"Dai un voto usando i pulsanti in basso","thankYouForYourFeedback":"Grazie per il tuo feedback.","tooLate":"Sei arrivato troppo tardi","yourFeedbackHelpsUs":"Il tuo feedback ci aiuta a migliorare. A presto!"},"gdpr":{"recordedWarning":"Per migliorare la qualit\xe0 del nostro servizio, questa chiamata verr\xe0 registrata."},"greeting":{"askToJoin":"Chiedi di partecipare","askingLetIn":"Chiedo di essere fatto entrare...","cameraDisabled":"Fotocamera \xe8 spenta","cameraEnabled":"Fotocamera \xe8 accesa","canceledCallRequest":"La richiesta di chiamata verr\xe0 annullata e verrai reindirizzato alla pagina di pianificazione delle chiamate","cantJoinCall":"Non puoi partecipare a questa chiamata","cantWait":"Non vedo l\'ora?","cantWaitLeaveMessage":"Non vedi l\'ora? Puoi lasciare un messaggio e sarai contattato il prima possibile.","clickOnLock":"Fai clic sull\'icona del lucchetto <1></1> nella barra del browser.","footerDescription":"Incontrare SnapCall, il modo pi\xf9 semplice per aggiungere video in tempo reale a piattaforma, prodotto o servizio.","footerTitle":"Offerto da SnapCall","leaveMessage":"Lascia un messaggio","mainTitle":"Benvenuto a SnapCall","mediaDenied":"Accesso al microfono e alla fotocamera negato","microphoneDisabled":"Microfono \xe8 spento","microphoneEnabled":"Microfono \xe8 acceso","name":"Nome","nameDescription":"Questo nome verr\xe0 visualizzato a tutti i partecipanti alla chiamata.","namePlaceholder":"Per esempio. Lucia o Pietro","nameSubmit":"Partecipa alla conversazione","recordVideo":"Registra video","recordVoice":"Registra voce","requestACall":"Richiedi una chiamata","scheduleACall":"Pianifica una chiamata","setting":"Impostazioni","sideDescription":"Inserisci il tuo nome e regola la fotocamera e il microfono","sideTitle":"Tieni duro, il prossimo sei tu!","someoneDenied":"Qualcuno nella chiamata ha rifiutato la tua richiesta di partecipazione.","takeFewMinute":"L\'operazione potrebbe richiedere alcuni minuti a seconda della disponibilit\xe0 dei partecipanti.","whatYouCanDo":"Ecco cosa puoi fare","youWillJoinWhenSomeoneLetsYou":"Parteciperai alla chiamata quando qualcuno di {{ companyName }} ti far\xe0 entrare."},"header":{"free":"Versione gratuita"},"iframe":{"featureNotAvailableInContext":"This feature is not available in the current context."},"invitePeople":{"PublicLink":"Link condivisibile","addEmailToInvite":"Aggiungi un\'e-mail per invitare.","addEmails":"Aggiungi email...","copyCallLinkDescription":"Copia questo link e invialo a chiunque desideri invitare a partecipare alla chiamata.","copyClipLinkDescription":"Copia questo collegamento e invialo a chiunque desideri invitare a registrare una clip.","email":"Email","emailPlaceholder":"Es. john@acme.com","emailsOrNumberPlaceholder":"Per esempio john@acme.com o +33612345678\\n","error":"Impossibile inviare, riprova pi\xf9 tardi.","invalidEmail":"Formato email non valido.","invalidEmailOrNumber":"Formato dell\'indirizzo email/numero di telefono errati","invitationSentTo_one":"Inviato a {{ name }}","invitationSentTo_other":"Inviato a {{ name }} e {{ otherEmailsCount }}+","invite":"Invita","inviteByEmail":"Invita via email","inviteByEmailOrNumber":"Invita tramite email o SMS","inviteCall":"Invita a partecipare alla chiamata","inviteCallDefaultMessage":"Sei invitato a partecipare alla nostra videochiamata. Fare clic sul collegamento per connettersi immediatamente.","inviteClipAudioDefaultMessage":"Ciao! Per favore registra un messaggio audio e forniscici pi\xf9 informazioni che puoi. ","inviteClipDefaultMessage":"Registra subito il tuo videoclip e forniscici pi\xf9 contesto per assisterti meglio.","inviteClipPhotoDefaultMessage":"Ciao! Per favore scatta una foto e forniscici pi\xf9 informazioni sul problema. ","inviteClipScreenDefaultMessage":"Ciao! Per favore registra il tuo schermo cos\xec da permettere al nostro team di analizzare meglio la situazione. ","inviteClipVideoDefaultMessage":"Ciao! Per favore registra un video e forniscici pi\xf9 informazioni che puoi.","invitePeople":"Invita utenti","inviteRecordAudio":"Registra un messaggio audio","inviteRecordClip":"Invita a registrare la clip","inviteRecordPhoto":"Scatta una foto","inviteRecordScreen":"Registra il tuo schermo","inviteRecordVideo":"Registra un video","joinTheCall":"Entra nella chiamata","linkToJoinCall":"Link per partecipare alla chiamata","linkToRecordAClip":"Collegamento per registrare una clip","message":"Messaggio","sharePublicLink":"Condividi link"},"leave":{"endCall":"Termina la chiamata per tutti","leaveCall":"Lascia la chiamata","title":"Lasciare"},"loader":{"connection":"Connessione..."},"menu":{"new":"NUOVO","openNewTab":"Apri una nuova scheda","pictureInPicture":"Immagine nell\'immagine","quickConnect":"Connessione Rapida","screenSharing":"Condivisione dello schermo","startRecord":"Registra chiamata","stopRecord":"Interrompere la registrazione","title":"Men\xf9"},"misc":{"accept":"Accettare","add":"Aggiungi","audio":"Audio","camera":"Telecamera","cancel":"Annulla","confirm":"Confermare","decline":"Declinare","download":"Download","from":"Da","microphone":"Microfono","open":"Aprire","pdf":"PDF","photo":"Foto","proceed":"Procedere","remove":"Rimuovere","screen":"Schermo","screenshot":"Schermata","someone":"Qualcuno","speaker":"Altoparlante","user":"Utente","video":"Video","you":"Voi"},"networkIssue":{"description":"Il file potrebbe essere danneggiato o avere del rumore video.","title":"Problema di rete"},"notifications":{"aQuickRefreshShouldFix":"A quick refresh should get things back on track","agentJoinError":"Si \xe8 verificato un errore cercando di entrare nella conversazione come agente","allow":"Allow","blockedMicrophonePopup":"SnapCall ha bisogno di accedere alla fotocamera e al microfono. Fare clic sull\'icona della fotocamera bloccata nella barra degli indirizzi del browser.","blockedMicrophonePopupTitle":"La tua fotocamera e il tuo microfono sono bloccati","cameraError":"Si \xe8 verificato un errore durante l\'attivazione della fotocamera","cameraRotateError":"Si \xe8 verificato un errore durante la rotazione della fotocamera","close":"Chiudere","connectedTo":"Connesso a {{name}}","criticalError":"Si \xe8 verificato un errore critico (errore {{code}}).","error":"Errore","errorOccuredCode":"Si \xe8 verificato un errore (codice {{code}}).","failedToDisableVideo":"Failed to disable video","failedToEnableMicrophone":"Failed to enable microphone","failedToEnableVideo":"Failed to enable video","failedToMuteUnmuteMicrophone":"Failed to mute / unmute the microphone","invitationSentToFailed":"Invio a {{ name }} non riuscito.","locationIsBlocked":"Location is blocked","locationIsRequired":"Location is required","microphoneError":"Si \xe8 verificato un errore durante l\'attivazione del microfono","networkStability":"Network stability","noCamera":"Nessuna fotocamera disponibile","permissionToShareScreenDenied":"Permission to share screen denied","pleaseEnableLocation":"Please enable location services in your settings.","recording":"Registrazione in corso","recordingStopped":"","reload":"Ricaricare","screensharingError":"Si \xe8 verificato un errore durante l\'attivazione della condivisione dello schermo","somethingWentWrong":"Oops! Something went wrong","unableToSwitchCamera":"Unable to switch camera","unableToUnzoom":"Impossibile ridurre lo zoom","unableToZoom":"Impossibile ingrandire","uploadError":"Si \xe8 verificato un error durante il caricamento del file, riprova pi\xf9 tardi.","uploadFailed":"Upload failed","yourInternetConnectionIsUnstable":"Your internet connection is unstable"},"quickConnect":{"scan":"Scansiona questo codice QR con il telefono per aprire la chiamata.","scanTitle":"Scansiona il codice QR","title":"Connessione Rapida"},"recorder":{"addMore":"Aggiungere altro","addNewClip":"Aggiungi una nuova clip","allowAccess":"Consenti accesso","allowCamMicAccess":"Consenti l\'accesso a cam/mic","allowScreenShareAccess":"Consenti accesso alla condivisione dello schermo","attachElements_one":"Allega {{ type }} al biglietto","attachElements_other":"Allega {{ count }} elementi","audioInstructionsTitle":"Pronti per registrare un messaggio vocale?","audioLevelNotification":{"noSound":{"description":"Assicurati che il microfono sia attivato.","title":"Nessun suono rilevato."},"shortVideo":{"description":"Questo video \xe8 troppo breve per avere un contesto.","title":"Breve video."},"spokenWordsQuestion":{"description":"Il tuo video include abbastanza dettagli parlati?","title":"Parole pronunciate."},"spokenWordsWarning":{"description":"La clip include a malapena parole pronunciate.","title":"Nessuna parola detta."}},"audioLevelToast":{"continueSpeaking":"Continua a parlare per un contesto pi\xf9 chiaro.","noSound":"Nessun suono rilevato.","rememberSpeaking":"Ricordati di parlare per fornire il contesto."},"chooseWhatYouWantToShare":"Seleziona cosa intendi condividere","chooseWhatYouWantToShareDescription":"Seleziona lo schermo o tab che vuoi condividere per iniziare la registrazione.","clipCount_one":"{{ count }} clip","clipCount_other":"{{ count }} clips","clipSubmissionDescription":"Grazie per aver utilizzato SnapCall.","clipSubmissionTitle_one":"La tua clip \xe8 stata inviata","clipSubmissionTitle_other":"I tuoi clip sono stati inviati","confirmRemovalDescription":"Sei sicuro di voler rimuovere questa foto/video? Questa azione non pu\xf2 essere annullata.","confirmRemovalTitle":"Conferma rimozione","elementBeingProcessed":"Attendi un momento mentre il tuo {{ type }} viene elaborato...","elementCaptureSuccess":"{{ type }} catturato con successo","elementRecordedAndAttached":"La tua clip \xe8 stata inviata e allegata al thread.","feelFreeToTalkGiveMoreContext":"\uD83D\uDDE3\uFE0F Parla durante la registrazione per aggiungere pi\xf9 informazioni.","goBackToTicket":"Torna al biglietto","instructions":{"allowAccessOnPrompt":"<bold>Consenti l\'accesso</bold> alla fotocamera e al microfono.","multiplePhotos":"Scatta <bold>una foto o pi\xf9</bold> di una per i dettagli.","privacyPolicy":"Procedendo, accetti la nostra <bold>Politica sulla Privacy.</bold>","reviewAndSendAudios":"<bold>Rivedi i tuoi audio</bold> e verranno inviati automaticamente a noi.","reviewAndSendPhotos":"<bold>Convalida le tue foto</bold> e verranno inviate automaticamente a noi.","reviewAndSendVideos":"<bold>Convalida i tuoi video</bold> e verranno inviati automaticamente a noi.","screenShareInstruction":"Seleziona lo schermo o la finestra che desideri registrare.","selectScreenshare":"Clicca su \'Registra il mio schermo\' e poi seleziona la porzione che intendi registrare.","speakClearly":"<bold>Parla chiaramente</bold> e d\xec ci\xf2 che devi comunicare.","speakDuringRecord":"Puoi parlare nel mentre che registrare per aggiungere informazioni al file. ","stopScreenOnFinish":"Premi Stop per finire. Il video verr\xe0 automaticamente inviato.","tapAudioButton":"<bold>Premi il pulsante di registrazione</bold> per iniziare a registrare il tuo messaggio vocale.","tapStopVideoButton":"<bold>Premi Stop</bold> quando hai finito.","tapVideoButton":"<bold>Premi Registra</bold>. Ricordati di commentare.","videoSpeech":"Puoi <bold>parlare durante</bold> la registrazione per aggiungere dettagli."},"limit":"Registrazione video limitata a 5 min.","logIn":"Login","loggedAs":"Registrato come","mediaCount_one":"{{ count }} media","mediaCount_other":"{{ count }} media","mediaSent_one":"Il tuo file \xe8 stato inviato","mediaSent_other":"Il tuo file \xe8 stato inviato","mySuggestion":"Il mio suggerimento","noCameraAccess":"Nessun accesso alla fotocamera","noCameraAccessDescription":"Dai accesso a SnapCall al tuo microfono e fotocamera per continuare.","noCameraAndMicrophoneAccess":"Non hai fornito accesso al microfono e fotocamera. ","noCameraAndMicrophoneAccessDescription":"Permetti a SnapCall di accedere alla fotocamera e microfono per continuare.","noMicrophoneAccess":"Nessun accesso al microfono","noMicrophoneAccessDescription":"Dai a SnapCall accesso al microfono e fotocamera per continuare. ","okay":"Okay","openThread":"Apri il thread","permissionDeniedDescription":"Senza l\'accesso alla fotocamera e al microfono, non \xe8 possibile scattare foto o registrare video da condividere con il team di supporto. Si prega di concedere l\'accesso nelle impostazioni del browser.","permissionDeniedTitle":"Qualcosa \xe8 andato storto!","photoInstructionsTitle":"Pronto a scattare una foto?","recordNewMedia":"Registra nuovi media","replyAttached":"La tua risposta \xe8 stata allegata","scanQRCode":"Scansiona questo codice QR con un dispositivo compatibile.","screenShareInstructionsTitle":"Pronto a condividere il tuo schermo?","screenTitle":"Pronto a catturare il tuo schermo?","send":"Invia","sendElements_one":"Invia {{ type }}","sendElements_other":"Invia {{ count }} elementi","showQrCode":"Mostra il codice QR","startByClickingOnTheButton":"Inizia facendo clic sul pulsante qui sotto! \uD83D\uDC47","startScreenRecording":"Inizia a condividere lo schermo","startScreenShareButton":"Registra il mio schermo","stopScreenShareButton":"Ferma registrazione","submissionDescription":"La tua foto/video \xe8 stata inviata con successo. La esamineremo e ti risponderemo al pi\xf9 presto.","submissionTitle":"Grazie per il tuo invio!","switchToMobileDescription":"Goditi un\'esperienza ancora pi\xf9 pratica utilizzando il tuo telefono per scattare foto e registrare video.","switchToMobileTitle":"Passa al tuo dispositivo mobile","takeNewElement":"Cattura un nuovo {{ type }}","thanksForYourMedia":"Grazie!","upload":"Carica","useDesktopVersion":"Usa la versione desktop","videoBotError":"Si \xe8 verificato un errore.","videoBotThinking":"Elaborazione in corso...","videoInstructionsTitle":"Pronto a registrare un video?","waitVideo":"Potrebbero essere necessari fino a 15 secondi affinch\xe9 un video sia pronto.","yourMedia":"I tuoi media"},"recordingPopup":{"dismiss":"Chiudi","recordingStartText":"Questa chiamata verr\xe0 registrata a breve. Se preferisci non essere registrato, sei libero di lasciare la chiamata in questo momento.","recordingStartTitle":"Registrazione in procinto di iniziare."},"requestAccess":{"admit":"Ammettere","defaultName":"Un utente","deny":"Negare","wantToJoin":"<bold>{{name}}</bold> vuole unirsi!"},"requestDevice":{"askForDevice":"Richiedi la condivisione del {{device}}","declined":"La tua richiesta \xe8 stata rifiutata.","deviceActivated":"{{device}} attivato","deviceActivationDeclined":"Richiesta di condivisione del {{device}} rifiutata","request":"{{user}} vorrebbe condividere il tuo {{device}}","requestInput":"Richiesta di attivazione","timedOut":"La tua richiesta non ha ricevuto risposta","userDeclined":"{{user}} ha rifiutato la tua richiesta","userWouldLikeYouToActivateYourDevice":"{{name}} vorrebbe che tu condividessi il tuo {{device}}","waitingForDevice":"In attesa del {{device}} di {{name}}"},"settings":{"callSettings":"Impostazioni chiamata","devices":"Dispositivi","enableVideo":"Abilita video","help":"Aiuto","helpCenter":"Accedi all\'Assistenza","language":"Linguaggio","manageRecording":"Gestisci la registrazione","preferences":"Preferenze","selectYourCamera":"Seleziona la fotocamera","selectYourLanguage":"Seleziona la tua lingua","selectYourMicrophone":"Seleziona il microfono","startRecording":"Avvia la registrazione","stopRecording":"Ferma registrazione","title":"Impostazioni","tools":"Strumenti"},"shareLink":{"failed":"Si \xe8 verificato un errore durante l\'invio del link","invalid":"Collegamento non valido","invoice":"{{user}} ti ha inviato una fattura.","pay":"Paga","poweredBy":"Proposto da","sentToUser":"Link inviato a {{user}}","sentToUsers":"Link inviato ai partecipanti","title":"Condividi un link","title2":"Condividi un link"},"sharedHistory":{"shared":"Condiviso con te"},"snapshot":{"aSnapshotHasBeenShared":"\xc8 stato catturato uno screenshot","error":"Si \xe8 verificato un errore durante l\'invio della schermata","save":"Salva l\'immagine","sentToUser":"Schermata inviata a {{user}}","sentToUsers":"Schermanta inviata ai partecipanti","shared":"Schermata inviata","title":"Schermata"},"videoMenu":{"blockedCamera":"La fotocamera \xe8 bloccata.","cameraPermissions":"Si prega di accettare la condivisione della fotocamera prima di accedere a queste opzioni.","highDef":"Alta definizione (720p)","lowDef":"Definizione bassa (240p)","sendResolution":"Risoluzione inviata (max)","standardDef":"Definizione standard (480p)","title":"Video"},"virtualBackground":{"blur":"Blur","custom":"Custom","default":"Default","noCustomBackgrounds":"No custom backgrounds yet. Please contact your admin.","none":"None","setBackground":"Imposta sfondo","title":"Sfondo virtuale"},"youtube":{"description":"Condividi un video di YouTube con altri partecipanti.","invalid":"URL YouTube non valido","share":"Guarda ora","title":"Vedere Assieme","url":"Link Youtube"}}');
|
|
74
74
|
|
|
75
75
|
|
|
76
76
|
var $df871c254c81277d$exports = {};
|
|
77
|
-
$df871c254c81277d$exports = JSON.parse('{"audioMenu":{"blockedMicrophone":"O microfone est\xe1 bloqueado.","microphonePermissions":"Aceite o compartilhamento do microfone antes de acessar essas op\xe7\xf5es.","title":"\xc1udio"},"blockedFeature":{"descriptionConnected":"Em um plano gratuito, voc\xea n\xe3o pode usar esse recurso. Atualize seu plano para aproveitar todos os recursos de chamada.","descriptionGuest":"Voc\xea est\xe1 participando de uma chamada criada com uma vers\xe3o gratuita do SnapCall. Esse recurso s\xf3 est\xe1 dispon\xedvel com a vers\xe3o Pro.","dismissConnected":"Atualize para o Pro","dismissGuest":"OK","titleConnected":"Atualize para o Pro","titleGuest":"Recurso n\xe3o dispon\xedvel"},"common":{"new":"Novo"},"copyLink":{"copied":"Link copiado para \xe1rea de transfer\xeancia","copy":"Copiar","description":"Copie o link para a prancheta","error":"Ocorreu um erro ao tentar copiar para a \xe1rea de transfer\xeancia","title":"Copiar link"},"endView":{"addAdditionalMedia":"Adicionar m\xeddia adicional","allowsYouToShareMoreMedia":"Essa op\xe7\xe3o permite que voc\xea compartilhe uma ou mais m\xeddias para adicionar mais contexto.","callEnded":"A chamada terminou","callIsOver":"A chamada foi encerrada ou exclu\xedda","callLeft":"Voc\xea deixou a liga\xe7\xe3o","callNoLongerActive":"Essa chamada n\xe3o est\xe1 mais ativa. Obrigado por participar.","full":"Voc\xea n\xe3o pode participar desta chamada","fullDescription":"A sala est\xe1 cheia. Tente participar da chamada mais tarde.","goBack":"Volte a ligar","howWasYourExperience":"Como foi sua experi\xeancia?","ifMistakeRejoin":"Se isso foi um erro, voc\xea pode entrar novamente usando o bot\xe3o abaixo.","invalidLink":"Link inv\xe1lido","invalidOrExpired":"Esse link \xe9 inv\xe1lido ou expirou.","openDashboard":"Abra o painel","pleaseRateYourExperienceBelow":"Avalie sua experi\xeancia abaixo","thankYouForYourFeedback":"Obrigado pelo seu feedback.","tooLate":"Voc\xea chegou tarde demais","yourFeedbackHelpsUs":"Seu feedback nos ajuda a melhorar. Te vejo em breve!"},"gdpr":{"recordedWarning":"Para melhorar a qualidade do nosso servi\xe7o, essa chamada ser\xe1 gravada."},"greeting":{"askToJoin":"Pe\xe7a para participar","askingLetIn":"Pedindo permiss\xe3o para entrar...","cameraDisabled":"A c\xe2mera est\xe1 desligada","cameraEnabled":"A c\xe2mera est\xe1 ligada","canceledCallRequest":"A solicita\xe7\xe3o de chamada ser\xe1 cancelada e voc\xea ser\xe1 redirecionado para a p\xe1gina de agendamento de chamadas.","cantJoinCall":"Voc\xea n\xe3o pode participar desta chamada","cantWait":"Mal posso esperar?","cantWaitLeaveMessage":"Mal posso esperar? Voc\xea pode deixar uma mensagem e ser\xe1 contatado o mais r\xe1pido poss\xedvel.","clickOnLock":"Clique no \xedcone de <1> </1> cadeado na barra do seu navegador.","footerDescription":"Conhe\xe7a o SnapCall, a maneira mais f\xe1cil de adicionar v\xeddeo em tempo real \xe0 plataforma, produto ou servi\xe7o.","footerTitle":"Desenvolvido por SnapCall","leaveMessage":"Deixe uma mensagem","mainTitle":"Bem-vindo ao SnapCall","mediaDenied":"Acesso negado ao microfone e \xe0 c\xe2mera","microphoneDisabled":"O microfone est\xe1 desligado","microphoneEnabled":"O microfone est\xe1 ligado","name":"Nome","nameDescription":"Esse nome ser\xe1 exibido para todos os participantes da chamada.","namePlaceholder":"Ex. Lucy ou Peter","nameSubmit":"Participe da conversa","recordVideo":"Gravar v\xeddeo","recordVoice":"Gravar voz","requestACall":"Solicite uma liga\xe7\xe3o","scheduleACall":"Agende uma liga\xe7\xe3o","setting":"Configura\xe7\xf5es","sideDescription":"Digite seu nome e ajuste sua c\xe2mera e microfone","sideTitle":"Aguente firme, voc\xea \xe9 o pr\xf3ximo!","someoneDenied":"Algu\xe9m na liga\xe7\xe3o negou sua solicita\xe7\xe3o de ades\xe3o.","takeFewMinute":"Isso pode levar alguns minutos, dependendo da disponibilidade dos participantes.","whatYouCanDo":"Aqui est\xe1 o que voc\xea pode fazer","youWillJoinWhenSomeoneLetsYou":"Voc\xea participar\xe1 da chamada quando algu\xe9m {{ companyName }} deixar voc\xea entrar."},"header":{"free":"Vers\xe3o gratuita"},"iframe":{"featureNotAvailableInContext":"This feature is not available in the current context."},"invitePeople":{"PublicLink":"Link p\xfablico","addEmailToInvite":"Adicione um e-mail para convidar.","addEmails":"Adicionar e-mails...","copyCallLinkDescription":"Copie este link e envie-o para qualquer pessoa que voc\xea queira convidar para participar da chamada.","copyClipLinkDescription":"Copie este link e envie-o para qualquer pessoa que voc\xea queira convidar para gravar um clipe.","email":"E-mail","emailPlaceholder":"Por exemplo, john@acme.com","emailsOrNumberPlaceholder":"Por exemplo, john@acme.com ou +33612345678","error":"Falha ao enviar, tente novamente mais tarde.","invalidEmail":"Formato de e-mail inv\xe1lido.","invalidEmailOrNumber":"Formato de e-mail ou n\xfamero inv\xe1lido.","invitationSentTo_one":"Enviado para {{ name }}","invitationSentTo_other":"Enviado para {{ name }} e {{ otherEmailsCount }} +","invite":"Convide","inviteByEmail":"Convide por e-mail","inviteByEmailOrNumber":"Convide por e-mail ou sms","inviteCall":"Convide para participar da chamada","inviteCallDefaultMessage":"Ei! Voc\xea est\xe1 convidado a participar da nossa videochamada. Clique no link para se conectar instantaneamente.","inviteClipAudioDefaultMessage":"Ei! Grave uma mensagem de \xe1udio agora e forne\xe7a mais contexto para ajud\xe1-lo melhor.","inviteClipDefaultMessage":"Ei! Grave seu v\xeddeo agora e forne\xe7a mais contexto para ajud\xe1-lo melhor.","inviteClipPhotoDefaultMessage":"Ei! Tire uma foto e forne\xe7a mais contexto para ajud\xe1-lo melhor.","inviteClipScreenDefaultMessage":"Ei! Grave sua tela agora e nos forne\xe7a mais contexto para ajud\xe1-lo melhor.","inviteClipVideoDefaultMessage":"Ei! Grave seu v\xeddeo agora e forne\xe7a mais contexto para ajud\xe1-lo melhor.","invitePeople":"Convide pessoas","inviteRecordAudio":"Grave um \xe1udio","inviteRecordClip":"Convide para gravar clipe","inviteRecordPhoto":"Tirar uma fotografia","inviteRecordScreen":"Gravar uma tela","inviteRecordVideo":"Grave um v\xeddeo","joinTheCall":"Participe da chamada","linkToJoinCall":"Link para participar da chamada","linkToRecordAClip":"Link para gravar um clipe","message":"Mensagem","sharePublicLink":"Compartilhar link p\xfablico"},"leave":{"endCall":"Encerrar chamada para todos","leaveCall":"Sair da chamada","title":"Deixar"},"loader":{"connection":"Conectando..."},"menu":{"new":"Novo","openNewTab":"Abrir nova aba","pictureInPicture":"Imagem em imagem","quickConnect":"Conex\xe3o r\xe1pida","screenSharing":"Compartilhamento de tela","startRecord":"Gravar chamada","stopRecord":"Pare o registro","title":"Menu"},"misc":{"accept":"Aceitar","add":"Adicione","audio":"\xc1udio","camera":"C\xe2mera","cancel":"Cancel","confirm":"Confirme","decline":"Decl\xednio","download":"FA\xc7A O DOWNLOAD","from":"De","microphone":"Microfone","open":"Abrir","photo":"foto","proceed":"Proceder","remove":"Remover","screen":"Ecr\xe3","screenshot":"Captura de tela","someone":"Algu\xe9m","speaker":"Alto-falante","user":"Utilizador","video":"V\xeddeo","you":"voc\xea"},"networkIssue":{"description":"The clip information may be damaged.","title":"Network issue"},"notifications":{"aQuickRefreshShouldFix":"A quick refresh should get things back on track","agentJoinError":"Ocorreu um erro ao tentar entrar na sala como agente","allow":"Allow","blockedMicrophonePopup":"O SnapCall requer acesso \xe0 sua c\xe2mera e microfone. Clique no \xedcone de c\xe2mera bloqueada na barra de endere\xe7o do seu navegador.","blockedMicrophonePopupTitle":"A c\xe2mera e o microfone est\xe3o bloqueados","cameraError":"Ocorreu um erro ao tentar alternar a c\xe2mera","cameraRotateError":"Ocorreu um erro ao tentar girar a c\xe2mera","close":"Fechar","connectedTo":"Conectado a {{name}}","criticalError":"Ocorreu um erro cr\xedtico (erro{{code}}).","error":"Erro","errorOccuredCode":"Ocorreu um erro (erro{{code}}).","failedToDisableVideo":"Failed to disable video","failedToEnableMicrophone":"Failed to enable microphone","failedToEnableVideo":"Failed to enable video","failedToMuteUnmuteMicrophone":"Failed to mute / unmute the microphone","invitationSentToFailed":"Enviado para {{ name }} falhou.","locationIsBlocked":"Location is blocked","locationIsRequired":"Location is required","microphoneError":"Ocorreu um erro ao tentar alternar o microfone","networkStability":"Network stability","noCamera":"Nenhuma c\xe2mera dispon\xedvel","permissionToShareScreenDenied":"Permission to share screen denied","pleaseEnableLocation":"Please enable location services in your settings.","recording":"Grava\xe7\xe3o em andamento","recordingStopped":"Recording stopped","reload":"Recarregue","screensharingError":"Ocorreu um erro ao tentar ativar o compartilhamento de tela","somethingWentWrong":"Oops! Something went wrong","unableToSwitchCamera":"Unable to switch camera","unableToUnzoom":"Unable to unzoom","unableToZoom":"Unable to zoom","uploadError":"Ocorreu um erro durante o carregamento. Tente novamente mais tarde.","uploadFailed":"Upload failed","yourInternetConnectionIsUnstable":"Your internet connection is unstable"},"quickConnect":{"scan":"Digitalize esse c\xf3digo QR com a c\xe2mera do telefone para abrir a chamada.","scanTitle":"Digitalize o c\xf3digo QR","title":"Conex\xe3o r\xe1pida"},"recorder":{"addMore":"Adicione mais","addNewClip":"Adicionar novo clipe","allowAccess":"Permitir acesso","allowCamMicAccess":"Permitir acesso \xe0 cam/microfone","allowScreenShareAccess":"Permitir acesso ao compartilhamento de tela","attachElements_one":"Anexar {{ type }} ao t\xedquete","attachElements_other":"Anexar {{ count }} elementos","audioInstructionsTitle":"Pronto para gravar uma mensagem de voz?","audioLevelNotification":{"noSound":{"description":"Verifique se o microfone est\xe1 ativado.","title":"Nenhum som detectado."},"shortVideo":{"description":"Este v\xeddeo \xe9 muito curto para contextualizar.","title":"V\xeddeo curto."},"spokenWordsQuestion":{"description":"Seu v\xeddeo inclui detalhes falados suficientes?","title":"Palavras faladas."},"spokenWordsWarning":{"description":"O clipe quase n\xe3o inclui palavras faladas.","title":"Sem palavras faladas."}},"audioLevelToast":{"continueSpeaking":"Continue falando para obter um contexto mais claro.","noSound":"Nenhum som detectado.","rememberSpeaking":"Lembre-se de falar para fornecer contexto."},"chooseWhatYouWantToShare":"Escolha o que voc\xea quer compartilhar","chooseWhatYouWantToShareDescription":"Selecione a tela ou guia que voc\xea deseja compartilhar e comece a gravar.","clipCount_one":"{{ count }}clipe","clipCount_other":"{{ count }}clipes","clipSubmissionDescription":"Obrigado por usar o SnapCall.","clipSubmissionTitle_one":"Seu clipe foi enviado","clipSubmissionTitle_other":"Seus clipes foram enviados","confirmRemovalDescription":"Tem certeza de que deseja excluir esta foto/v\xeddeo? Essa a\xe7\xe3o n\xe3o pode ser desfeita.","confirmRemovalTitle":"Confirme a exclus\xe3o","elementBeingProcessed":"Aguarde enquanto o seu {{ type }} est\xe1 sendo processado...","elementCaptureSuccess":"{{ type }}capturado com sucesso","elementRecordedAndAttached":"Seu clipe foi enviado e anexado ao t\xf3pico.","feelFreeToTalkGiveMoreContext":"\uD83D\uDDE3\uFE0F Feel free to talk to give me more context.","goBackToTicket":"Voltar ao ingresso","instructions":{"allowAccessOnPrompt":"Quando solicitado, <bold> permita o acesso </bold> \xe0 c\xe2mera e ao microfone.","multiplePhotos":"Tire uma <bold> foto ou v\xe1rias </bold> para obter detalhes e revise.","privacyPolicy":"Ao continuar, voc\xea concorda com nossa <bold> Pol\xedtica de Privacidade</bold>.","reviewAndSendAudios":"<bold>Revise seus \xe1udios </bold> e eles ser\xe3o enviados para n\xf3s automaticamente.","reviewAndSendPhotos":"<bold>Valide suas fotos </bold> e elas ser\xe3o enviadas para n\xf3s automaticamente.","reviewAndSendVideos":"<bold>Revise seus v\xeddeos </bold> e eles ser\xe3o enviados para n\xf3s automaticamente.","screenShareInstruction":"Selecione a tela ou janela que voc\xea deseja gravar.","selectScreenshare":"Toque em Gravar minha tela e selecione a tela ou janela que voc\xea deseja gravar.","speakClearly":"<bold>Fale com clareza </bold> e diga o que voc\xea precisa transmitir.","speakDuringRecord":"Voc\xea pode falar durante a grava\xe7\xe3o para adicionar detalhes.","stopScreenOnFinish":"Pressione o bot\xe3o Parar quando terminar. O v\xeddeo ser\xe1 enviado para n\xf3s automaticamente.","tapAudioButton":"<bold>Toque no bot\xe3o de grava\xe7\xe3o </bold> para come\xe7ar a gravar sua mensagem de \xe1udio.","tapStopVideoButton":"<bold>Toque em parar </bold> quando terminar.","tapVideoButton":"<bold>Toque no bot\xe3o de grava\xe7\xe3o </bold> para come\xe7ar e sinta-se \xe0 vontade para comentar.","videoSpeech":"Voc\xea pode <bold> conversar durante </bold> a grava\xe7\xe3o para fornecer informa\xe7\xf5es adicionais."},"limit":"Grava\xe7\xe3o de v\xeddeo limitada a 5 min.","logIn":"Log in","loggedAs":"Registrado como","mediaCount_one":"{{ count }}m\xeddia","mediaCount_other":"{{ count }}m\xeddia","mediaSent_one":"Sua m\xeddia foi enviada","mediaSent_other":"Sua m\xeddia foi enviada","mySuggestion":"My suggestion","noCameraAccess":"Sem acesso \xe0 c\xe2mera","noCameraAccessDescription":"Sem acesso \xe0 c\xe2mera Permita o acesso \xe0 c\xe2mera em seu navegador.","noCameraAndMicrophoneAccess":"Sem acesso \xe0 c\xe2mera e ao microfone","noCameraAndMicrophoneAccessDescription":"Sem acesso \xe0 c\xe2mera e ao microfone Permita o acesso ao microfone e \xe0 c\xe2mera no seu navegador.","noMicrophoneAccess":"Sem acesso ao microfone","noMicrophoneAccessDescription":"Sem acesso ao microfone Permita o acesso ao microfone em seu navegador.","okay":"OK","openThread":"T\xf3pico aberto","permissionDeniedDescription":"Sem acesso \xe0 c\xe2mera e ao microfone, voc\xea n\xe3o poder\xe1 capturar fotos ou v\xeddeos para compartilhar com a equipe de suporte. Conceda acesso nas configura\xe7\xf5es do seu navegador.","permissionDeniedTitle":"Algo correu mal!","photoInstructionsTitle":"Pronto para tirar uma foto?","recordNewMedia":"Record new media","replyAttached":"Sua resposta foi anexada","scanQRCode":"Escaneie esse c\xf3digo QR com um dispositivo compat\xedvel.","screenShareInstructionsTitle":"Pronto para compartilhar sua tela?","screenTitle":"Pronto para capturar sua tela?","send":"Enviar","sendElements_one":"Enviar {{ type }}","sendElements_other":"Enviar {{ count }} elementos","showQrCode":"Mostrar c\xf3digo QR","startByClickingOnTheButton":"Start by clicking on the round button below! \uD83D\uDC47","startScreenRecording":"Iniciar grava\xe7\xe3o de tela","startScreenShareButton":"Gravar minha tela","stopScreenShareButton":"Pare de gravar","submissionDescription":"Sua foto/v\xeddeo foi enviada com sucesso. Vamos analis\xe1-lo e entrar em contato com voc\xea em breve.","submissionTitle":"Obrigado por sua submiss\xe3o!","switchToMobileDescription":"Experimente maior comodidade ao usar seu telefone para tirar fotos e gravar v\xeddeos.","switchToMobileTitle":"Mude para o seu dispositivo m\xf3vel","takeNewElement":"Capture um novo {{ type }}","thanksForYourMedia":"Thanks for your media!","upload":"upload","useDesktopVersion":"Use a vers\xe3o para desktop","videoBotError":"Sorry, an error has occured.","videoBotThinking":"Thinking...","videoInstructionsTitle":"Pronto para gravar um v\xeddeo?","waitVideo":"Um v\xeddeo pode levar at\xe9 15 segundos para ficar pronto.","yourMedia":"Your media"},"recordingPopup":{"dismiss":"Ignorar","recordingStartText":"Essa liga\xe7\xe3o ser\xe1 gravada em breve. Se voc\xea preferir n\xe3o ser gravado, sinta-se \xe0 vontade para sair da liga\xe7\xe3o neste momento.","recordingStartTitle":"A grava\xe7\xe3o est\xe1 prestes a come\xe7ar."},"requestAccess":{"admit":"Admitem","defaultName":"Um usu\xe1rio","deny":"Negar","wantToJoin":"<bold>{{name}}</bold>quer se juntar!"},"requestDevice":{"askForDevice":"Pergunte por {{device}}","declined":"Sua solicita\xe7\xe3o foi recusada.","deviceActivated":"{{device}}ativado","deviceActivationDeclined":"{{device}}ativa\xe7\xe3o declinada","request":"{{user}}gostaria que voc\xea compartilhasse seu {{device}}","requestInput":"Solicitar dispositivos de entrada","timedOut":"Sua solicita\xe7\xe3o atingiu o tempo limite.","userDeclined":"{{user}}recusou sua solicita\xe7\xe3o.","userWouldLikeYouToActivateYourDevice":"{{name}}gostaria que voc\xea ativasse seu{{device}}.","waitingForDevice":"Esperando por {{name}} n\xf3s {{device}}"},"settings":{"callSettings":"Call settings","devices":"Dispositivos","enableVideo":"Enable video","help":"Socorro","helpCenter":"Acesse a Central de Ajuda","language":"Idioma","manageRecording":"Manage recording","preferences":"Prefer\xeancias","selectYourCamera":"Selecione sua c\xe2mera preferida","selectYourLanguage":"Selecione seu idioma preferido","selectYourMicrophone":"Selecione seu microfone preferido","startRecording":"Start recording","stopRecording":"Stop recording","title":"Configura\xe7\xf5es","tools":"Tools"},"shareLink":{"failed":"Falha ao enviar o link","invalid":"Link inv\xe1lido","invoice":"{{user}}enviou uma fatura para voc\xea.","pay":"Pagar","poweredBy":"Desenvolvido por","sentToUser":"Link enviado para {{user}}","sentToUsers":"Link enviado aos usu\xe1rios","title":"Compartilhar link","title2":"Compartilhe um link"},"sharedHistory":{"shared":"Compartilhado com voc\xea"},"snapshot":{"aSnapshotHasBeenShared":"Um instant\xe2neo foi compartilhado.","error":"Ocorreu um erro ao tentar enviar o instant\xe2neo","save":"Salvar foto","sentToUser":"Instant\xe2neo enviado para {{user}}","sentToUsers":"Instant\xe2neo enviado aos usu\xe1rios.","shared":"Instant\xe2neo compartilhado.","title":"Instant\xe2neo"},"videoMenu":{"blockedCamera":"A c\xe2mera est\xe1 bloqueada.","cameraPermissions":"Aceite o compartilhamento da c\xe2mera antes de acessar essas op\xe7\xf5es.","highDef":"Alta defini\xe7\xe3o (720p)","lowDef":"Baixa defini\xe7\xe3o (240p)","sendResolution":"Resolu\xe7\xe3o de envio (m\xe1xima)","standardDef":"Defini\xe7\xe3o padr\xe3o (480p)","title":"V\xeddeo"},"virtualBackground":{"blur":"Blur","custom":"Custom","default":"Default","noCustomBackgrounds":"No custom backgrounds yet. Please contact your admin.","none":"None","setBackground":"Definir plano de fundo","title":"Plano de fundo virtual"},"youtube":{"description":"Share a YouTube video with other participants.","invalid":"URL inv\xe1lida do YouTube","share":"Assista agora","title":"Assista juntos","url":"URL DO YOUTUBE"}}');
|
|
77
|
+
$df871c254c81277d$exports = JSON.parse('{"audioMenu":{"blockedMicrophone":"O microfone est\xe1 bloqueado.","microphonePermissions":"Aceite o compartilhamento do microfone antes de acessar essas op\xe7\xf5es.","title":"\xc1udio"},"blockedFeature":{"descriptionConnected":"Em um plano gratuito, voc\xea n\xe3o pode usar esse recurso. Atualize seu plano para aproveitar todos os recursos de chamada.","descriptionGuest":"Voc\xea est\xe1 participando de uma chamada criada com uma vers\xe3o gratuita do SnapCall. Esse recurso s\xf3 est\xe1 dispon\xedvel com a vers\xe3o Pro.","dismissConnected":"Atualize para o Pro","dismissGuest":"OK","titleConnected":"Atualize para o Pro","titleGuest":"Recurso n\xe3o dispon\xedvel"},"common":{"new":"Novo"},"copyLink":{"copied":"Link copiado para \xe1rea de transfer\xeancia","copy":"Copiar","description":"Copie o link para a prancheta","error":"Ocorreu um erro ao tentar copiar para a \xe1rea de transfer\xeancia","title":"Copiar link"},"endView":{"addAdditionalMedia":"Adicionar m\xeddia adicional","allowsYouToShareMoreMedia":"Essa op\xe7\xe3o permite que voc\xea compartilhe uma ou mais m\xeddias para adicionar mais contexto.","callEnded":"A chamada terminou","callIsOver":"A chamada foi encerrada ou exclu\xedda","callLeft":"Voc\xea deixou a liga\xe7\xe3o","callNoLongerActive":"Essa chamada n\xe3o est\xe1 mais ativa. Obrigado por participar.","full":"Voc\xea n\xe3o pode participar desta chamada","fullDescription":"A sala est\xe1 cheia. Tente participar da chamada mais tarde.","goBack":"Volte a ligar","howWasYourExperience":"Como foi sua experi\xeancia?","ifMistakeRejoin":"Se isso foi um erro, voc\xea pode entrar novamente usando o bot\xe3o abaixo.","invalidLink":"Link inv\xe1lido","invalidOrExpired":"Esse link \xe9 inv\xe1lido ou expirou.","openDashboard":"Abra o painel","pleaseRateYourExperienceBelow":"Avalie sua experi\xeancia abaixo","thankYouForYourFeedback":"Obrigado pelo seu feedback.","tooLate":"Voc\xea chegou tarde demais","yourFeedbackHelpsUs":"Seu feedback nos ajuda a melhorar. Te vejo em breve!"},"gdpr":{"recordedWarning":"Para melhorar a qualidade do nosso servi\xe7o, essa chamada ser\xe1 gravada."},"greeting":{"askToJoin":"Pe\xe7a para participar","askingLetIn":"Pedindo permiss\xe3o para entrar...","cameraDisabled":"A c\xe2mera est\xe1 desligada","cameraEnabled":"A c\xe2mera est\xe1 ligada","canceledCallRequest":"A solicita\xe7\xe3o de chamada ser\xe1 cancelada e voc\xea ser\xe1 redirecionado para a p\xe1gina de agendamento de chamadas.","cantJoinCall":"Voc\xea n\xe3o pode participar desta chamada","cantWait":"Mal posso esperar?","cantWaitLeaveMessage":"Mal posso esperar? Voc\xea pode deixar uma mensagem e ser\xe1 contatado o mais r\xe1pido poss\xedvel.","clickOnLock":"Clique no \xedcone de <1> </1> cadeado na barra do seu navegador.","footerDescription":"Conhe\xe7a o SnapCall, a maneira mais f\xe1cil de adicionar v\xeddeo em tempo real \xe0 plataforma, produto ou servi\xe7o.","footerTitle":"Desenvolvido por SnapCall","leaveMessage":"Deixe uma mensagem","mainTitle":"Bem-vindo ao SnapCall","mediaDenied":"Acesso negado ao microfone e \xe0 c\xe2mera","microphoneDisabled":"O microfone est\xe1 desligado","microphoneEnabled":"O microfone est\xe1 ligado","name":"Nome","nameDescription":"Esse nome ser\xe1 exibido para todos os participantes da chamada.","namePlaceholder":"Ex. Lucy ou Peter","nameSubmit":"Participe da conversa","recordVideo":"Gravar v\xeddeo","recordVoice":"Gravar voz","requestACall":"Solicite uma liga\xe7\xe3o","scheduleACall":"Agende uma liga\xe7\xe3o","setting":"Configura\xe7\xf5es","sideDescription":"Digite seu nome e ajuste sua c\xe2mera e microfone","sideTitle":"Aguente firme, voc\xea \xe9 o pr\xf3ximo!","someoneDenied":"Algu\xe9m na liga\xe7\xe3o negou sua solicita\xe7\xe3o de ades\xe3o.","takeFewMinute":"Isso pode levar alguns minutos, dependendo da disponibilidade dos participantes.","whatYouCanDo":"Aqui est\xe1 o que voc\xea pode fazer","youWillJoinWhenSomeoneLetsYou":"Voc\xea participar\xe1 da chamada quando algu\xe9m {{ companyName }} deixar voc\xea entrar."},"header":{"free":"Vers\xe3o gratuita"},"iframe":{"featureNotAvailableInContext":"This feature is not available in the current context."},"invitePeople":{"PublicLink":"Link p\xfablico","addEmailToInvite":"Adicione um e-mail para convidar.","addEmails":"Adicionar e-mails...","copyCallLinkDescription":"Copie este link e envie-o para qualquer pessoa que voc\xea queira convidar para participar da chamada.","copyClipLinkDescription":"Copie este link e envie-o para qualquer pessoa que voc\xea queira convidar para gravar um clipe.","email":"E-mail","emailPlaceholder":"Por exemplo, john@acme.com","emailsOrNumberPlaceholder":"Por exemplo, john@acme.com ou +33612345678","error":"Falha ao enviar, tente novamente mais tarde.","invalidEmail":"Formato de e-mail inv\xe1lido.","invalidEmailOrNumber":"Formato de e-mail ou n\xfamero inv\xe1lido.","invitationSentTo_one":"Enviado para {{ name }}","invitationSentTo_other":"Enviado para {{ name }} e {{ otherEmailsCount }} +","invite":"Convide","inviteByEmail":"Convide por e-mail","inviteByEmailOrNumber":"Convide por e-mail ou sms","inviteCall":"Convide para participar da chamada","inviteCallDefaultMessage":"Ei! Voc\xea est\xe1 convidado a participar da nossa videochamada. Clique no link para se conectar instantaneamente.","inviteClipAudioDefaultMessage":"Ei! Grave uma mensagem de \xe1udio agora e forne\xe7a mais contexto para ajud\xe1-lo melhor.","inviteClipDefaultMessage":"Ei! Grave seu v\xeddeo agora e forne\xe7a mais contexto para ajud\xe1-lo melhor.","inviteClipPhotoDefaultMessage":"Ei! Tire uma foto e forne\xe7a mais contexto para ajud\xe1-lo melhor.","inviteClipScreenDefaultMessage":"Ei! Grave sua tela agora e nos forne\xe7a mais contexto para ajud\xe1-lo melhor.","inviteClipVideoDefaultMessage":"Ei! Grave seu v\xeddeo agora e forne\xe7a mais contexto para ajud\xe1-lo melhor.","invitePeople":"Convide pessoas","inviteRecordAudio":"Grave um \xe1udio","inviteRecordClip":"Convide para gravar clipe","inviteRecordPhoto":"Tirar uma fotografia","inviteRecordScreen":"Gravar uma tela","inviteRecordVideo":"Grave um v\xeddeo","joinTheCall":"Participe da chamada","linkToJoinCall":"Link para participar da chamada","linkToRecordAClip":"Link para gravar um clipe","message":"Mensagem","sharePublicLink":"Compartilhar link p\xfablico"},"leave":{"endCall":"Encerrar chamada para todos","leaveCall":"Sair da chamada","title":"Deixar"},"loader":{"connection":"Conectando..."},"menu":{"new":"Novo","openNewTab":"Abrir nova aba","pictureInPicture":"Imagem em imagem","quickConnect":"Conex\xe3o r\xe1pida","screenSharing":"Compartilhamento de tela","startRecord":"Gravar chamada","stopRecord":"Pare o registro","title":"Menu"},"misc":{"accept":"Aceitar","add":"Adicione","audio":"\xc1udio","camera":"C\xe2mera","cancel":"Cancel","confirm":"Confirme","decline":"Decl\xednio","download":"FA\xc7A O DOWNLOAD","from":"De","microphone":"Microfone","open":"Abrir","pdf":"PDF","photo":"foto","proceed":"Proceder","remove":"Remover","screen":"Ecr\xe3","screenshot":"Captura de tela","someone":"Algu\xe9m","speaker":"Alto-falante","user":"Utilizador","video":"V\xeddeo","you":"voc\xea"},"networkIssue":{"description":"The clip information may be damaged.","title":"Network issue"},"notifications":{"aQuickRefreshShouldFix":"A quick refresh should get things back on track","agentJoinError":"Ocorreu um erro ao tentar entrar na sala como agente","allow":"Allow","blockedMicrophonePopup":"O SnapCall requer acesso \xe0 sua c\xe2mera e microfone. Clique no \xedcone de c\xe2mera bloqueada na barra de endere\xe7o do seu navegador.","blockedMicrophonePopupTitle":"A c\xe2mera e o microfone est\xe3o bloqueados","cameraError":"Ocorreu um erro ao tentar alternar a c\xe2mera","cameraRotateError":"Ocorreu um erro ao tentar girar a c\xe2mera","close":"Fechar","connectedTo":"Conectado a {{name}}","criticalError":"Ocorreu um erro cr\xedtico (erro{{code}}).","error":"Erro","errorOccuredCode":"Ocorreu um erro (erro{{code}}).","failedToDisableVideo":"Failed to disable video","failedToEnableMicrophone":"Failed to enable microphone","failedToEnableVideo":"Failed to enable video","failedToMuteUnmuteMicrophone":"Failed to mute / unmute the microphone","invitationSentToFailed":"Enviado para {{ name }} falhou.","locationIsBlocked":"Location is blocked","locationIsRequired":"Location is required","microphoneError":"Ocorreu um erro ao tentar alternar o microfone","networkStability":"Network stability","noCamera":"Nenhuma c\xe2mera dispon\xedvel","permissionToShareScreenDenied":"Permission to share screen denied","pleaseEnableLocation":"Please enable location services in your settings.","recording":"Grava\xe7\xe3o em andamento","recordingStopped":"Recording stopped","reload":"Recarregue","screensharingError":"Ocorreu um erro ao tentar ativar o compartilhamento de tela","somethingWentWrong":"Oops! Something went wrong","unableToSwitchCamera":"Unable to switch camera","unableToUnzoom":"Unable to unzoom","unableToZoom":"Unable to zoom","uploadError":"Ocorreu um erro durante o carregamento. Tente novamente mais tarde.","uploadFailed":"Upload failed","yourInternetConnectionIsUnstable":"Your internet connection is unstable"},"quickConnect":{"scan":"Digitalize esse c\xf3digo QR com a c\xe2mera do telefone para abrir a chamada.","scanTitle":"Digitalize o c\xf3digo QR","title":"Conex\xe3o r\xe1pida"},"recorder":{"addMore":"Adicione mais","addNewClip":"Adicionar novo clipe","allowAccess":"Permitir acesso","allowCamMicAccess":"Permitir acesso \xe0 cam/microfone","allowScreenShareAccess":"Permitir acesso ao compartilhamento de tela","attachElements_one":"Anexar {{ type }} ao t\xedquete","attachElements_other":"Anexar {{ count }} elementos","audioInstructionsTitle":"Pronto para gravar uma mensagem de voz?","audioLevelNotification":{"noSound":{"description":"Verifique se o microfone est\xe1 ativado.","title":"Nenhum som detectado."},"shortVideo":{"description":"Este v\xeddeo \xe9 muito curto para contextualizar.","title":"V\xeddeo curto."},"spokenWordsQuestion":{"description":"Seu v\xeddeo inclui detalhes falados suficientes?","title":"Palavras faladas."},"spokenWordsWarning":{"description":"O clipe quase n\xe3o inclui palavras faladas.","title":"Sem palavras faladas."}},"audioLevelToast":{"continueSpeaking":"Continue falando para obter um contexto mais claro.","noSound":"Nenhum som detectado.","rememberSpeaking":"Lembre-se de falar para fornecer contexto."},"chooseWhatYouWantToShare":"Escolha o que voc\xea quer compartilhar","chooseWhatYouWantToShareDescription":"Selecione a tela ou guia que voc\xea deseja compartilhar e comece a gravar.","clipCount_one":"{{ count }}clipe","clipCount_other":"{{ count }}clipes","clipSubmissionDescription":"Obrigado por usar o SnapCall.","clipSubmissionTitle_one":"Seu clipe foi enviado","clipSubmissionTitle_other":"Seus clipes foram enviados","confirmRemovalDescription":"Tem certeza de que deseja excluir esta foto/v\xeddeo? Essa a\xe7\xe3o n\xe3o pode ser desfeita.","confirmRemovalTitle":"Confirme a exclus\xe3o","elementBeingProcessed":"Aguarde enquanto o seu {{ type }} est\xe1 sendo processado...","elementCaptureSuccess":"{{ type }}capturado com sucesso","elementRecordedAndAttached":"Seu clipe foi enviado e anexado ao t\xf3pico.","feelFreeToTalkGiveMoreContext":"\uD83D\uDDE3\uFE0F Feel free to talk to give me more context.","goBackToTicket":"Voltar ao ingresso","instructions":{"allowAccessOnPrompt":"Quando solicitado, <bold> permita o acesso </bold> \xe0 c\xe2mera e ao microfone.","multiplePhotos":"Tire uma <bold> foto ou v\xe1rias </bold> para obter detalhes e revise.","privacyPolicy":"Ao continuar, voc\xea concorda com nossa <bold> Pol\xedtica de Privacidade</bold>.","reviewAndSendAudios":"<bold>Revise seus \xe1udios </bold> e eles ser\xe3o enviados para n\xf3s automaticamente.","reviewAndSendPhotos":"<bold>Valide suas fotos </bold> e elas ser\xe3o enviadas para n\xf3s automaticamente.","reviewAndSendVideos":"<bold>Revise seus v\xeddeos </bold> e eles ser\xe3o enviados para n\xf3s automaticamente.","screenShareInstruction":"Selecione a tela ou janela que voc\xea deseja gravar.","selectScreenshare":"Toque em Gravar minha tela e selecione a tela ou janela que voc\xea deseja gravar.","speakClearly":"<bold>Fale com clareza </bold> e diga o que voc\xea precisa transmitir.","speakDuringRecord":"Voc\xea pode falar durante a grava\xe7\xe3o para adicionar detalhes.","stopScreenOnFinish":"Pressione o bot\xe3o Parar quando terminar. O v\xeddeo ser\xe1 enviado para n\xf3s automaticamente.","tapAudioButton":"<bold>Toque no bot\xe3o de grava\xe7\xe3o </bold> para come\xe7ar a gravar sua mensagem de \xe1udio.","tapStopVideoButton":"<bold>Toque em parar </bold> quando terminar.","tapVideoButton":"<bold>Toque no bot\xe3o de grava\xe7\xe3o </bold> para come\xe7ar e sinta-se \xe0 vontade para comentar.","videoSpeech":"Voc\xea pode <bold> conversar durante </bold> a grava\xe7\xe3o para fornecer informa\xe7\xf5es adicionais."},"limit":"Grava\xe7\xe3o de v\xeddeo limitada a 5 min.","logIn":"Log in","loggedAs":"Registrado como","mediaCount_one":"{{ count }}m\xeddia","mediaCount_other":"{{ count }}m\xeddia","mediaSent_one":"Sua m\xeddia foi enviada","mediaSent_other":"Sua m\xeddia foi enviada","mySuggestion":"My suggestion","noCameraAccess":"Sem acesso \xe0 c\xe2mera","noCameraAccessDescription":"Sem acesso \xe0 c\xe2mera Permita o acesso \xe0 c\xe2mera em seu navegador.","noCameraAndMicrophoneAccess":"Sem acesso \xe0 c\xe2mera e ao microfone","noCameraAndMicrophoneAccessDescription":"Sem acesso \xe0 c\xe2mera e ao microfone Permita o acesso ao microfone e \xe0 c\xe2mera no seu navegador.","noMicrophoneAccess":"Sem acesso ao microfone","noMicrophoneAccessDescription":"Sem acesso ao microfone Permita o acesso ao microfone em seu navegador.","okay":"OK","openThread":"T\xf3pico aberto","permissionDeniedDescription":"Sem acesso \xe0 c\xe2mera e ao microfone, voc\xea n\xe3o poder\xe1 capturar fotos ou v\xeddeos para compartilhar com a equipe de suporte. Conceda acesso nas configura\xe7\xf5es do seu navegador.","permissionDeniedTitle":"Algo correu mal!","photoInstructionsTitle":"Pronto para tirar uma foto?","recordNewMedia":"Record new media","replyAttached":"Sua resposta foi anexada","scanQRCode":"Escaneie esse c\xf3digo QR com um dispositivo compat\xedvel.","screenShareInstructionsTitle":"Pronto para compartilhar sua tela?","screenTitle":"Pronto para capturar sua tela?","send":"Enviar","sendElements_one":"Enviar {{ type }}","sendElements_other":"Enviar {{ count }} elementos","showQrCode":"Mostrar c\xf3digo QR","startByClickingOnTheButton":"Start by clicking on the round button below! \uD83D\uDC47","startScreenRecording":"Iniciar grava\xe7\xe3o de tela","startScreenShareButton":"Gravar minha tela","stopScreenShareButton":"Pare de gravar","submissionDescription":"Sua foto/v\xeddeo foi enviada com sucesso. Vamos analis\xe1-lo e entrar em contato com voc\xea em breve.","submissionTitle":"Obrigado por sua submiss\xe3o!","switchToMobileDescription":"Experimente maior comodidade ao usar seu telefone para tirar fotos e gravar v\xeddeos.","switchToMobileTitle":"Mude para o seu dispositivo m\xf3vel","takeNewElement":"Capture um novo {{ type }}","thanksForYourMedia":"Thanks for your media!","upload":"upload","useDesktopVersion":"Use a vers\xe3o para desktop","videoBotError":"Sorry, an error has occured.","videoBotThinking":"Thinking...","videoInstructionsTitle":"Pronto para gravar um v\xeddeo?","waitVideo":"Um v\xeddeo pode levar at\xe9 15 segundos para ficar pronto.","yourMedia":"Your media"},"recordingPopup":{"dismiss":"Ignorar","recordingStartText":"Essa liga\xe7\xe3o ser\xe1 gravada em breve. Se voc\xea preferir n\xe3o ser gravado, sinta-se \xe0 vontade para sair da liga\xe7\xe3o neste momento.","recordingStartTitle":"A grava\xe7\xe3o est\xe1 prestes a come\xe7ar."},"requestAccess":{"admit":"Admitem","defaultName":"Um usu\xe1rio","deny":"Negar","wantToJoin":"<bold>{{name}}</bold>quer se juntar!"},"requestDevice":{"askForDevice":"Pergunte por {{device}}","declined":"Sua solicita\xe7\xe3o foi recusada.","deviceActivated":"{{device}}ativado","deviceActivationDeclined":"{{device}}ativa\xe7\xe3o declinada","request":"{{user}}gostaria que voc\xea compartilhasse seu {{device}}","requestInput":"Solicitar dispositivos de entrada","timedOut":"Sua solicita\xe7\xe3o atingiu o tempo limite.","userDeclined":"{{user}}recusou sua solicita\xe7\xe3o.","userWouldLikeYouToActivateYourDevice":"{{name}}gostaria que voc\xea ativasse seu{{device}}.","waitingForDevice":"Esperando por {{name}} n\xf3s {{device}}"},"settings":{"callSettings":"Call settings","devices":"Dispositivos","enableVideo":"Enable video","help":"Socorro","helpCenter":"Acesse a Central de Ajuda","language":"Idioma","manageRecording":"Manage recording","preferences":"Prefer\xeancias","selectYourCamera":"Selecione sua c\xe2mera preferida","selectYourLanguage":"Selecione seu idioma preferido","selectYourMicrophone":"Selecione seu microfone preferido","startRecording":"Start recording","stopRecording":"Stop recording","title":"Configura\xe7\xf5es","tools":"Tools"},"shareLink":{"failed":"Falha ao enviar o link","invalid":"Link inv\xe1lido","invoice":"{{user}}enviou uma fatura para voc\xea.","pay":"Pagar","poweredBy":"Desenvolvido por","sentToUser":"Link enviado para {{user}}","sentToUsers":"Link enviado aos usu\xe1rios","title":"Compartilhar link","title2":"Compartilhe um link"},"sharedHistory":{"shared":"Compartilhado com voc\xea"},"snapshot":{"aSnapshotHasBeenShared":"Um instant\xe2neo foi compartilhado.","error":"Ocorreu um erro ao tentar enviar o instant\xe2neo","save":"Salvar foto","sentToUser":"Instant\xe2neo enviado para {{user}}","sentToUsers":"Instant\xe2neo enviado aos usu\xe1rios.","shared":"Instant\xe2neo compartilhado.","title":"Instant\xe2neo"},"videoMenu":{"blockedCamera":"A c\xe2mera est\xe1 bloqueada.","cameraPermissions":"Aceite o compartilhamento da c\xe2mera antes de acessar essas op\xe7\xf5es.","highDef":"Alta defini\xe7\xe3o (720p)","lowDef":"Baixa defini\xe7\xe3o (240p)","sendResolution":"Resolu\xe7\xe3o de envio (m\xe1xima)","standardDef":"Defini\xe7\xe3o padr\xe3o (480p)","title":"V\xeddeo"},"virtualBackground":{"blur":"Blur","custom":"Custom","default":"Default","noCustomBackgrounds":"No custom backgrounds yet. Please contact your admin.","none":"None","setBackground":"Definir plano de fundo","title":"Plano de fundo virtual"},"youtube":{"description":"Share a YouTube video with other participants.","invalid":"URL inv\xe1lida do YouTube","share":"Assista agora","title":"Assista juntos","url":"URL DO YOUTUBE"}}');
|
|
78
78
|
|
|
79
79
|
|
|
80
80
|
const $b45c0bcc142f0b5e$export$150b732325d14d04 = {
|
|
@@ -910,7 +910,7 @@ class $1bfa11322d1d6377$var$AudioRenderer {
|
|
|
910
910
|
var $1bfa11322d1d6377$export$2e2bcd8739ae039 = $1bfa11322d1d6377$var$AudioRenderer;
|
|
911
911
|
|
|
912
912
|
|
|
913
|
-
const $3575c8a563f2a1da$
|
|
913
|
+
const $3575c8a563f2a1da$var$captureSnapShot = async (video)=>{
|
|
914
914
|
let { videoWidth: videoWidth, videoHeight: videoHeight } = video;
|
|
915
915
|
let width = video.offsetWidth;
|
|
916
916
|
let height = video.offsetHeight;
|
|
@@ -958,12 +958,41 @@ const $3575c8a563f2a1da$export$674c90a250a8b2c5 = async (video)=>{
|
|
|
958
958
|
ctx?.drawImage(video, x, y, videoWidth, videoHeight, 0, 0, canvas.width, canvas.height);
|
|
959
959
|
return canvas.toDataURL('image/jpeg');
|
|
960
960
|
};
|
|
961
|
+
const $3575c8a563f2a1da$export$674c90a250a8b2c5 = async (htmlVideo, camera)=>{
|
|
962
|
+
const mediaStream = htmlVideo.srcObject;
|
|
963
|
+
const track = mediaStream.getVideoTracks()[0];
|
|
964
|
+
if (!track) throw new Error('no video track found');
|
|
965
|
+
const trackConstraint = track.getConstraints();
|
|
966
|
+
// assume that 4096 by 4096 is the best quality actually.
|
|
967
|
+
if (trackConstraint.width && trackConstraint.height) {
|
|
968
|
+
const width = htmlVideo.videoWidth;
|
|
969
|
+
const height = htmlVideo.videoHeight;
|
|
970
|
+
await track.applyConstraints({
|
|
971
|
+
width: {
|
|
972
|
+
ideal: 4096
|
|
973
|
+
},
|
|
974
|
+
height: {
|
|
975
|
+
ideal: 4096
|
|
976
|
+
},
|
|
977
|
+
advanced: [
|
|
978
|
+
{
|
|
979
|
+
aspectRatio: Math.round(width * 100 / height) / 100
|
|
980
|
+
},
|
|
981
|
+
...camera.trackConstraint.advanced
|
|
982
|
+
]
|
|
983
|
+
});
|
|
984
|
+
}
|
|
985
|
+
const snapshot = await $3575c8a563f2a1da$var$captureSnapShot(htmlVideo);
|
|
986
|
+
await camera.applyConstraints();
|
|
987
|
+
return snapshot;
|
|
988
|
+
};
|
|
961
989
|
const $3575c8a563f2a1da$export$4a210166cc9cb64b = async (src)=>{
|
|
962
990
|
const video = document.createElement('video');
|
|
963
991
|
const stream = new MediaStream();
|
|
964
992
|
stream.addTrack(src);
|
|
965
993
|
video.srcObject = stream;
|
|
966
994
|
video.setAttribute('muted', 'true');
|
|
995
|
+
video.setAttribute('playsinline', 'true');
|
|
967
996
|
const settings = src.getSettings();
|
|
968
997
|
video.width = settings.width || 0;
|
|
969
998
|
video.height = settings.height || 0;
|
|
@@ -1137,6 +1166,185 @@ class $a62e7f17be5cf3a0$export$2e2bcd8739ae039 {
|
|
|
1137
1166
|
}
|
|
1138
1167
|
|
|
1139
1168
|
|
|
1169
|
+
const $93041e14f6aa3f24$var$audioContextConstructor = window.AudioContext || window.webkitAudioContext;
|
|
1170
|
+
class $93041e14f6aa3f24$export$22ddc20344c01547 {
|
|
1171
|
+
constructor(){
|
|
1172
|
+
this.audioSources = {};
|
|
1173
|
+
this.tracks = {};
|
|
1174
|
+
this.audioContext = new $93041e14f6aa3f24$var$audioContextConstructor();
|
|
1175
|
+
this.audioDestination = this.audioContext.createMediaStreamDestination();
|
|
1176
|
+
}
|
|
1177
|
+
getSetting(identifier) {
|
|
1178
|
+
return this.tracks[identifier]?.getSettings();
|
|
1179
|
+
}
|
|
1180
|
+
removeTrack(identifier) {
|
|
1181
|
+
const track = this.tracks[identifier];
|
|
1182
|
+
if (track) {
|
|
1183
|
+
this.audioSources[identifier]?.disconnect();
|
|
1184
|
+
delete this.tracks[identifier];
|
|
1185
|
+
delete this.audioSources[identifier];
|
|
1186
|
+
track.enabled = false;
|
|
1187
|
+
}
|
|
1188
|
+
}
|
|
1189
|
+
setTrackEnabled(identifier, enabled) {
|
|
1190
|
+
const track = this.tracks[identifier];
|
|
1191
|
+
if (track) track.enabled = enabled;
|
|
1192
|
+
else console.warn(`Track ${identifier} not found`);
|
|
1193
|
+
}
|
|
1194
|
+
addTrack(identifier, track) {
|
|
1195
|
+
if (track.kind === 'audio') {
|
|
1196
|
+
this.removeTrack(identifier);
|
|
1197
|
+
const stream = new MediaStream([
|
|
1198
|
+
track
|
|
1199
|
+
]);
|
|
1200
|
+
const audioSource = this.audioContext.createMediaStreamSource(stream);
|
|
1201
|
+
this.audioSources[identifier] = audioSource;
|
|
1202
|
+
this.tracks[identifier] = track;
|
|
1203
|
+
this.tracks[identifier].enabled = true;
|
|
1204
|
+
if (this.audioDestination) audioSource.connect(this.audioDestination);
|
|
1205
|
+
}
|
|
1206
|
+
}
|
|
1207
|
+
getFinalTrack() {
|
|
1208
|
+
return this.audioDestination.stream.getTracks()[0];
|
|
1209
|
+
}
|
|
1210
|
+
removeAll() {
|
|
1211
|
+
Object.keys(this.tracks).forEach((identifier)=>{
|
|
1212
|
+
this.removeTrack(identifier);
|
|
1213
|
+
});
|
|
1214
|
+
}
|
|
1215
|
+
}
|
|
1216
|
+
|
|
1217
|
+
|
|
1218
|
+
|
|
1219
|
+
const $96c060f28b764056$export$8a48322ecc4782be = async (url, streamToken, file)=>{
|
|
1220
|
+
const searchParams = new URLSearchParams({
|
|
1221
|
+
filename: file
|
|
1222
|
+
});
|
|
1223
|
+
const result = await fetch(`${url}/public/streams/${streamToken}/temporary-assets?${searchParams}`, {
|
|
1224
|
+
method: 'get',
|
|
1225
|
+
headers: {
|
|
1226
|
+
'Content-Type': 'application/json'
|
|
1227
|
+
}
|
|
1228
|
+
}).then((response)=>response.json());
|
|
1229
|
+
return result;
|
|
1230
|
+
};
|
|
1231
|
+
const $96c060f28b764056$export$df987b50509121ea = async (url, streamToken, file)=>{
|
|
1232
|
+
const searchParams = new URLSearchParams({
|
|
1233
|
+
filename: file
|
|
1234
|
+
});
|
|
1235
|
+
const result = await fetch(`${url}/public/streams/${streamToken}/temporary-assets?${searchParams}`, {
|
|
1236
|
+
method: 'delete',
|
|
1237
|
+
headers: {
|
|
1238
|
+
'Content-Type': 'application/json'
|
|
1239
|
+
}
|
|
1240
|
+
}).then((response)=>response.json());
|
|
1241
|
+
return result;
|
|
1242
|
+
};
|
|
1243
|
+
|
|
1244
|
+
|
|
1245
|
+
|
|
1246
|
+
var $7f16567c4f721486$require$Buffer = $jQDcL$buffer.Buffer;
|
|
1247
|
+
const $7f16567c4f721486$export$bfc52a1c1f84ba66 = async (apiUrl, { token: token, base64Image: base64Image, recordingGroup: recordingGroup })=>{
|
|
1248
|
+
const file = `${(0, $jQDcL$uuid.v4)()}.jpeg`;
|
|
1249
|
+
const uploadBody = $7f16567c4f721486$require$Buffer.from(String(base64Image).replace(/^data:image\/\w+;base64,/, ''), 'base64');
|
|
1250
|
+
const { url: url, headers: headers, filename: filename } = await fetch(`${apiUrl}/public/streams/${token}/events/upload`, {
|
|
1251
|
+
method: 'POST',
|
|
1252
|
+
headers: {
|
|
1253
|
+
'Content-Type': 'application/json'
|
|
1254
|
+
},
|
|
1255
|
+
body: JSON.stringify({
|
|
1256
|
+
type: 'image',
|
|
1257
|
+
filename: file,
|
|
1258
|
+
contentLength: uploadBody.length,
|
|
1259
|
+
recordingGroup: recordingGroup
|
|
1260
|
+
})
|
|
1261
|
+
}).then((res)=>res.json());
|
|
1262
|
+
await fetch(url, {
|
|
1263
|
+
method: 'PUT',
|
|
1264
|
+
headers: {
|
|
1265
|
+
...headers,
|
|
1266
|
+
'Content-Type': 'image/*',
|
|
1267
|
+
'Content-Length': uploadBody.length
|
|
1268
|
+
},
|
|
1269
|
+
body: uploadBody
|
|
1270
|
+
});
|
|
1271
|
+
const { url: assetUrl } = await (0, $96c060f28b764056$export$8a48322ecc4782be)(apiUrl, token, filename);
|
|
1272
|
+
return {
|
|
1273
|
+
filename: filename,
|
|
1274
|
+
url: assetUrl
|
|
1275
|
+
};
|
|
1276
|
+
};
|
|
1277
|
+
|
|
1278
|
+
|
|
1279
|
+
const $3898fb88b880f5ba$export$de363e709c412c8a = (fn, wait = 300)=>{
|
|
1280
|
+
let inThrottle, lastFn, lastTime;
|
|
1281
|
+
return function() {
|
|
1282
|
+
const context = this, args = arguments;
|
|
1283
|
+
if (!inThrottle) {
|
|
1284
|
+
fn.apply(context, args);
|
|
1285
|
+
lastTime = Date.now();
|
|
1286
|
+
inThrottle = true;
|
|
1287
|
+
} else {
|
|
1288
|
+
clearTimeout(lastFn);
|
|
1289
|
+
lastFn = setTimeout(()=>{
|
|
1290
|
+
if (Date.now() - lastTime >= wait) {
|
|
1291
|
+
fn.apply(context, args);
|
|
1292
|
+
lastTime = Date.now();
|
|
1293
|
+
}
|
|
1294
|
+
}, Math.max(wait - (Date.now() - lastTime), 0));
|
|
1295
|
+
}
|
|
1296
|
+
};
|
|
1297
|
+
};
|
|
1298
|
+
|
|
1299
|
+
|
|
1300
|
+
|
|
1301
|
+
|
|
1302
|
+
const $987c962fd22b0c93$export$6ad2c48011488f7 = async (apiUrl, { file: file, token: token, type: type, recordingGroup: recordingGroup })=>{
|
|
1303
|
+
if (!file) throw new Error(`Missing file on "${file}"`);
|
|
1304
|
+
const upload = await fetch(`${apiUrl}/public/streams/${token}/events/upload`, {
|
|
1305
|
+
method: 'POST',
|
|
1306
|
+
headers: {
|
|
1307
|
+
'Content-Type': 'application/json'
|
|
1308
|
+
},
|
|
1309
|
+
body: JSON.stringify({
|
|
1310
|
+
filename: file.name,
|
|
1311
|
+
contentLength: file.size,
|
|
1312
|
+
type: type,
|
|
1313
|
+
recordingGroup: recordingGroup
|
|
1314
|
+
})
|
|
1315
|
+
});
|
|
1316
|
+
const { url: url, headers: headers, filename: filename } = await upload.json();
|
|
1317
|
+
const uploadResponse = await fetch(url, {
|
|
1318
|
+
method: 'PUT',
|
|
1319
|
+
headers: {
|
|
1320
|
+
...headers,
|
|
1321
|
+
'Content-Type': file.type,
|
|
1322
|
+
'Content-Length': String(file.size)
|
|
1323
|
+
},
|
|
1324
|
+
body: file
|
|
1325
|
+
});
|
|
1326
|
+
const { url: assetUrl } = await (0, $96c060f28b764056$export$8a48322ecc4782be)(apiUrl, token, filename);
|
|
1327
|
+
if (!uploadResponse.ok) throw new Error('Upload failed');
|
|
1328
|
+
return {
|
|
1329
|
+
filename: filename,
|
|
1330
|
+
url: assetUrl
|
|
1331
|
+
};
|
|
1332
|
+
};
|
|
1333
|
+
|
|
1334
|
+
|
|
1335
|
+
const $54d9e0891cb8e108$export$c30017717ce2168e = async (apiUrl, token, asset)=>{
|
|
1336
|
+
const event = await fetch(`${apiUrl}/public/streams/${token}/events/batch`, {
|
|
1337
|
+
method: 'POST',
|
|
1338
|
+
headers: {
|
|
1339
|
+
'Content-Type': 'application/json'
|
|
1340
|
+
},
|
|
1341
|
+
body: JSON.stringify({
|
|
1342
|
+
medias: asset
|
|
1343
|
+
})
|
|
1344
|
+
});
|
|
1345
|
+
if (event.ok) return event.json();
|
|
1346
|
+
throw new Error(` request failed ${event.status} `);
|
|
1347
|
+
};
|
|
1140
1348
|
|
|
1141
1349
|
|
|
1142
1350
|
async function $d582bbc5717818b4$export$9b072140089cdb1b(constraints = {
|
|
@@ -1214,12 +1422,12 @@ class $d582bbc5717818b4$export$2e2bcd8739ae039 {
|
|
|
1214
1422
|
const { needToAskAudio: needToAskAudio, needToAskVideo: needToAskVideo } = this.needToAskMedias(constraintsCopy);
|
|
1215
1423
|
constraintsCopy.audio = needToAskAudio ? constraintsCopy.audio : false;
|
|
1216
1424
|
constraintsCopy.video = needToAskVideo ? constraintsCopy.video : false;
|
|
1425
|
+
let res = undefined;
|
|
1217
1426
|
if (needToAskAudio || needToAskVideo) {
|
|
1218
1427
|
this.cleanAllStreams({
|
|
1219
1428
|
audio: needToAskAudio,
|
|
1220
1429
|
video: needToAskVideo
|
|
1221
1430
|
});
|
|
1222
|
-
let res = undefined;
|
|
1223
1431
|
try {
|
|
1224
1432
|
this.isAskingPermissions = true;
|
|
1225
1433
|
res = await $d582bbc5717818b4$export$9b072140089cdb1b(constraintsCopy);
|
|
@@ -1301,395 +1509,56 @@ class $d582bbc5717818b4$export$2e2bcd8739ae039 {
|
|
|
1301
1509
|
}
|
|
1302
1510
|
|
|
1303
1511
|
|
|
1304
|
-
|
|
1305
|
-
const $
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
this.
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
this.
|
|
1333
|
-
this.
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
this.
|
|
1340
|
-
this.
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
this.
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
this.
|
|
1354
|
-
}
|
|
1355
|
-
drawWithBlur(ctx, results) {
|
|
1356
|
-
ctx.save();
|
|
1357
|
-
ctx.drawImage(results.image, 0, 0, this.canvas.width, this.canvas.height);
|
|
1358
|
-
ctx.globalCompositeOperation = 'destination-atop';
|
|
1359
|
-
ctx.drawImage(results.segmentationMask, 0, 0, this.canvas.width, this.canvas.height);
|
|
1360
|
-
// Blur the context for all subsequent draws then set the raw image as the background
|
|
1361
|
-
ctx.filter = `blur(${this.blurLevel}px)`;
|
|
1362
|
-
ctx.globalCompositeOperation = 'destination-over';
|
|
1363
|
-
ctx.drawImage(results.image, 0, 0, this.canvas.width, this.canvas.height);
|
|
1364
|
-
// Restore the context's blank state
|
|
1365
|
-
ctx.restore();
|
|
1366
|
-
}
|
|
1367
|
-
drawWithBackground(ctx, results) {
|
|
1368
|
-
ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);
|
|
1369
|
-
ctx.drawImage(results.segmentationMask, 0, 0, this.canvas.width, this.canvas.height);
|
|
1370
|
-
ctx.globalCompositeOperation = 'source-out';
|
|
1371
|
-
ctx.fillStyle = this.fillColor;
|
|
1372
|
-
if (this.background) ctx.drawImage(this.background, 0, 0, this.canvas.width, this.canvas.height);
|
|
1373
|
-
else ctx.fillRect(0, 0, this.canvas.width, this.canvas.height);
|
|
1374
|
-
ctx.globalCompositeOperation = 'destination-atop';
|
|
1375
|
-
ctx.drawImage(results.image, 0, 0, this.canvas.width, this.canvas.height);
|
|
1376
|
-
ctx.restore();
|
|
1377
|
-
}
|
|
1378
|
-
onFrame(results) {
|
|
1379
|
-
this.canvas.width = results.image.width;
|
|
1380
|
-
this.canvas.height = results.image.height;
|
|
1381
|
-
const ctx = this.canvas.getContext('2d');
|
|
1382
|
-
if (ctx) switch(this.type){
|
|
1383
|
-
case 'blur':
|
|
1384
|
-
this.drawWithBlur(ctx, results);
|
|
1385
|
-
break;
|
|
1386
|
-
case 'background':
|
|
1387
|
-
this.drawWithBackground(ctx, results);
|
|
1388
|
-
break;
|
|
1389
|
-
default:
|
|
1390
|
-
this.drawWithBlur(ctx, results);
|
|
1391
|
-
}
|
|
1392
|
-
}
|
|
1393
|
-
runWithFrameCallback() {
|
|
1394
|
-
if (this.live) this.image.requestVideoFrameCallback(()=>{
|
|
1395
|
-
$cb913ea078a876a6$var$selfieSegmentation.send({
|
|
1396
|
-
image: this.image
|
|
1397
|
-
});
|
|
1398
|
-
this.runWithFrameCallback();
|
|
1399
|
-
});
|
|
1400
|
-
}
|
|
1401
|
-
async createStream() {
|
|
1402
|
-
try {
|
|
1403
|
-
const option = {
|
|
1404
|
-
selfieMode: false,
|
|
1405
|
-
modelSelection: 0
|
|
1406
|
-
};
|
|
1407
|
-
$cb913ea078a876a6$var$selfieSegmentation.setOptions(option);
|
|
1408
|
-
$cb913ea078a876a6$var$log.log('selfie segmentation initialized');
|
|
1409
|
-
if (!$cb913ea078a876a6$var$selfieSegmentationInitialized) {
|
|
1410
|
-
await $cb913ea078a876a6$var$selfieSegmentation.initialize();
|
|
1411
|
-
$cb913ea078a876a6$var$selfieSegmentationInitialized = true;
|
|
1412
|
-
}
|
|
1413
|
-
this.image.srcObject = this.stream;
|
|
1414
|
-
this.image.onplay = async ()=>{
|
|
1415
|
-
this.live = true;
|
|
1416
|
-
try {
|
|
1417
|
-
$cb913ea078a876a6$var$selfieSegmentation.onResults((res)=>{
|
|
1418
|
-
this.onFrame(res);
|
|
1419
|
-
});
|
|
1420
|
-
this.timerWorker.onmessage = ()=>{
|
|
1421
|
-
$cb913ea078a876a6$var$selfieSegmentation.send({
|
|
1422
|
-
image: this.image
|
|
1423
|
-
});
|
|
1424
|
-
};
|
|
1425
|
-
this.timerWorker.postMessage({
|
|
1426
|
-
action: 'start',
|
|
1427
|
-
params: this.fps
|
|
1428
|
-
});
|
|
1429
|
-
} catch (err) {
|
|
1430
|
-
$cb913ea078a876a6$var$log.error('createStream:play', err);
|
|
1431
|
-
}
|
|
1432
|
-
};
|
|
1433
|
-
} catch (err) {
|
|
1434
|
-
console.error('createStream', err);
|
|
1435
|
-
}
|
|
1436
|
-
return this.canvas.captureStream();
|
|
1437
|
-
}
|
|
1438
|
-
clean() {
|
|
1439
|
-
return new Promise((resolve)=>{
|
|
1440
|
-
this.live = false;
|
|
1441
|
-
this.stream.removeTrack(this.stream.getTracks()[0]);
|
|
1442
|
-
clearInterval(this.runInterval);
|
|
1443
|
-
this.image.srcObject = null;
|
|
1444
|
-
this.timerWorker.terminate();
|
|
1445
|
-
resolve();
|
|
1446
|
-
});
|
|
1447
|
-
}
|
|
1448
|
-
printState() {
|
|
1449
|
-
console.log('MediaPipe', {
|
|
1450
|
-
stream: this.stream.id,
|
|
1451
|
-
type: this.type,
|
|
1452
|
-
live: this.live
|
|
1453
|
-
});
|
|
1454
|
-
this.stream.getTracks().forEach((track)=>{
|
|
1455
|
-
(0, $d582bbc5717818b4$export$ba898f35a9cd5eb4)(track, `linked to MediaPipe.stream ${this.stream.id}`);
|
|
1456
|
-
});
|
|
1457
|
-
}
|
|
1458
|
-
}
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
const $93041e14f6aa3f24$var$audioContextConstructor = window.AudioContext || window.webkitAudioContext;
|
|
1462
|
-
class $93041e14f6aa3f24$export$22ddc20344c01547 {
|
|
1463
|
-
constructor(){
|
|
1464
|
-
this.audioSources = {};
|
|
1465
|
-
this.tracks = {};
|
|
1466
|
-
this.audioContext = new $93041e14f6aa3f24$var$audioContextConstructor();
|
|
1467
|
-
this.audioDestination = this.audioContext.createMediaStreamDestination();
|
|
1468
|
-
}
|
|
1469
|
-
getSetting(identifier) {
|
|
1470
|
-
return this.tracks[identifier]?.getSettings();
|
|
1471
|
-
}
|
|
1472
|
-
removeTrack(identifier) {
|
|
1473
|
-
const track = this.tracks[identifier];
|
|
1474
|
-
if (track) {
|
|
1475
|
-
this.audioSources[identifier]?.disconnect();
|
|
1476
|
-
delete this.tracks[identifier];
|
|
1477
|
-
delete this.audioSources[identifier];
|
|
1478
|
-
track.enabled = false;
|
|
1479
|
-
}
|
|
1480
|
-
}
|
|
1481
|
-
setTrackEnabled(identifier, enabled) {
|
|
1482
|
-
const track = this.tracks[identifier];
|
|
1483
|
-
if (track) track.enabled = enabled;
|
|
1484
|
-
else console.warn(`Track ${identifier} not found`);
|
|
1485
|
-
}
|
|
1486
|
-
addTrack(identifier, track) {
|
|
1487
|
-
if (track.kind === 'audio') {
|
|
1488
|
-
this.removeTrack(identifier);
|
|
1489
|
-
const stream = new MediaStream([
|
|
1490
|
-
track
|
|
1491
|
-
]);
|
|
1492
|
-
const audioSource = this.audioContext.createMediaStreamSource(stream);
|
|
1493
|
-
this.audioSources[identifier] = audioSource;
|
|
1494
|
-
this.tracks[identifier] = track;
|
|
1495
|
-
this.tracks[identifier].enabled = true;
|
|
1496
|
-
if (this.audioDestination) audioSource.connect(this.audioDestination);
|
|
1497
|
-
}
|
|
1498
|
-
}
|
|
1499
|
-
getFinalTrack() {
|
|
1500
|
-
return this.audioDestination.stream.getTracks()[0];
|
|
1501
|
-
}
|
|
1502
|
-
removeAll() {
|
|
1503
|
-
Object.keys(this.tracks).forEach((identifier)=>{
|
|
1504
|
-
this.removeTrack(identifier);
|
|
1505
|
-
});
|
|
1506
|
-
}
|
|
1507
|
-
}
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
const $96c060f28b764056$export$8a48322ecc4782be = async (url, streamToken, file)=>{
|
|
1512
|
-
const searchParams = new URLSearchParams({
|
|
1513
|
-
filename: file
|
|
1514
|
-
});
|
|
1515
|
-
const result = await fetch(`${url}/public/streams/${streamToken}/temporary-assets?${searchParams}`, {
|
|
1516
|
-
method: 'get',
|
|
1517
|
-
headers: {
|
|
1518
|
-
'Content-Type': 'application/json'
|
|
1519
|
-
}
|
|
1520
|
-
}).then((response)=>response.json());
|
|
1521
|
-
return result;
|
|
1522
|
-
};
|
|
1523
|
-
const $96c060f28b764056$export$df987b50509121ea = async (url, streamToken, file)=>{
|
|
1524
|
-
const searchParams = new URLSearchParams({
|
|
1525
|
-
filename: file
|
|
1526
|
-
});
|
|
1527
|
-
const result = await fetch(`${url}/public/streams/${streamToken}/temporary-assets?${searchParams}`, {
|
|
1528
|
-
method: 'delete',
|
|
1529
|
-
headers: {
|
|
1530
|
-
'Content-Type': 'application/json'
|
|
1531
|
-
}
|
|
1532
|
-
}).then((response)=>response.json());
|
|
1533
|
-
return result;
|
|
1534
|
-
};
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
var $7f16567c4f721486$require$Buffer = $jQDcL$buffer.Buffer;
|
|
1539
|
-
const $7f16567c4f721486$export$bfc52a1c1f84ba66 = async (apiUrl, { token: token, base64Image: base64Image, recordingGroup: recordingGroup })=>{
|
|
1540
|
-
const file = `${(0, $jQDcL$uuid.v4)()}.jpeg`;
|
|
1541
|
-
const uploadBody = $7f16567c4f721486$require$Buffer.from(String(base64Image).replace(/^data:image\/\w+;base64,/, ''), 'base64');
|
|
1542
|
-
const { url: url, headers: headers, filename: filename } = await fetch(`${apiUrl}/public/streams/${token}/events/upload`, {
|
|
1543
|
-
method: 'POST',
|
|
1544
|
-
headers: {
|
|
1545
|
-
'Content-Type': 'application/json'
|
|
1546
|
-
},
|
|
1547
|
-
body: JSON.stringify({
|
|
1548
|
-
type: 'image',
|
|
1549
|
-
filename: file,
|
|
1550
|
-
contentLength: uploadBody.length,
|
|
1551
|
-
recordingGroup: recordingGroup
|
|
1552
|
-
})
|
|
1553
|
-
}).then((res)=>res.json());
|
|
1554
|
-
await fetch(url, {
|
|
1555
|
-
method: 'PUT',
|
|
1556
|
-
headers: {
|
|
1557
|
-
...headers,
|
|
1558
|
-
'Content-Type': 'image/*',
|
|
1559
|
-
'Content-Length': uploadBody.length
|
|
1560
|
-
},
|
|
1561
|
-
body: uploadBody
|
|
1562
|
-
});
|
|
1563
|
-
const { url: assetUrl } = await (0, $96c060f28b764056$export$8a48322ecc4782be)(apiUrl, token, filename);
|
|
1564
|
-
return {
|
|
1565
|
-
filename: filename,
|
|
1566
|
-
url: assetUrl
|
|
1567
|
-
};
|
|
1568
|
-
};
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
const $3898fb88b880f5ba$export$de363e709c412c8a = (fn, wait = 300)=>{
|
|
1572
|
-
let inThrottle, lastFn, lastTime;
|
|
1573
|
-
return function() {
|
|
1574
|
-
const context = this, args = arguments;
|
|
1575
|
-
if (!inThrottle) {
|
|
1576
|
-
fn.apply(context, args);
|
|
1577
|
-
lastTime = Date.now();
|
|
1578
|
-
inThrottle = true;
|
|
1579
|
-
} else {
|
|
1580
|
-
clearTimeout(lastFn);
|
|
1581
|
-
lastFn = setTimeout(()=>{
|
|
1582
|
-
if (Date.now() - lastTime >= wait) {
|
|
1583
|
-
fn.apply(context, args);
|
|
1584
|
-
lastTime = Date.now();
|
|
1585
|
-
}
|
|
1586
|
-
}, Math.max(wait - (Date.now() - lastTime), 0));
|
|
1587
|
-
}
|
|
1588
|
-
};
|
|
1589
|
-
};
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
const $987c962fd22b0c93$export$6ad2c48011488f7 = async (apiUrl, { file: file, token: token, type: type, recordingGroup: recordingGroup })=>{
|
|
1595
|
-
if (!file) throw new Error(`Missing file on "${file}"`);
|
|
1596
|
-
const upload = await fetch(`${apiUrl}/public/streams/${token}/events/upload`, {
|
|
1597
|
-
method: 'POST',
|
|
1598
|
-
headers: {
|
|
1599
|
-
'Content-Type': 'application/json'
|
|
1600
|
-
},
|
|
1601
|
-
body: JSON.stringify({
|
|
1602
|
-
filename: file.name,
|
|
1603
|
-
contentLength: file.size,
|
|
1604
|
-
type: type,
|
|
1605
|
-
recordingGroup: recordingGroup
|
|
1606
|
-
})
|
|
1607
|
-
});
|
|
1608
|
-
const { url: url, headers: headers, filename: filename } = await upload.json();
|
|
1609
|
-
const uploadResponse = await fetch(url, {
|
|
1610
|
-
method: 'PUT',
|
|
1611
|
-
headers: {
|
|
1612
|
-
...headers,
|
|
1613
|
-
'Content-Type': file.type,
|
|
1614
|
-
'Content-Length': String(file.size)
|
|
1615
|
-
},
|
|
1616
|
-
body: file
|
|
1617
|
-
});
|
|
1618
|
-
const { url: assetUrl } = await (0, $96c060f28b764056$export$8a48322ecc4782be)(apiUrl, token, filename);
|
|
1619
|
-
if (!uploadResponse.ok) throw new Error('Upload failed');
|
|
1620
|
-
return {
|
|
1621
|
-
filename: filename,
|
|
1622
|
-
url: assetUrl
|
|
1623
|
-
};
|
|
1624
|
-
};
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
const $54d9e0891cb8e108$export$c30017717ce2168e = async (apiUrl, token, asset)=>{
|
|
1628
|
-
const event = await fetch(`${apiUrl}/public/streams/${token}/events/batch`, {
|
|
1629
|
-
method: 'POST',
|
|
1630
|
-
headers: {
|
|
1631
|
-
'Content-Type': 'application/json'
|
|
1632
|
-
},
|
|
1633
|
-
body: JSON.stringify({
|
|
1634
|
-
medias: asset
|
|
1635
|
-
})
|
|
1636
|
-
});
|
|
1637
|
-
if (event.ok) return event.json();
|
|
1638
|
-
throw new Error(` request failed ${event.status} `);
|
|
1639
|
-
};
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
const $7ecd162d9d84ca18$var$log = new (0, $d0c6baf97675ab49$export$2e2bcd8739ae039)('TransportMonitor');
|
|
1645
|
-
const $7ecd162d9d84ca18$var$debugLevel = {
|
|
1646
|
-
audio: 0,
|
|
1647
|
-
video: 0,
|
|
1648
|
-
'ice-network': 0,
|
|
1649
|
-
'outbound-rtp': 0
|
|
1650
|
-
};
|
|
1651
|
-
const $7ecd162d9d84ca18$var$DURATION_MS = 3000;
|
|
1652
|
-
const $7ecd162d9d84ca18$var$MONITOR_INTERVAL_DURATION_MS = 200;
|
|
1653
|
-
const $7ecd162d9d84ca18$var$TICK_MAX = $7ecd162d9d84ca18$var$DURATION_MS / $7ecd162d9d84ca18$var$MONITOR_INTERVAL_DURATION_MS;
|
|
1654
|
-
const $7ecd162d9d84ca18$var$RTX_PERCENT_THRESHOLD = 30;
|
|
1655
|
-
const $7ecd162d9d84ca18$var$RTT_MS_THRESHOLD = 400;
|
|
1656
|
-
const $7ecd162d9d84ca18$var$transportStatTypes = [
|
|
1657
|
-
'audio',
|
|
1658
|
-
'video',
|
|
1659
|
-
'ice-network',
|
|
1660
|
-
'outbound-rtp'
|
|
1661
|
-
];
|
|
1662
|
-
class $7ecd162d9d84ca18$export$2e2bcd8739ae039 {
|
|
1663
|
-
constructor(transport, listener, description){
|
|
1664
|
-
this.tick = 0;
|
|
1665
|
-
this.activeMonitors = {
|
|
1666
|
-
audio: false,
|
|
1667
|
-
video: false,
|
|
1668
|
-
'ice-network': false,
|
|
1669
|
-
'outbound-rtp': false
|
|
1670
|
-
};
|
|
1671
|
-
this.activeMonitorsCount = 0;
|
|
1672
|
-
this.monitorFuncs = {
|
|
1673
|
-
audio: this.monitorAudio.bind(this),
|
|
1674
|
-
video: this.monitorVideo.bind(this),
|
|
1675
|
-
'ice-network': this.monitorIceNetwork.bind(this),
|
|
1676
|
-
'outbound-rtp': this.monitorOutboundRtp.bind(this)
|
|
1677
|
-
};
|
|
1678
|
-
this.isConnected = false;
|
|
1679
|
-
this.issues = 0;
|
|
1680
|
-
// ice disconnections
|
|
1681
|
-
this.disconnectsCount = 0;
|
|
1682
|
-
this.disconnectsThreshold = 4;
|
|
1683
|
-
// RTT
|
|
1684
|
-
this.allTimeAverageRTT = 0;
|
|
1685
|
-
this.lastStateRttOk = true;
|
|
1686
|
-
// RTX for all media sources
|
|
1687
|
-
this.mediaSourceStats = {};
|
|
1688
|
-
this.transport = transport;
|
|
1689
|
-
this.description = description;
|
|
1690
|
-
this.listener = listener;
|
|
1691
|
-
this.transport.on('connectionstatechange', this.onConnectionStateChange.bind(this));
|
|
1692
|
-
this.recentRTTs = new Array($7ecd162d9d84ca18$var$TICK_MAX).fill(0);
|
|
1512
|
+
|
|
1513
|
+
const $7ecd162d9d84ca18$var$log = new (0, $d0c6baf97675ab49$export$2e2bcd8739ae039)('TransportMonitor');
|
|
1514
|
+
const $7ecd162d9d84ca18$var$debugLevel = {
|
|
1515
|
+
audio: 0,
|
|
1516
|
+
video: 0,
|
|
1517
|
+
'ice-network': 0,
|
|
1518
|
+
'outbound-rtp': 0
|
|
1519
|
+
};
|
|
1520
|
+
const $7ecd162d9d84ca18$var$DURATION_MS = 3000;
|
|
1521
|
+
const $7ecd162d9d84ca18$var$MONITOR_INTERVAL_DURATION_MS = 200;
|
|
1522
|
+
const $7ecd162d9d84ca18$var$TICK_MAX = $7ecd162d9d84ca18$var$DURATION_MS / $7ecd162d9d84ca18$var$MONITOR_INTERVAL_DURATION_MS;
|
|
1523
|
+
const $7ecd162d9d84ca18$var$RTX_PERCENT_THRESHOLD = 30;
|
|
1524
|
+
const $7ecd162d9d84ca18$var$RTT_MS_THRESHOLD = 400;
|
|
1525
|
+
const $7ecd162d9d84ca18$var$transportStatTypes = [
|
|
1526
|
+
'audio',
|
|
1527
|
+
'video',
|
|
1528
|
+
'ice-network',
|
|
1529
|
+
'outbound-rtp'
|
|
1530
|
+
];
|
|
1531
|
+
class $7ecd162d9d84ca18$export$2e2bcd8739ae039 {
|
|
1532
|
+
constructor(transport, listener, description){
|
|
1533
|
+
this.tick = 0;
|
|
1534
|
+
this.activeMonitors = {
|
|
1535
|
+
audio: false,
|
|
1536
|
+
video: false,
|
|
1537
|
+
'ice-network': false,
|
|
1538
|
+
'outbound-rtp': false
|
|
1539
|
+
};
|
|
1540
|
+
this.activeMonitorsCount = 0;
|
|
1541
|
+
this.monitorFuncs = {
|
|
1542
|
+
audio: this.monitorAudio.bind(this),
|
|
1543
|
+
video: this.monitorVideo.bind(this),
|
|
1544
|
+
'ice-network': this.monitorIceNetwork.bind(this),
|
|
1545
|
+
'outbound-rtp': this.monitorOutboundRtp.bind(this)
|
|
1546
|
+
};
|
|
1547
|
+
this.isConnected = false;
|
|
1548
|
+
this.issues = 0;
|
|
1549
|
+
// ice disconnections
|
|
1550
|
+
this.disconnectsCount = 0;
|
|
1551
|
+
this.disconnectsThreshold = 4;
|
|
1552
|
+
// RTT
|
|
1553
|
+
this.allTimeAverageRTT = 0;
|
|
1554
|
+
this.lastStateRttOk = true;
|
|
1555
|
+
// RTX for all media sources
|
|
1556
|
+
this.mediaSourceStats = {};
|
|
1557
|
+
this.transport = transport;
|
|
1558
|
+
this.description = description;
|
|
1559
|
+
this.listener = listener;
|
|
1560
|
+
this.transport.on('connectionstatechange', this.onConnectionStateChange.bind(this));
|
|
1561
|
+
this.recentRTTs = new Array($7ecd162d9d84ca18$var$TICK_MAX).fill(0);
|
|
1693
1562
|
}
|
|
1694
1563
|
isTransportConnected() {
|
|
1695
1564
|
return this.isConnected;
|
|
@@ -1846,118 +1715,270 @@ class $7ecd162d9d84ca18$export$2e2bcd8739ae039 {
|
|
|
1846
1715
|
if ($7ecd162d9d84ca18$var$debugLevel['ice-network'] >= 2) console.warn('monitorIceNetwork', `No candidate-pair found (yet) for transport: ${this.transport.id}`);
|
|
1847
1716
|
return;
|
|
1848
1717
|
}
|
|
1849
|
-
if (this.tick === 0) this.checkIceNetwork();
|
|
1718
|
+
if (this.tick === 0) this.checkIceNetwork();
|
|
1719
|
+
}
|
|
1720
|
+
checkIceNetwork() {
|
|
1721
|
+
const rttSum = this.recentRTTs.reduce((a, b)=>a + b, 0);
|
|
1722
|
+
const rttAverageMs = Math.round(1000 * rttSum / $7ecd162d9d84ca18$var$TICK_MAX);
|
|
1723
|
+
const isRttOk = Boolean(rttAverageMs <= $7ecd162d9d84ca18$var$RTT_MS_THRESHOLD);
|
|
1724
|
+
if (isRttOk !== this.lastStateRttOk) {
|
|
1725
|
+
console.warn(`Transport: ${this.transport.id}\nRTT state changed to:`, isRttOk);
|
|
1726
|
+
this.updateTransportState({
|
|
1727
|
+
isRttOk: isRttOk
|
|
1728
|
+
});
|
|
1729
|
+
this.lastStateRttOk = isRttOk;
|
|
1730
|
+
}
|
|
1731
|
+
if (rttAverageMs > 250) this.listener?.onNetworkLog(this.transport, {
|
|
1732
|
+
rtt: rttAverageMs
|
|
1733
|
+
});
|
|
1734
|
+
if ($7ecd162d9d84ca18$var$debugLevel['ice-network'] >= 1) {
|
|
1735
|
+
console.log(`Last ${$7ecd162d9d84ca18$var$DURATION_MS}ms average RTT: ${rttAverageMs}ms`, `\nAll time average RTT: ${this.allTimeAverageRTT}ms`);
|
|
1736
|
+
if (!isRttOk) console.warn(`High RTT detected:`, rttAverageMs);
|
|
1737
|
+
}
|
|
1738
|
+
}
|
|
1739
|
+
async monitorOutboundRtp() {
|
|
1740
|
+
if (!this.rtcStatsReports) return;
|
|
1741
|
+
this.rtcStatsReports.forEach((stat)=>{
|
|
1742
|
+
if (stat.type === 'outbound-rtp') {
|
|
1743
|
+
if (!stat.ssrc || !stat.kind || stat.packetsSent === undefined || stat.retransmittedPacketsSent === undefined) {
|
|
1744
|
+
$7ecd162d9d84ca18$var$log.error('monitorOutboundRtp', `Missing data in the stats report for transport ${this.transport.id}.\nStoppping monitoring.`);
|
|
1745
|
+
this.stopMonitoring([
|
|
1746
|
+
'outbound-rtp'
|
|
1747
|
+
]);
|
|
1748
|
+
return;
|
|
1749
|
+
}
|
|
1750
|
+
if ($7ecd162d9d84ca18$var$debugLevel['outbound-rtp'] >= 2) console.log(`Outbound RTP stats for transport (description: ${this.description}):
|
|
1751
|
+
- ssrc: ${stat.ssrc}
|
|
1752
|
+
- kind: ${stat.kind}
|
|
1753
|
+
- packets sent: ${stat.packetsSent}
|
|
1754
|
+
- packets rtx: ${stat.retransmittedPacketsSent}
|
|
1755
|
+
- retransmission %: ${100 * stat.retransmittedPacketsSent / stat.packetsSent}
|
|
1756
|
+
- sli count: ${stat.sliCount}
|
|
1757
|
+
- nack count: ${stat.nackCount}`);
|
|
1758
|
+
if (!this.mediaSourceStats[stat.ssrc]) this.mediaSourceStats[stat.ssrc] = {
|
|
1759
|
+
ssrc: stat.ssrc,
|
|
1760
|
+
kind: stat.kind,
|
|
1761
|
+
averagesRtxPercent: [],
|
|
1762
|
+
recentPacketsSent: new Array($7ecd162d9d84ca18$var$TICK_MAX).fill(0),
|
|
1763
|
+
recentPacketsRtx: new Array($7ecd162d9d84ca18$var$TICK_MAX).fill(0),
|
|
1764
|
+
lastStateRtxOK: true
|
|
1765
|
+
};
|
|
1766
|
+
const mss = this.mediaSourceStats[stat.ssrc];
|
|
1767
|
+
mss.recentPacketsSent[this.tick] = stat.packetsSent;
|
|
1768
|
+
mss.recentPacketsRtx[this.tick] = stat.retransmittedPacketsSent;
|
|
1769
|
+
}
|
|
1770
|
+
});
|
|
1771
|
+
if (this.tick === 0) Object.values(this.mediaSourceStats).forEach((mss)=>{
|
|
1772
|
+
this.checkOutboundRtp(mss);
|
|
1773
|
+
});
|
|
1774
|
+
}
|
|
1775
|
+
checkOutboundRtp(mss) {
|
|
1776
|
+
const oldestTick = (this.tick + 1) % $7ecd162d9d84ca18$var$TICK_MAX;
|
|
1777
|
+
const packetsSentSum = mss.recentPacketsSent[this.tick] - mss.recentPacketsSent[oldestTick];
|
|
1778
|
+
const packetsRtxSum = mss.recentPacketsRtx[this.tick] - mss.recentPacketsRtx[oldestTick];
|
|
1779
|
+
const rtxPercent = packetsSentSum === 0 ? 0 : 100 * packetsRtxSum / packetsSentSum;
|
|
1780
|
+
const rtxPercentAllTime = 100 * mss.recentPacketsRtx[this.tick] / mss.recentPacketsSent[this.tick];
|
|
1781
|
+
mss.averagesRtxPercent.push(rtxPercent);
|
|
1782
|
+
const isRtxOk = Boolean(rtxPercent <= $7ecd162d9d84ca18$var$RTX_PERCENT_THRESHOLD);
|
|
1783
|
+
if (isRtxOk !== mss.lastStateRtxOK) {
|
|
1784
|
+
console.warn(`Transport: ${this.transport.id}\n[ssrc ${mss.ssrc} ${mss.kind || '?'}] RTX state changed to:`, isRtxOk);
|
|
1785
|
+
this.updateTransportState({
|
|
1786
|
+
isRtxOk: isRtxOk
|
|
1787
|
+
});
|
|
1788
|
+
}
|
|
1789
|
+
mss.lastStateRtxOK = isRtxOk;
|
|
1790
|
+
if (!isRtxOk) this.listener?.onNetworkLog(this.transport, {
|
|
1791
|
+
rtxPercent: rtxPercent,
|
|
1792
|
+
kind: mss.kind
|
|
1793
|
+
});
|
|
1794
|
+
if ($7ecd162d9d84ca18$var$debugLevel['outbound-rtp'] >= 1) {
|
|
1795
|
+
console.log(`[ssrc ${mss.ssrc} ${mss.kind || '?'}] For the last ${$7ecd162d9d84ca18$var$DURATION_MS}ms:
|
|
1796
|
+
- packets sent: ${packetsSentSum}
|
|
1797
|
+
- packets rtx: ${packetsRtxSum}
|
|
1798
|
+
- rtx %: ${Math.round(100 * rtxPercent) / 100}`, `\nAll time average rtx %:`, Math.round(100 * rtxPercentAllTime) / 100);
|
|
1799
|
+
if (!isRtxOk) console.warn(`High ${mss.kind || ''} packets rtx % detected:`, Math.round(100 * rtxPercent) / 100);
|
|
1800
|
+
}
|
|
1801
|
+
}
|
|
1802
|
+
}
|
|
1803
|
+
|
|
1804
|
+
|
|
1805
|
+
const $f0e58d5d03fc26c4$export$e1228c246580bf68 = async (apiUrl, token, recordingGroup)=>{
|
|
1806
|
+
const answer = await fetch(`${apiUrl}/public/streams/${token}/live/${recordingGroup}`, {
|
|
1807
|
+
method: 'GET',
|
|
1808
|
+
headers: {
|
|
1809
|
+
'Content-Type': 'application/json'
|
|
1810
|
+
}
|
|
1811
|
+
});
|
|
1812
|
+
if (answer.ok) return answer.json();
|
|
1813
|
+
throw new Error(` request failed ${answer.status} `);
|
|
1814
|
+
};
|
|
1815
|
+
|
|
1816
|
+
|
|
1817
|
+
|
|
1818
|
+
|
|
1819
|
+
|
|
1820
|
+
|
|
1821
|
+
|
|
1822
|
+
const $cb913ea078a876a6$var$log = new (0, $d0c6baf97675ab49$export$2e2bcd8739ae039)('MediaPipe');
|
|
1823
|
+
const $cb913ea078a876a6$var$mediapipeUrl = "https://stream-assets.snapcall.io";
|
|
1824
|
+
let $cb913ea078a876a6$var$selfieSegmentationInitialized = false;
|
|
1825
|
+
const $cb913ea078a876a6$var$selfieSegmentation = new $jQDcL$mediapipeselfie_segmentation.SelfieSegmentation({
|
|
1826
|
+
locateFile: (file, prefix)=>{
|
|
1827
|
+
$cb913ea078a876a6$var$log.debug('selfieSegmentation', file, prefix);
|
|
1828
|
+
if ($cb913ea078a876a6$var$mediapipeUrl) return `${$cb913ea078a876a6$var$mediapipeUrl}/mediapipe/${file}`;
|
|
1829
|
+
const url = window.location.href;
|
|
1830
|
+
const path = url.split('/').slice(0, -1).join('/');
|
|
1831
|
+
return `${path}/mediapipe/${file}`;
|
|
1832
|
+
}
|
|
1833
|
+
});
|
|
1834
|
+
class $cb913ea078a876a6$export$2e2bcd8739ae039 {
|
|
1835
|
+
constructor(stream, options){
|
|
1836
|
+
this.fillColor = '#000000';
|
|
1837
|
+
this.type = 'blur';
|
|
1838
|
+
this.live = false;
|
|
1839
|
+
this.fps = 24;
|
|
1840
|
+
this.blurLevel = 10;
|
|
1841
|
+
this.timerWorker = new Worker(new URL("timer.fd5ed46d.js", "file:" + __filename), {
|
|
1842
|
+
name: 'VirtualBackgroundTimerWorker'
|
|
1843
|
+
});
|
|
1844
|
+
this.stream = new MediaStream();
|
|
1845
|
+
this.stream.addTrack(stream.getVideoTracks()[0]);
|
|
1846
|
+
this.image = document.createElement('video');
|
|
1847
|
+
this.image.style.display = 'none';
|
|
1848
|
+
this.image.setAttribute('autoplay', '');
|
|
1849
|
+
this.image.setAttribute('playsinline', '');
|
|
1850
|
+
this.image.setAttribute('muted', '');
|
|
1851
|
+
this.canvas = document.createElement('canvas');
|
|
1852
|
+
this.canvas.style.display = 'none';
|
|
1853
|
+
if (options) this.setOptions(options);
|
|
1854
|
+
}
|
|
1855
|
+
setOptions(options) {
|
|
1856
|
+
this.setType(options.type);
|
|
1857
|
+
this.setFillColor(options.fillColor || this.fillColor);
|
|
1858
|
+
this.setVideoBackground(options.background);
|
|
1859
|
+
this.setBlurLevel(options.blurLevel || this.blurLevel);
|
|
1860
|
+
}
|
|
1861
|
+
setType(type) {
|
|
1862
|
+
this.type = type;
|
|
1863
|
+
}
|
|
1864
|
+
setBlurLevel(level) {
|
|
1865
|
+
this.blurLevel = level;
|
|
1866
|
+
}
|
|
1867
|
+
setVideoBackground(data) {
|
|
1868
|
+
this.background = data;
|
|
1869
|
+
}
|
|
1870
|
+
setFillColor(color) {
|
|
1871
|
+
this.fillColor = color;
|
|
1872
|
+
}
|
|
1873
|
+
drawWithBlur(ctx, results) {
|
|
1874
|
+
ctx.save();
|
|
1875
|
+
ctx.drawImage(results.image, 0, 0, this.canvas.width, this.canvas.height);
|
|
1876
|
+
ctx.globalCompositeOperation = 'destination-atop';
|
|
1877
|
+
ctx.drawImage(results.segmentationMask, 0, 0, this.canvas.width, this.canvas.height);
|
|
1878
|
+
// Blur the context for all subsequent draws then set the raw image as the background
|
|
1879
|
+
ctx.filter = `blur(${this.blurLevel}px)`;
|
|
1880
|
+
ctx.globalCompositeOperation = 'destination-over';
|
|
1881
|
+
ctx.drawImage(results.image, 0, 0, this.canvas.width, this.canvas.height);
|
|
1882
|
+
// Restore the context's blank state
|
|
1883
|
+
ctx.restore();
|
|
1884
|
+
}
|
|
1885
|
+
drawWithBackground(ctx, results) {
|
|
1886
|
+
ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);
|
|
1887
|
+
ctx.drawImage(results.segmentationMask, 0, 0, this.canvas.width, this.canvas.height);
|
|
1888
|
+
ctx.globalCompositeOperation = 'source-out';
|
|
1889
|
+
ctx.fillStyle = this.fillColor;
|
|
1890
|
+
if (this.background) ctx.drawImage(this.background, 0, 0, this.canvas.width, this.canvas.height);
|
|
1891
|
+
else ctx.fillRect(0, 0, this.canvas.width, this.canvas.height);
|
|
1892
|
+
ctx.globalCompositeOperation = 'destination-atop';
|
|
1893
|
+
ctx.drawImage(results.image, 0, 0, this.canvas.width, this.canvas.height);
|
|
1894
|
+
ctx.restore();
|
|
1895
|
+
}
|
|
1896
|
+
onFrame(results) {
|
|
1897
|
+
this.canvas.width = results.image.width;
|
|
1898
|
+
this.canvas.height = results.image.height;
|
|
1899
|
+
const ctx = this.canvas.getContext('2d');
|
|
1900
|
+
if (ctx) switch(this.type){
|
|
1901
|
+
case 'blur':
|
|
1902
|
+
this.drawWithBlur(ctx, results);
|
|
1903
|
+
break;
|
|
1904
|
+
case 'background':
|
|
1905
|
+
this.drawWithBackground(ctx, results);
|
|
1906
|
+
break;
|
|
1907
|
+
default:
|
|
1908
|
+
this.drawWithBlur(ctx, results);
|
|
1909
|
+
}
|
|
1910
|
+
}
|
|
1911
|
+
runWithFrameCallback() {
|
|
1912
|
+
if (this.live) this.image.requestVideoFrameCallback(()=>{
|
|
1913
|
+
$cb913ea078a876a6$var$selfieSegmentation.send({
|
|
1914
|
+
image: this.image
|
|
1915
|
+
});
|
|
1916
|
+
this.runWithFrameCallback();
|
|
1917
|
+
});
|
|
1918
|
+
}
|
|
1919
|
+
async createStream() {
|
|
1920
|
+
try {
|
|
1921
|
+
const option = {
|
|
1922
|
+
selfieMode: false,
|
|
1923
|
+
modelSelection: 0
|
|
1924
|
+
};
|
|
1925
|
+
$cb913ea078a876a6$var$selfieSegmentation.setOptions(option);
|
|
1926
|
+
$cb913ea078a876a6$var$log.log('selfie segmentation initialized');
|
|
1927
|
+
if (!$cb913ea078a876a6$var$selfieSegmentationInitialized) {
|
|
1928
|
+
await $cb913ea078a876a6$var$selfieSegmentation.initialize();
|
|
1929
|
+
$cb913ea078a876a6$var$selfieSegmentationInitialized = true;
|
|
1930
|
+
}
|
|
1931
|
+
this.image.srcObject = this.stream;
|
|
1932
|
+
this.image.onplay = async ()=>{
|
|
1933
|
+
this.live = true;
|
|
1934
|
+
try {
|
|
1935
|
+
$cb913ea078a876a6$var$selfieSegmentation.onResults((res)=>{
|
|
1936
|
+
this.onFrame(res);
|
|
1937
|
+
});
|
|
1938
|
+
this.timerWorker.onmessage = ()=>{
|
|
1939
|
+
$cb913ea078a876a6$var$selfieSegmentation.send({
|
|
1940
|
+
image: this.image
|
|
1941
|
+
});
|
|
1942
|
+
};
|
|
1943
|
+
this.timerWorker.postMessage({
|
|
1944
|
+
action: 'start',
|
|
1945
|
+
params: this.fps
|
|
1946
|
+
});
|
|
1947
|
+
} catch (err) {
|
|
1948
|
+
$cb913ea078a876a6$var$log.error('createStream:play', err);
|
|
1949
|
+
}
|
|
1950
|
+
};
|
|
1951
|
+
} catch (err) {
|
|
1952
|
+
console.error('createStream', err);
|
|
1953
|
+
}
|
|
1954
|
+
return this.canvas.captureStream();
|
|
1850
1955
|
}
|
|
1851
|
-
|
|
1852
|
-
|
|
1853
|
-
|
|
1854
|
-
|
|
1855
|
-
|
|
1856
|
-
|
|
1857
|
-
this.
|
|
1858
|
-
|
|
1859
|
-
});
|
|
1860
|
-
this.lastStateRttOk = isRttOk;
|
|
1861
|
-
}
|
|
1862
|
-
if (rttAverageMs > 250) this.listener?.onNetworkLog(this.transport, {
|
|
1863
|
-
rtt: rttAverageMs
|
|
1956
|
+
clean() {
|
|
1957
|
+
return new Promise((resolve)=>{
|
|
1958
|
+
this.live = false;
|
|
1959
|
+
this.stream.removeTrack(this.stream.getTracks()[0]);
|
|
1960
|
+
clearInterval(this.runInterval);
|
|
1961
|
+
this.image.srcObject = null;
|
|
1962
|
+
this.timerWorker.terminate();
|
|
1963
|
+
resolve();
|
|
1864
1964
|
});
|
|
1865
|
-
if ($7ecd162d9d84ca18$var$debugLevel['ice-network'] >= 1) {
|
|
1866
|
-
console.log(`Last ${$7ecd162d9d84ca18$var$DURATION_MS}ms average RTT: ${rttAverageMs}ms`, `\nAll time average RTT: ${this.allTimeAverageRTT}ms`);
|
|
1867
|
-
if (!isRttOk) console.warn(`High RTT detected:`, rttAverageMs);
|
|
1868
|
-
}
|
|
1869
1965
|
}
|
|
1870
|
-
|
|
1871
|
-
|
|
1872
|
-
|
|
1873
|
-
|
|
1874
|
-
|
|
1875
|
-
$7ecd162d9d84ca18$var$log.error('monitorOutboundRtp', `Missing data in the stats report for transport ${this.transport.id}.\nStoppping monitoring.`);
|
|
1876
|
-
this.stopMonitoring([
|
|
1877
|
-
'outbound-rtp'
|
|
1878
|
-
]);
|
|
1879
|
-
return;
|
|
1880
|
-
}
|
|
1881
|
-
if ($7ecd162d9d84ca18$var$debugLevel['outbound-rtp'] >= 2) console.log(`Outbound RTP stats for transport (description: ${this.description}):
|
|
1882
|
-
- ssrc: ${stat.ssrc}
|
|
1883
|
-
- kind: ${stat.kind}
|
|
1884
|
-
- packets sent: ${stat.packetsSent}
|
|
1885
|
-
- packets rtx: ${stat.retransmittedPacketsSent}
|
|
1886
|
-
- retransmission %: ${100 * stat.retransmittedPacketsSent / stat.packetsSent}
|
|
1887
|
-
- sli count: ${stat.sliCount}
|
|
1888
|
-
- nack count: ${stat.nackCount}`);
|
|
1889
|
-
if (!this.mediaSourceStats[stat.ssrc]) this.mediaSourceStats[stat.ssrc] = {
|
|
1890
|
-
ssrc: stat.ssrc,
|
|
1891
|
-
kind: stat.kind,
|
|
1892
|
-
averagesRtxPercent: [],
|
|
1893
|
-
recentPacketsSent: new Array($7ecd162d9d84ca18$var$TICK_MAX).fill(0),
|
|
1894
|
-
recentPacketsRtx: new Array($7ecd162d9d84ca18$var$TICK_MAX).fill(0),
|
|
1895
|
-
lastStateRtxOK: true
|
|
1896
|
-
};
|
|
1897
|
-
const mss = this.mediaSourceStats[stat.ssrc];
|
|
1898
|
-
mss.recentPacketsSent[this.tick] = stat.packetsSent;
|
|
1899
|
-
mss.recentPacketsRtx[this.tick] = stat.retransmittedPacketsSent;
|
|
1900
|
-
}
|
|
1901
|
-
});
|
|
1902
|
-
if (this.tick === 0) Object.values(this.mediaSourceStats).forEach((mss)=>{
|
|
1903
|
-
this.checkOutboundRtp(mss);
|
|
1966
|
+
printState() {
|
|
1967
|
+
console.log('MediaPipe', {
|
|
1968
|
+
stream: this.stream.id,
|
|
1969
|
+
type: this.type,
|
|
1970
|
+
live: this.live
|
|
1904
1971
|
});
|
|
1905
|
-
|
|
1906
|
-
|
|
1907
|
-
const oldestTick = (this.tick + 1) % $7ecd162d9d84ca18$var$TICK_MAX;
|
|
1908
|
-
const packetsSentSum = mss.recentPacketsSent[this.tick] - mss.recentPacketsSent[oldestTick];
|
|
1909
|
-
const packetsRtxSum = mss.recentPacketsRtx[this.tick] - mss.recentPacketsRtx[oldestTick];
|
|
1910
|
-
const rtxPercent = packetsSentSum === 0 ? 0 : 100 * packetsRtxSum / packetsSentSum;
|
|
1911
|
-
const rtxPercentAllTime = 100 * mss.recentPacketsRtx[this.tick] / mss.recentPacketsSent[this.tick];
|
|
1912
|
-
mss.averagesRtxPercent.push(rtxPercent);
|
|
1913
|
-
const isRtxOk = Boolean(rtxPercent <= $7ecd162d9d84ca18$var$RTX_PERCENT_THRESHOLD);
|
|
1914
|
-
if (isRtxOk !== mss.lastStateRtxOK) {
|
|
1915
|
-
console.warn(`Transport: ${this.transport.id}\n[ssrc ${mss.ssrc} ${mss.kind || '?'}] RTX state changed to:`, isRtxOk);
|
|
1916
|
-
this.updateTransportState({
|
|
1917
|
-
isRtxOk: isRtxOk
|
|
1918
|
-
});
|
|
1919
|
-
}
|
|
1920
|
-
mss.lastStateRtxOK = isRtxOk;
|
|
1921
|
-
if (!isRtxOk) this.listener?.onNetworkLog(this.transport, {
|
|
1922
|
-
rtxPercent: rtxPercent,
|
|
1923
|
-
kind: mss.kind
|
|
1972
|
+
this.stream.getTracks().forEach((track)=>{
|
|
1973
|
+
(0, $d582bbc5717818b4$export$ba898f35a9cd5eb4)(track, `linked to MediaPipe.stream ${this.stream.id}`);
|
|
1924
1974
|
});
|
|
1925
|
-
if ($7ecd162d9d84ca18$var$debugLevel['outbound-rtp'] >= 1) {
|
|
1926
|
-
console.log(`[ssrc ${mss.ssrc} ${mss.kind || '?'}] For the last ${$7ecd162d9d84ca18$var$DURATION_MS}ms:
|
|
1927
|
-
- packets sent: ${packetsSentSum}
|
|
1928
|
-
- packets rtx: ${packetsRtxSum}
|
|
1929
|
-
- rtx %: ${Math.round(100 * rtxPercent) / 100}`, `\nAll time average rtx %:`, Math.round(100 * rtxPercentAllTime) / 100);
|
|
1930
|
-
if (!isRtxOk) console.warn(`High ${mss.kind || ''} packets rtx % detected:`, Math.round(100 * rtxPercent) / 100);
|
|
1931
|
-
}
|
|
1932
1975
|
}
|
|
1933
1976
|
}
|
|
1934
1977
|
|
|
1935
1978
|
|
|
1936
|
-
const $f0e58d5d03fc26c4$export$e1228c246580bf68 = async (apiUrl, token, recordingGroup)=>{
|
|
1937
|
-
const answer = await fetch(`${apiUrl}/public/streams/${token}/live/${recordingGroup}`, {
|
|
1938
|
-
method: 'GET',
|
|
1939
|
-
headers: {
|
|
1940
|
-
'Content-Type': 'application/json'
|
|
1941
|
-
}
|
|
1942
|
-
});
|
|
1943
|
-
if (answer.ok) return answer.json();
|
|
1944
|
-
throw new Error(` request failed ${answer.status} `);
|
|
1945
|
-
};
|
|
1946
|
-
|
|
1947
1979
|
|
|
1948
|
-
const $
|
|
1949
|
-
$
|
|
1950
|
-
const $1dedebd5ff3002eb$export$103bedf43ba882db = {
|
|
1951
|
-
WEBRTC_FAILED: 'WRTC1',
|
|
1952
|
-
WEBRTC_RECOVER_ERROR: 'WRTC2',
|
|
1953
|
-
WEBRTC_BAD_STATE_ERROR: 'WRTC3',
|
|
1954
|
-
CREATE_TRANSPORT_FAILED: 'TRANS1',
|
|
1955
|
-
CONSUME_ERROR: 'CONS1',
|
|
1956
|
-
SOCKET_LOST: 'SOCK1',
|
|
1957
|
-
USER_LIMIT: 'USERLIMIT'
|
|
1958
|
-
};
|
|
1959
|
-
const $1dedebd5ff3002eb$var$SENTRY_WHITELIST_ERROR_CAUSE = 'getUserMedia error';
|
|
1960
|
-
const $1dedebd5ff3002eb$export$d21ffcc5eb136bfa = {
|
|
1980
|
+
const $92c2fcd7d44c3301$var$log = new (0, $d0c6baf97675ab49$export$2e2bcd8739ae039)('Camera');
|
|
1981
|
+
const $92c2fcd7d44c3301$export$d21ffcc5eb136bfa = {
|
|
1961
1982
|
qvga: {
|
|
1962
1983
|
width: {
|
|
1963
1984
|
ideal: 320
|
|
@@ -1965,6 +1986,10 @@ const $1dedebd5ff3002eb$export$d21ffcc5eb136bfa = {
|
|
|
1965
1986
|
height: {
|
|
1966
1987
|
ideal: 240
|
|
1967
1988
|
},
|
|
1989
|
+
format: [
|
|
1990
|
+
4,
|
|
1991
|
+
3
|
|
1992
|
+
],
|
|
1968
1993
|
qualityIndex: 3
|
|
1969
1994
|
},
|
|
1970
1995
|
vga: {
|
|
@@ -1974,6 +1999,10 @@ const $1dedebd5ff3002eb$export$d21ffcc5eb136bfa = {
|
|
|
1974
1999
|
height: {
|
|
1975
2000
|
ideal: 480
|
|
1976
2001
|
},
|
|
2002
|
+
format: [
|
|
2003
|
+
4,
|
|
2004
|
+
3
|
|
2005
|
+
],
|
|
1977
2006
|
qualityIndex: 2
|
|
1978
2007
|
},
|
|
1979
2008
|
hd: {
|
|
@@ -1983,6 +2012,10 @@ const $1dedebd5ff3002eb$export$d21ffcc5eb136bfa = {
|
|
|
1983
2012
|
height: {
|
|
1984
2013
|
ideal: 720
|
|
1985
2014
|
},
|
|
2015
|
+
format: [
|
|
2016
|
+
16,
|
|
2017
|
+
9
|
|
2018
|
+
],
|
|
1986
2019
|
qualityIndex: 1
|
|
1987
2020
|
},
|
|
1988
2021
|
background: {
|
|
@@ -1993,8 +2026,220 @@ const $1dedebd5ff3002eb$export$d21ffcc5eb136bfa = {
|
|
|
1993
2026
|
ideal: 400
|
|
1994
2027
|
},
|
|
1995
2028
|
qualityIndex: 2
|
|
2029
|
+
},
|
|
2030
|
+
max: {
|
|
2031
|
+
width: {
|
|
2032
|
+
ideal: 4096
|
|
2033
|
+
},
|
|
2034
|
+
height: {
|
|
2035
|
+
ideal: 2160
|
|
2036
|
+
},
|
|
2037
|
+
qualityIndex: 0
|
|
2038
|
+
}
|
|
2039
|
+
};
|
|
2040
|
+
const $92c2fcd7d44c3301$var$defaultMediapipeOptions = {
|
|
2041
|
+
background: undefined,
|
|
2042
|
+
fillColor: '#ffffff',
|
|
2043
|
+
type: 'blur',
|
|
2044
|
+
blurLevel: 10
|
|
2045
|
+
};
|
|
2046
|
+
class $92c2fcd7d44c3301$export$79f141de891a5fed {
|
|
2047
|
+
constructor(trackHandler){
|
|
2048
|
+
this.webcamZoom = {
|
|
2049
|
+
available: false,
|
|
2050
|
+
min: 0,
|
|
2051
|
+
max: 0
|
|
2052
|
+
};
|
|
2053
|
+
this.trackConstraint = {
|
|
2054
|
+
advanced: []
|
|
2055
|
+
};
|
|
2056
|
+
this.getUserMediaConstraint = {};
|
|
2057
|
+
this.capabilities = {};
|
|
2058
|
+
this.scaling = 1;
|
|
2059
|
+
this.mediaPipeOption = $92c2fcd7d44c3301$var$defaultMediapipeOptions;
|
|
2060
|
+
this.useVideoBackground = false;
|
|
2061
|
+
this.trackHandler = trackHandler;
|
|
2062
|
+
this.webcams = new Map();
|
|
2063
|
+
this.webcam = {
|
|
2064
|
+
device: null,
|
|
2065
|
+
resolution: 'hd',
|
|
2066
|
+
framerate: 25
|
|
2067
|
+
};
|
|
2068
|
+
}
|
|
2069
|
+
async updateWebcams() {
|
|
2070
|
+
this.webcams = new Map();
|
|
2071
|
+
const devices = await navigator.mediaDevices.enumerateDevices();
|
|
2072
|
+
for (const device of devices){
|
|
2073
|
+
if (device.kind !== 'videoinput') continue;
|
|
2074
|
+
this.webcams.set(device.deviceId, device);
|
|
2075
|
+
}
|
|
2076
|
+
if (this.webcams.size === 0) this.webcam.device = null;
|
|
2077
|
+
else if (!this.webcam.device) this.webcam.device = this.webcams.values().next().value || null;
|
|
2078
|
+
const event = new (0, $1dedebd5ff3002eb$export$da085ff0f511c609)('webcamsUpdate', {
|
|
2079
|
+
detail: {
|
|
2080
|
+
numberOfAvailableWebcams: this.webcams.size
|
|
2081
|
+
}
|
|
2082
|
+
});
|
|
2083
|
+
(0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).dispatchEvent(event);
|
|
2084
|
+
}
|
|
2085
|
+
async enable(config) {
|
|
2086
|
+
await this.updateWebcams();
|
|
2087
|
+
const optionalParam = {};
|
|
2088
|
+
if (config?.rotate) {
|
|
2089
|
+
if (this.webcam.facingMode) {
|
|
2090
|
+
console.log('switch by facing mod');
|
|
2091
|
+
this.webcam.facingMode = this.webcam.facingMode === 'user' ? 'environment' : 'user';
|
|
2092
|
+
optionalParam.facingMode = this.webcam.facingMode;
|
|
2093
|
+
} else {
|
|
2094
|
+
const webcams = Array.from(this.webcams.keys());
|
|
2095
|
+
const deviceId = this.webcam?.device?.deviceId || 'unknown';
|
|
2096
|
+
let newWebcamIndex = webcams.indexOf(deviceId);
|
|
2097
|
+
newWebcamIndex = (newWebcamIndex + 1) % webcams.length;
|
|
2098
|
+
const newWebcamDevice = this.webcams.get(webcams[newWebcamIndex]);
|
|
2099
|
+
if (!newWebcamDevice) throw new Error(`webcam device at index ${newWebcamIndex} was not found`);
|
|
2100
|
+
this.webcam.device = newWebcamDevice;
|
|
2101
|
+
optionalParam.deviceId = {
|
|
2102
|
+
exact: this.webcam.device?.deviceId
|
|
2103
|
+
};
|
|
2104
|
+
}
|
|
2105
|
+
} else if (config?.facingMode) {
|
|
2106
|
+
optionalParam.facingMode = config.facingMode;
|
|
2107
|
+
this.webcam.facingMode = config.facingMode;
|
|
2108
|
+
} else {
|
|
2109
|
+
if (config?.device) this.webcam.device = config.device;
|
|
2110
|
+
optionalParam.deviceId = {
|
|
2111
|
+
exact: this.webcam.device?.deviceId
|
|
2112
|
+
};
|
|
2113
|
+
}
|
|
2114
|
+
if (!this.webcam.device) throw new Error('no webcam devices');
|
|
2115
|
+
this.webcam.resolution = config?.resolution || this.webcam.resolution || 'hd';
|
|
2116
|
+
this.webcam.framerate = config?.frameRate || this.webcam.framerate;
|
|
2117
|
+
let usedResolution = $92c2fcd7d44c3301$export$d21ffcc5eb136bfa[config?.resolution || this.webcam.resolution];
|
|
2118
|
+
if (this.useVideoBackground) usedResolution = $92c2fcd7d44c3301$export$d21ffcc5eb136bfa.background;
|
|
2119
|
+
this.getUserMediaConstraint = {
|
|
2120
|
+
frameRate: this.webcam.framerate,
|
|
2121
|
+
...optionalParam,
|
|
2122
|
+
...usedResolution
|
|
2123
|
+
};
|
|
2124
|
+
await (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).processMediaPermissionsAndResolveRequests({
|
|
2125
|
+
video: this.getUserMediaConstraint
|
|
2126
|
+
}).catch((error)=>{
|
|
2127
|
+
throw new Error(error, {
|
|
2128
|
+
cause: (0, $1dedebd5ff3002eb$export$75139ad9ea82cac9)
|
|
2129
|
+
});
|
|
2130
|
+
});
|
|
2131
|
+
const media = this.trackHandler.video;
|
|
2132
|
+
if (!media?.stream || !media.track) throw new Error('enableVideo : no stream or video track');
|
|
2133
|
+
const trackSettings = media.track.getSettings();
|
|
2134
|
+
if (trackSettings.deviceId) this.webcam.device = this.webcams.get(trackSettings.deviceId) || null;
|
|
2135
|
+
if (config?.facingMode) try {
|
|
2136
|
+
if (!trackSettings.facingMode) throw new Error('no facing mode');
|
|
2137
|
+
} catch {
|
|
2138
|
+
this.webcam.facingMode = undefined;
|
|
2139
|
+
}
|
|
2140
|
+
if (this.useVideoBackground) {
|
|
2141
|
+
if (this.mediaPipe) await this.mediaPipe.clean();
|
|
2142
|
+
this.mediaPipe = new (0, $cb913ea078a876a6$export$2e2bcd8739ae039)(media.stream, this.mediaPipeOption);
|
|
2143
|
+
}
|
|
2144
|
+
const stream = await this.mediaPipe?.createStream() || media.stream;
|
|
2145
|
+
await this.updateWebcams();
|
|
2146
|
+
const track = stream.getVideoTracks()[0];
|
|
2147
|
+
this.trackConstraint.advanced = [];
|
|
2148
|
+
track.enabled = true;
|
|
2149
|
+
const capabilities = await track.getCapabilities?.() || navigator.mediaDevices.getSupportedConstraints?.();
|
|
2150
|
+
if (this.webcamZoom.available) this.trackConstraint.advanced.push({
|
|
2151
|
+
zoom: this.webcamZoom.min
|
|
2152
|
+
});
|
|
2153
|
+
if (capabilities.focusMode) this.trackConstraint.advanced.push({
|
|
2154
|
+
focusMode: 'continuous'
|
|
2155
|
+
});
|
|
2156
|
+
this.applyConstraints();
|
|
2157
|
+
media.track.enabled = true;
|
|
2158
|
+
this.webcamZoom = {
|
|
2159
|
+
available: Boolean(capabilities?.zoom),
|
|
2160
|
+
min: capabilities?.zoom?.min || 0,
|
|
2161
|
+
max: capabilities?.zoom?.max || 0
|
|
2162
|
+
};
|
|
2163
|
+
return track;
|
|
2164
|
+
}
|
|
2165
|
+
async applyConstraints() {
|
|
2166
|
+
await this.trackHandler.video?.track?.applyConstraints({
|
|
2167
|
+
...this.getUserMediaConstraint,
|
|
2168
|
+
...this.trackConstraint
|
|
2169
|
+
}).catch((error)=>{
|
|
2170
|
+
$92c2fcd7d44c3301$var$log.error('applyConstraint', 'applyConstraints failed', error);
|
|
2171
|
+
});
|
|
2172
|
+
}
|
|
2173
|
+
setVideoBackground(options) {
|
|
2174
|
+
this.mediaPipe?.setOptions(options);
|
|
2175
|
+
this.mediaPipeOption = options;
|
|
2176
|
+
}
|
|
2177
|
+
scaleVideoMediasConstraintsParameter(scale) {
|
|
2178
|
+
this.scaling = scale;
|
|
2179
|
+
let videoResolution = $92c2fcd7d44c3301$export$d21ffcc5eb136bfa['hd'];
|
|
2180
|
+
if (scale === 2) videoResolution = $92c2fcd7d44c3301$export$d21ffcc5eb136bfa['vga'];
|
|
2181
|
+
else if (scale > 2) videoResolution = $92c2fcd7d44c3301$export$d21ffcc5eb136bfa['qvga'];
|
|
2182
|
+
if (!this.webcam.resolution || $92c2fcd7d44c3301$export$d21ffcc5eb136bfa[this.webcam.resolution].qualityIndex >= videoResolution.qualityIndex) {
|
|
2183
|
+
this.getUserMediaConstraint = {
|
|
2184
|
+
...this.getUserMediaConstraint,
|
|
2185
|
+
...videoResolution
|
|
2186
|
+
};
|
|
2187
|
+
$92c2fcd7d44c3301$var$log.log('scaleVideoMediasConstraintsParameter', `scaling video by ${scale}`, videoResolution);
|
|
2188
|
+
this.applyConstraints();
|
|
2189
|
+
}
|
|
2190
|
+
}
|
|
2191
|
+
async unzoomVideo() {
|
|
2192
|
+
if (!this.webcamZoom.available) throw new Error('Webcam zoom is not available');
|
|
2193
|
+
if (!this.trackHandler.video?.track) throw new Error('No webcam track available');
|
|
2194
|
+
const i = this.trackConstraint.advanced.findIndex((tc)=>tc.zoom);
|
|
2195
|
+
if (i !== -1) this.trackConstraint.advanced[i].zoom = this.webcamZoom.min;
|
|
2196
|
+
else this.trackConstraint.advanced.push({
|
|
2197
|
+
zoom: this.webcamZoom.min
|
|
2198
|
+
});
|
|
2199
|
+
this.applyConstraints();
|
|
2200
|
+
}
|
|
2201
|
+
async zoomVideo() {
|
|
2202
|
+
if (!this.webcamZoom.available) throw new Error('Webcam zoom is not available');
|
|
2203
|
+
if (!this.trackHandler.video?.track) throw new Error('No webcam track available');
|
|
2204
|
+
const i = this.trackConstraint.advanced.findIndex((tc)=>tc.zoom);
|
|
2205
|
+
if (i !== -1) this.trackConstraint.advanced[i].zoom = this.webcamZoom.min * 2;
|
|
2206
|
+
else this.trackConstraint.advanced.push({
|
|
2207
|
+
zoom: this.webcamZoom.min * 2
|
|
2208
|
+
});
|
|
2209
|
+
this.applyConstraints();
|
|
2210
|
+
}
|
|
2211
|
+
getState() {
|
|
2212
|
+
return {
|
|
2213
|
+
device: this.webcam.device,
|
|
2214
|
+
error: this.webcam.error
|
|
2215
|
+
};
|
|
2216
|
+
}
|
|
2217
|
+
cleanMediapipe() {
|
|
2218
|
+
if (this.mediaPipe) {
|
|
2219
|
+
this.useVideoBackground = false;
|
|
2220
|
+
this.mediaPipe.clean();
|
|
2221
|
+
this.mediaPipe = undefined;
|
|
2222
|
+
}
|
|
2223
|
+
}
|
|
2224
|
+
clean() {
|
|
2225
|
+
this.webcam.device = null;
|
|
2226
|
+
this.cleanMediapipe();
|
|
1996
2227
|
}
|
|
2228
|
+
}
|
|
2229
|
+
|
|
2230
|
+
|
|
2231
|
+
const $1dedebd5ff3002eb$var$log = new (0, $d0c6baf97675ab49$export$2e2bcd8739ae039)('StreamerClient');
|
|
2232
|
+
$1dedebd5ff3002eb$var$log.info('StreamerClient', 'test');
|
|
2233
|
+
const $1dedebd5ff3002eb$export$103bedf43ba882db = {
|
|
2234
|
+
WEBRTC_FAILED: 'WRTC1',
|
|
2235
|
+
WEBRTC_RECOVER_ERROR: 'WRTC2',
|
|
2236
|
+
WEBRTC_BAD_STATE_ERROR: 'WRTC3',
|
|
2237
|
+
CREATE_TRANSPORT_FAILED: 'TRANS1',
|
|
2238
|
+
CONSUME_ERROR: 'CONS1',
|
|
2239
|
+
SOCKET_LOST: 'SOCK1',
|
|
2240
|
+
USER_LIMIT: 'USERLIMIT'
|
|
1997
2241
|
};
|
|
2242
|
+
const $1dedebd5ff3002eb$export$75139ad9ea82cac9 = 'getUserMedia error';
|
|
1998
2243
|
const $1dedebd5ff3002eb$var$ONE_TRANSPORT_FOR_ALL_MEDIAS = true;
|
|
1999
2244
|
const $1dedebd5ff3002eb$var$WEBCAM_SIMULCAST_ENCODINGS = [
|
|
2000
2245
|
{
|
|
@@ -2010,23 +2255,17 @@ const $1dedebd5ff3002eb$var$WEBCAM_SIMULCAST_ENCODINGS = [
|
|
|
2010
2255
|
maxBitrate: 5000000
|
|
2011
2256
|
}
|
|
2012
2257
|
];
|
|
2013
|
-
class $1dedebd5ff3002eb$
|
|
2258
|
+
class $1dedebd5ff3002eb$export$da085ff0f511c609 extends CustomEvent {
|
|
2014
2259
|
// eslint-disable-next-line @typescript-eslint/no-useless-constructor
|
|
2015
2260
|
constructor(name, data){
|
|
2016
2261
|
super(name, data);
|
|
2017
2262
|
}
|
|
2018
2263
|
}
|
|
2019
2264
|
const $1dedebd5ff3002eb$var$StreamerEventTargetType = EventTarget;
|
|
2020
|
-
const $1dedebd5ff3002eb$var$defaultMediapipeOptions = {
|
|
2021
|
-
background: undefined,
|
|
2022
|
-
fillColor: '#ffffff',
|
|
2023
|
-
type: 'blur',
|
|
2024
|
-
blurLevel: 10
|
|
2025
|
-
};
|
|
2026
2265
|
class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$StreamerEventTargetType {
|
|
2027
2266
|
constructor(){
|
|
2028
|
-
super(), this.mediasoupTransport = {}, this.
|
|
2029
|
-
const event = new $1dedebd5ff3002eb$
|
|
2267
|
+
super(), this.mediasoupTransport = {}, this.waitingRoomAccess = false, this.tracksHandler = new (0, $d582bbc5717818b4$export$2e2bcd8739ae039)(), this.pendingDeviceRequest = {}, this.joinOptions = {}, this.devicesList = [], this.plan = undefined, this.permissions = [], this.onAudioLevel = (0, $3898fb88b880f5ba$export$de363e709c412c8a)((audioLevel)=>{
|
|
2268
|
+
const event = new $1dedebd5ff3002eb$export$da085ff0f511c609('audioLevel', {
|
|
2030
2269
|
cancelable: true,
|
|
2031
2270
|
bubbles: true,
|
|
2032
2271
|
detail: {
|
|
@@ -2049,19 +2288,10 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2049
2288
|
}
|
|
2050
2289
|
]
|
|
2051
2290
|
};
|
|
2291
|
+
this.camera = new (0, $92c2fcd7d44c3301$export$79f141de891a5fed)(this.tracksHandler);
|
|
2052
2292
|
this.peers = new Map();
|
|
2053
2293
|
this.consumers = new Map();
|
|
2054
|
-
this.webcams = new Map();
|
|
2055
|
-
this.webcam = {
|
|
2056
|
-
device: null,
|
|
2057
|
-
resolution: 'hd'
|
|
2058
|
-
};
|
|
2059
2294
|
this.webcamTrack = null;
|
|
2060
|
-
this.webcamZoom = {
|
|
2061
|
-
available: false,
|
|
2062
|
-
min: 0,
|
|
2063
|
-
max: 0
|
|
2064
|
-
};
|
|
2065
2295
|
this.microphone = {
|
|
2066
2296
|
device: null,
|
|
2067
2297
|
muted: false
|
|
@@ -2120,7 +2350,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2120
2350
|
}
|
|
2121
2351
|
onStartSpeak() {
|
|
2122
2352
|
if (this.micProducer && !this.micProducer.paused) {
|
|
2123
|
-
const event = new $1dedebd5ff3002eb$
|
|
2353
|
+
const event = new $1dedebd5ff3002eb$export$da085ff0f511c609('localStartSpeak', {
|
|
2124
2354
|
cancelable: true,
|
|
2125
2355
|
bubbles: true,
|
|
2126
2356
|
detail: {}
|
|
@@ -2131,7 +2361,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2131
2361
|
}
|
|
2132
2362
|
onStopSpeak() {
|
|
2133
2363
|
if (this.micProducer && !this.micProducer.paused) {
|
|
2134
|
-
const event = new $1dedebd5ff3002eb$
|
|
2364
|
+
const event = new $1dedebd5ff3002eb$export$da085ff0f511c609('localStopSpeak', {
|
|
2135
2365
|
detail: {}
|
|
2136
2366
|
});
|
|
2137
2367
|
this.dispatchEvent(event);
|
|
@@ -2139,7 +2369,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2139
2369
|
}
|
|
2140
2370
|
}
|
|
2141
2371
|
onCriticalError(code) {
|
|
2142
|
-
const event = new $1dedebd5ff3002eb$
|
|
2372
|
+
const event = new $1dedebd5ff3002eb$export$da085ff0f511c609('criticalError', {
|
|
2143
2373
|
detail: {
|
|
2144
2374
|
code: code
|
|
2145
2375
|
}
|
|
@@ -2173,9 +2403,12 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2173
2403
|
}
|
|
2174
2404
|
}
|
|
2175
2405
|
async init(room = this.roomId, options = this.joinOptions) {
|
|
2176
|
-
const initResult = {
|
|
2406
|
+
const initResult = {
|
|
2407
|
+
type: 'instant'
|
|
2408
|
+
};
|
|
2177
2409
|
this.roomId = room;
|
|
2178
2410
|
this.peerId = (0, $jQDcL$uuid.v4)();
|
|
2411
|
+
this.recordingGroup = options.recordingGroup;
|
|
2179
2412
|
this.joinOptions = options;
|
|
2180
2413
|
if (!this.roomId) throw new Error('Missing room ID');
|
|
2181
2414
|
let url;
|
|
@@ -2183,8 +2416,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2183
2416
|
const urlParams = new URLSearchParams();
|
|
2184
2417
|
if (options.flowToken) urlParams.append('flowToken', options.flowToken);
|
|
2185
2418
|
if (options.languageCode) urlParams.append('languageCode', options.languageCode);
|
|
2186
|
-
|
|
2187
|
-
const { streamer_instance: instanceId, plan: { permissions: permissions, name: name }, flow: flow, flow_v0: flow_v0, company_id: company_id, company: company, defaultPublicPage: defaultPublicPage, videoBackgrounds: videoBackgrounds } = await fetch(`${this.config.apiUrl}/streams/${room}/info?${urlParams}`, {
|
|
2419
|
+
const { streamer_instance: instanceId, plan: { permissions: permissions, name: name }, flow: flow, flow_v0: flow_v0, company_id: company_id, company: company, defaultPublicPage: defaultPublicPage, videoBackgrounds: videoBackgrounds, type: type } = await fetch(`${this.config.apiUrl}/streams/${room}/info?${urlParams}`, {
|
|
2188
2420
|
method: 'get',
|
|
2189
2421
|
headers: {
|
|
2190
2422
|
'Content-Type': 'application/json'
|
|
@@ -2196,11 +2428,12 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2196
2428
|
initResult.hideStreamInvite = company.hide_stream_invite;
|
|
2197
2429
|
initResult.videoBackgrounds = videoBackgrounds;
|
|
2198
2430
|
if (flow_v0) initResult.flowV0 = flow_v0;
|
|
2199
|
-
if (flow && flow.steps.length > 0)
|
|
2431
|
+
if (flow && flow.steps.length > 0) initResult.flow = flow;
|
|
2432
|
+
if (type === 'assist') {
|
|
2200
2433
|
options.recorder = true;
|
|
2201
2434
|
this.joinOptions.recorder = true;
|
|
2202
|
-
|
|
2203
|
-
|
|
2435
|
+
} else this.joinOptions.recorder = false;
|
|
2436
|
+
initResult.type = type;
|
|
2204
2437
|
this.companyId = company_id;
|
|
2205
2438
|
this.company = company;
|
|
2206
2439
|
this.permissions = permissions;
|
|
@@ -2217,7 +2450,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2217
2450
|
url = `${this.config.streamerServer}/${instanceId}/v2/${recorderPath}?${searchParams}`;
|
|
2218
2451
|
} catch (roomError) {
|
|
2219
2452
|
console.error('init', roomError);
|
|
2220
|
-
const event = new $1dedebd5ff3002eb$
|
|
2453
|
+
const event = new $1dedebd5ff3002eb$export$da085ff0f511c609('invalidRoom', {
|
|
2221
2454
|
detail: {}
|
|
2222
2455
|
});
|
|
2223
2456
|
this.dispatchEvent(event);
|
|
@@ -2267,7 +2500,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2267
2500
|
muted: muted,
|
|
2268
2501
|
producersData: []
|
|
2269
2502
|
});
|
|
2270
|
-
const event = new $1dedebd5ff3002eb$
|
|
2503
|
+
const event = new $1dedebd5ff3002eb$export$da085ff0f511c609('newPeer', {
|
|
2271
2504
|
detail: {
|
|
2272
2505
|
peerId: id,
|
|
2273
2506
|
displayName: profile.name,
|
|
@@ -2292,7 +2525,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2292
2525
|
consumerId: consumer.id
|
|
2293
2526
|
});
|
|
2294
2527
|
});
|
|
2295
|
-
const event = new $1dedebd5ff3002eb$
|
|
2528
|
+
const event = new $1dedebd5ff3002eb$export$da085ff0f511c609('peerClosed', {
|
|
2296
2529
|
detail: {
|
|
2297
2530
|
peerId: peerId
|
|
2298
2531
|
}
|
|
@@ -2303,12 +2536,12 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2303
2536
|
this.onConsumerClose({
|
|
2304
2537
|
consumerId: consumerId
|
|
2305
2538
|
});
|
|
2306
|
-
} else if (notification.method === 'recordStopped') this.dispatchEvent(new $1dedebd5ff3002eb$
|
|
2539
|
+
} else if (notification.method === 'recordStopped') this.dispatchEvent(new $1dedebd5ff3002eb$export$da085ff0f511c609('recordStopped', {
|
|
2307
2540
|
detail: notification.data
|
|
2308
2541
|
}));
|
|
2309
2542
|
else if (notification.method === 'displayName') {
|
|
2310
2543
|
const { peerId: peerId, displayName: displayName } = notification.data;
|
|
2311
|
-
const event = new $1dedebd5ff3002eb$
|
|
2544
|
+
const event = new $1dedebd5ff3002eb$export$da085ff0f511c609('displayName', {
|
|
2312
2545
|
detail: {
|
|
2313
2546
|
peerId: peerId,
|
|
2314
2547
|
displayName: displayName,
|
|
@@ -2327,17 +2560,17 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2327
2560
|
this.dispatchEvent(event);
|
|
2328
2561
|
} else if (notification.method === 'requestDevice') {
|
|
2329
2562
|
this.pendingDeviceRequest[notification.data.requestId] = notification.data;
|
|
2330
|
-
const event = new $1dedebd5ff3002eb$
|
|
2563
|
+
const event = new $1dedebd5ff3002eb$export$da085ff0f511c609('requestDevice', {
|
|
2331
2564
|
detail: notification.data
|
|
2332
2565
|
});
|
|
2333
2566
|
this.dispatchEvent(event);
|
|
2334
2567
|
} else if (notification.method === 'startSpeak') {
|
|
2335
|
-
const event = new $1dedebd5ff3002eb$
|
|
2568
|
+
const event = new $1dedebd5ff3002eb$export$da085ff0f511c609('peerStartSpeak', {
|
|
2336
2569
|
detail: notification.data
|
|
2337
2570
|
});
|
|
2338
2571
|
this.dispatchEvent(event);
|
|
2339
2572
|
} else if (notification.method === 'stopSpeak') {
|
|
2340
|
-
const event = new $1dedebd5ff3002eb$
|
|
2573
|
+
const event = new $1dedebd5ff3002eb$export$da085ff0f511c609('peerStopSpeak', {
|
|
2341
2574
|
detail: notification.data
|
|
2342
2575
|
});
|
|
2343
2576
|
this.dispatchEvent(event);
|
|
@@ -2353,7 +2586,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2353
2586
|
break;
|
|
2354
2587
|
}
|
|
2355
2588
|
const eventName = notification.method === 'producerPaused' ? 'mediaPause' : 'mediaResume';
|
|
2356
|
-
const event = new $1dedebd5ff3002eb$
|
|
2589
|
+
const event = new $1dedebd5ff3002eb$export$da085ff0f511c609(eventName, {
|
|
2357
2590
|
detail: {
|
|
2358
2591
|
mediaId: id,
|
|
2359
2592
|
peerId: peerId,
|
|
@@ -2364,7 +2597,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2364
2597
|
this.dispatchEvent(event);
|
|
2365
2598
|
} else if (notification.method === 'mute') {
|
|
2366
2599
|
const { peerId: peerId, device: device } = notification.data;
|
|
2367
|
-
const event = new $1dedebd5ff3002eb$
|
|
2600
|
+
const event = new $1dedebd5ff3002eb$export$da085ff0f511c609('mediaPause', {
|
|
2368
2601
|
detail: {
|
|
2369
2602
|
peerId: peerId,
|
|
2370
2603
|
deviceType: device,
|
|
@@ -2374,7 +2607,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2374
2607
|
this.dispatchEvent(event);
|
|
2375
2608
|
} else if (notification.method === 'unmute') {
|
|
2376
2609
|
const { peerId: peerId, device: device } = notification.data;
|
|
2377
|
-
const event = new $1dedebd5ff3002eb$
|
|
2610
|
+
const event = new $1dedebd5ff3002eb$export$da085ff0f511c609('mediaResume', {
|
|
2378
2611
|
detail: {
|
|
2379
2612
|
peerId: peerId,
|
|
2380
2613
|
deviceType: device,
|
|
@@ -2384,33 +2617,33 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2384
2617
|
this.dispatchEvent(event);
|
|
2385
2618
|
} else if (notification.method === 'requestAccessResult') {
|
|
2386
2619
|
if (notification.data.success) this.onEnterRoom();
|
|
2387
|
-
const event = new $1dedebd5ff3002eb$
|
|
2620
|
+
const event = new $1dedebd5ff3002eb$export$da085ff0f511c609(notification.method, {
|
|
2388
2621
|
detail: notification.data
|
|
2389
2622
|
});
|
|
2390
2623
|
this.dispatchEvent(event);
|
|
2391
2624
|
} else if (notification.method === 'cancelAccessRequest') {
|
|
2392
|
-
const event = new $1dedebd5ff3002eb$
|
|
2625
|
+
const event = new $1dedebd5ff3002eb$export$da085ff0f511c609(notification.method, {
|
|
2393
2626
|
detail: notification.data
|
|
2394
2627
|
});
|
|
2395
2628
|
this.dispatchEvent(event);
|
|
2396
2629
|
} else if (notification.method === 'accessRequest') {
|
|
2397
|
-
const event = new $1dedebd5ff3002eb$
|
|
2630
|
+
const event = new $1dedebd5ff3002eb$export$da085ff0f511c609(notification.method, {
|
|
2398
2631
|
detail: notification.data
|
|
2399
2632
|
});
|
|
2400
2633
|
this.dispatchEvent(event);
|
|
2401
2634
|
} else if (notification.method === 'requestDeviceResult') {
|
|
2402
|
-
const event = new $1dedebd5ff3002eb$
|
|
2635
|
+
const event = new $1dedebd5ff3002eb$export$da085ff0f511c609(notification.method, {
|
|
2403
2636
|
detail: notification.data
|
|
2404
2637
|
});
|
|
2405
2638
|
this.dispatchEvent(event);
|
|
2406
2639
|
} else if (notification.method === 'terminateRoom') {
|
|
2407
2640
|
this.release();
|
|
2408
|
-
const event = new $1dedebd5ff3002eb$
|
|
2641
|
+
const event = new $1dedebd5ff3002eb$export$da085ff0f511c609(notification.method, {
|
|
2409
2642
|
detail: notification.data
|
|
2410
2643
|
});
|
|
2411
2644
|
this.dispatchEvent(event);
|
|
2412
2645
|
} else if (notification.method === 'videoRecordingStarted' || notification.method === 'videoRecordingStopped' || notification.method === 'videoRecordingRequested') {
|
|
2413
|
-
const event = new $1dedebd5ff3002eb$
|
|
2646
|
+
const event = new $1dedebd5ff3002eb$export$da085ff0f511c609(notification.method, {
|
|
2414
2647
|
detail: {}
|
|
2415
2648
|
});
|
|
2416
2649
|
this.dispatchEvent(event);
|
|
@@ -2435,7 +2668,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2435
2668
|
const sortedChunks = message.chunks.sort((a, b)=>a.index - b.index);
|
|
2436
2669
|
const mergedChunks = sortedChunks.reduce((originalMessage, chunk)=>originalMessage + chunk.data, '');
|
|
2437
2670
|
const parsedEvent = JSON.parse(mergedChunks);
|
|
2438
|
-
const event = new $1dedebd5ff3002eb$
|
|
2671
|
+
const event = new $1dedebd5ff3002eb$export$da085ff0f511c609('customMessage', {
|
|
2439
2672
|
detail: {
|
|
2440
2673
|
...notification.data,
|
|
2441
2674
|
event: parsedEvent
|
|
@@ -2454,7 +2687,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2454
2687
|
};
|
|
2455
2688
|
if (open) onOpen(err);
|
|
2456
2689
|
});
|
|
2457
|
-
this.dispatchEvent(new $1dedebd5ff3002eb$
|
|
2690
|
+
this.dispatchEvent(new $1dedebd5ff3002eb$export$da085ff0f511c609('initialized', {
|
|
2458
2691
|
detail: initResult
|
|
2459
2692
|
}));
|
|
2460
2693
|
return initResult;
|
|
@@ -2526,7 +2759,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2526
2759
|
}
|
|
2527
2760
|
onTransportStateChangeNetwork(transport, isOk) {
|
|
2528
2761
|
$1dedebd5ff3002eb$var$log.warn('onTransportStateChangeNetwork', '\nid:', transport.id, '\nisOk:', isOk);
|
|
2529
|
-
const event = new $1dedebd5ff3002eb$
|
|
2762
|
+
const event = new $1dedebd5ff3002eb$export$da085ff0f511c609('networkStateChange', {
|
|
2530
2763
|
detail: {
|
|
2531
2764
|
isOk: isOk
|
|
2532
2765
|
}
|
|
@@ -2557,7 +2790,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2557
2790
|
apiKey: apiKey,
|
|
2558
2791
|
email: email
|
|
2559
2792
|
});
|
|
2560
|
-
if (this.agentIdentity) this.dispatchEvent(new $1dedebd5ff3002eb$
|
|
2793
|
+
if (this.agentIdentity) this.dispatchEvent(new $1dedebd5ff3002eb$export$da085ff0f511c609('agentIdentity', {
|
|
2561
2794
|
detail: {
|
|
2562
2795
|
success: true,
|
|
2563
2796
|
email: this.agentIdentity.email,
|
|
@@ -2567,7 +2800,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2567
2800
|
}));
|
|
2568
2801
|
} catch (agentInfoError) {
|
|
2569
2802
|
$1dedebd5ff3002eb$var$log.warn('setAgentIdentity', agentInfoError);
|
|
2570
|
-
this.dispatchEvent(new $1dedebd5ff3002eb$
|
|
2803
|
+
this.dispatchEvent(new $1dedebd5ff3002eb$export$da085ff0f511c609('agentIdentity', {
|
|
2571
2804
|
detail: {
|
|
2572
2805
|
success: false
|
|
2573
2806
|
}
|
|
@@ -2603,7 +2836,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2603
2836
|
if (!this.protoo) throw new Error('stream client not initiated');
|
|
2604
2837
|
await this.protoo.request('join');
|
|
2605
2838
|
await this.onEnterRoom();
|
|
2606
|
-
if (this.agentIdentity) this.dispatchEvent(new $1dedebd5ff3002eb$
|
|
2839
|
+
if (this.agentIdentity) this.dispatchEvent(new $1dedebd5ff3002eb$export$da085ff0f511c609('agentIdentity', {
|
|
2607
2840
|
detail: {
|
|
2608
2841
|
success: true,
|
|
2609
2842
|
email: this.agentIdentity.email,
|
|
@@ -2628,7 +2861,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2628
2861
|
peerId: peer.id
|
|
2629
2862
|
}
|
|
2630
2863
|
]));
|
|
2631
|
-
this.dispatchEvent(new $1dedebd5ff3002eb$
|
|
2864
|
+
this.dispatchEvent(new $1dedebd5ff3002eb$export$da085ff0f511c609('enterRoom', {
|
|
2632
2865
|
detail: {
|
|
2633
2866
|
videoRecording: videoRecording,
|
|
2634
2867
|
videoRecordStarted: videoRecordStarted,
|
|
@@ -2655,7 +2888,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2655
2888
|
if (this.joinOptions.apiKey) this.setAgentIdentity({
|
|
2656
2889
|
apiKey: this.joinOptions.apiKey
|
|
2657
2890
|
});
|
|
2658
|
-
this.dispatchEvent(new $1dedebd5ff3002eb$
|
|
2891
|
+
this.dispatchEvent(new $1dedebd5ff3002eb$export$da085ff0f511c609('enterRoom', {
|
|
2659
2892
|
detail: {
|
|
2660
2893
|
videoRecording: {
|
|
2661
2894
|
started: false,
|
|
@@ -2680,7 +2913,9 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2680
2913
|
}
|
|
2681
2914
|
await this.processMediaPermissionsAndResolveRequests({
|
|
2682
2915
|
audio: {
|
|
2683
|
-
deviceId:
|
|
2916
|
+
deviceId: {
|
|
2917
|
+
exact: deviceId
|
|
2918
|
+
},
|
|
2684
2919
|
noiseSuppression: true,
|
|
2685
2920
|
echoCancellation: true
|
|
2686
2921
|
}
|
|
@@ -2700,7 +2935,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2700
2935
|
const trackSettings = track.getSettings();
|
|
2701
2936
|
const device = this.devicesList.find((it)=>it.deviceId === trackSettings.deviceId);
|
|
2702
2937
|
this.microphone.device = device || null;
|
|
2703
|
-
const event = new $1dedebd5ff3002eb$
|
|
2938
|
+
const event = new $1dedebd5ff3002eb$export$da085ff0f511c609('microphoneChange', {
|
|
2704
2939
|
detail: {
|
|
2705
2940
|
device: device
|
|
2706
2941
|
}
|
|
@@ -2715,7 +2950,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2715
2950
|
const producerId = this.micProducer?.id;
|
|
2716
2951
|
this.micProducer?.close();
|
|
2717
2952
|
this.micProducer = undefined;
|
|
2718
|
-
const event = new $1dedebd5ff3002eb$
|
|
2953
|
+
const event = new $1dedebd5ff3002eb$export$da085ff0f511c609('microphoneMute', {
|
|
2719
2954
|
detail: {}
|
|
2720
2955
|
});
|
|
2721
2956
|
this.dispatchEvent(event);
|
|
@@ -2725,7 +2960,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2725
2960
|
}
|
|
2726
2961
|
async onDeviceChange() {
|
|
2727
2962
|
$1dedebd5ff3002eb$var$log.log('onDeviceChange', 'detecting device change');
|
|
2728
|
-
const deviceListChangeEvent = new $1dedebd5ff3002eb$
|
|
2963
|
+
const deviceListChangeEvent = new $1dedebd5ff3002eb$export$da085ff0f511c609('devicesListChange', {
|
|
2729
2964
|
detail: {}
|
|
2730
2965
|
});
|
|
2731
2966
|
this.dispatchEvent(deviceListChangeEvent);
|
|
@@ -2758,7 +2993,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2758
2993
|
}
|
|
2759
2994
|
$1dedebd5ff3002eb$var$log.log('onDeviceChange', 'detecting audio input change');
|
|
2760
2995
|
if (!this.audioInputDefaultDevice || this.audioInputDefaultDevice.label !== defaultDevice.label) {
|
|
2761
|
-
const event = new $1dedebd5ff3002eb$
|
|
2996
|
+
const event = new $1dedebd5ff3002eb$export$da085ff0f511c609('defaultAudioDeviceChange', {
|
|
2762
2997
|
detail: defaultDevice
|
|
2763
2998
|
});
|
|
2764
2999
|
this.audioInputDefaultDevice = defaultDevice;
|
|
@@ -2782,7 +3017,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2782
3017
|
this.microphone.muted = true;
|
|
2783
3018
|
this.closeMicrophoneProducer();
|
|
2784
3019
|
this.microphone.error = error;
|
|
2785
|
-
if (error.cause !== $1dedebd5ff3002eb$
|
|
3020
|
+
if (error.cause !== $1dedebd5ff3002eb$export$75139ad9ea82cac9 && window.Sentry) window.Sentry.captureException(error);
|
|
2786
3021
|
throw error;
|
|
2787
3022
|
});
|
|
2788
3023
|
this.microphone.error = undefined;
|
|
@@ -2797,7 +3032,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2797
3032
|
}
|
|
2798
3033
|
}).catch((error)=>{
|
|
2799
3034
|
throw new Error(error, {
|
|
2800
|
-
cause: $1dedebd5ff3002eb$
|
|
3035
|
+
cause: $1dedebd5ff3002eb$export$75139ad9ea82cac9
|
|
2801
3036
|
});
|
|
2802
3037
|
});
|
|
2803
3038
|
if (!this.tracksHandler.audio.stream || !this.tracksHandler.audio.track) throw new Error('enableMicrophone : no stream or audio track');
|
|
@@ -2835,7 +3070,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2835
3070
|
this.micProducer = micProducer;
|
|
2836
3071
|
this.microphone.device = device || null;
|
|
2837
3072
|
this.microphone.muted = false;
|
|
2838
|
-
const event = new $1dedebd5ff3002eb$
|
|
3073
|
+
const event = new $1dedebd5ff3002eb$export$da085ff0f511c609('microphoneEnabled', {
|
|
2839
3074
|
detail: {}
|
|
2840
3075
|
});
|
|
2841
3076
|
this.dispatchEvent(event);
|
|
@@ -2851,7 +3086,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2851
3086
|
this.protoo?.notify('mute', {
|
|
2852
3087
|
device: device
|
|
2853
3088
|
}).catch((err)=>console.error('failed to send mute event', err));
|
|
2854
|
-
const event = new $1dedebd5ff3002eb$
|
|
3089
|
+
const event = new $1dedebd5ff3002eb$export$da085ff0f511c609('microphoneMute', {
|
|
2855
3090
|
detail: {}
|
|
2856
3091
|
});
|
|
2857
3092
|
this.dispatchEvent(event);
|
|
@@ -2868,7 +3103,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2868
3103
|
this.protoo?.notify('unmute', {
|
|
2869
3104
|
device: device
|
|
2870
3105
|
}).catch((err)=>console.error('failed to send unmute event', err));
|
|
2871
|
-
const event = new $1dedebd5ff3002eb$
|
|
3106
|
+
const event = new $1dedebd5ff3002eb$export$da085ff0f511c609('microphoneUnmute', {
|
|
2872
3107
|
detail: {}
|
|
2873
3108
|
});
|
|
2874
3109
|
this.dispatchEvent(event);
|
|
@@ -2890,10 +3125,6 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2890
3125
|
release() {
|
|
2891
3126
|
$1dedebd5ff3002eb$var$log.log('release');
|
|
2892
3127
|
for(let key in this.mediasoupTransport)this.closeWebrtcTransport(key);
|
|
2893
|
-
if (this.mediaPipe) {
|
|
2894
|
-
this.mediaPipe.clean();
|
|
2895
|
-
this.mediaPipe = undefined;
|
|
2896
|
-
}
|
|
2897
3128
|
this.audioMedia?.removeAll();
|
|
2898
3129
|
this.audioMedia = undefined;
|
|
2899
3130
|
this.webcamTrack?.stop();
|
|
@@ -2913,7 +3144,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2913
3144
|
}
|
|
2914
3145
|
endCall() {
|
|
2915
3146
|
this.release();
|
|
2916
|
-
const event = new $1dedebd5ff3002eb$
|
|
3147
|
+
const event = new $1dedebd5ff3002eb$export$da085ff0f511c609('leaveRoom', {
|
|
2917
3148
|
detail: {}
|
|
2918
3149
|
});
|
|
2919
3150
|
this.dispatchEvent(event);
|
|
@@ -2924,24 +3155,8 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2924
3155
|
if (!this.protoo) throw new Error('stream client not initiated');
|
|
2925
3156
|
this.protoo.request('terminateRoom');
|
|
2926
3157
|
}
|
|
2927
|
-
async updateWebcams() {
|
|
2928
|
-
this.webcams = new Map();
|
|
2929
|
-
const devices = await navigator.mediaDevices.enumerateDevices();
|
|
2930
|
-
for (const device of devices){
|
|
2931
|
-
if (device.kind !== 'videoinput') continue;
|
|
2932
|
-
this.webcams.set(device.deviceId, device);
|
|
2933
|
-
}
|
|
2934
|
-
if (this.webcams.size === 0) this.webcam.device = null;
|
|
2935
|
-
else if (!this.webcam.device) this.webcam.device = this.webcams.values().next().value || null;
|
|
2936
|
-
const event = new $1dedebd5ff3002eb$var$SnapcallEvent('webcamsUpdate', {
|
|
2937
|
-
detail: {
|
|
2938
|
-
numberOfAvailableWebcams: this.webcams.size
|
|
2939
|
-
}
|
|
2940
|
-
});
|
|
2941
|
-
this.dispatchEvent(event);
|
|
2942
|
-
}
|
|
2943
3158
|
isVideoZoomAvailable() {
|
|
2944
|
-
return this.webcamZoom.available;
|
|
3159
|
+
return this.camera.webcamZoom.available;
|
|
2945
3160
|
}
|
|
2946
3161
|
resolvePendingDeviceRequest(deviceType, result, failure) {
|
|
2947
3162
|
Object.keys(this.pendingDeviceRequest).forEach((key)=>{
|
|
@@ -2958,13 +3173,13 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2958
3173
|
}
|
|
2959
3174
|
async processMediaPermissionsAndResolveRequests(constraints) {
|
|
2960
3175
|
let error;
|
|
2961
|
-
const event = new $1dedebd5ff3002eb$
|
|
3176
|
+
const event = new $1dedebd5ff3002eb$export$da085ff0f511c609('requestAccessUpdate', {
|
|
2962
3177
|
detail: {}
|
|
2963
3178
|
});
|
|
2964
3179
|
try {
|
|
2965
3180
|
const promise = this.tracksHandler.requestMediaPermissions(constraints);
|
|
2966
3181
|
this.dispatchEvent(event);
|
|
2967
|
-
|
|
3182
|
+
return promise;
|
|
2968
3183
|
} catch (err) {
|
|
2969
3184
|
error = err;
|
|
2970
3185
|
} finally{
|
|
@@ -3004,17 +3219,8 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
3004
3219
|
$1dedebd5ff3002eb$var$log.log('restartIce', 'restartIceFailed', err);
|
|
3005
3220
|
}
|
|
3006
3221
|
}
|
|
3007
|
-
scaleVideoMediasConstraintsParameter(scale) {
|
|
3008
|
-
let videoResolution = $1dedebd5ff3002eb$export$d21ffcc5eb136bfa['hd'];
|
|
3009
|
-
if (scale === 2) videoResolution = $1dedebd5ff3002eb$export$d21ffcc5eb136bfa['vga'];
|
|
3010
|
-
else if (scale > 2) videoResolution = $1dedebd5ff3002eb$export$d21ffcc5eb136bfa['qvga'];
|
|
3011
|
-
if (!this.webcam.resolution || $1dedebd5ff3002eb$export$d21ffcc5eb136bfa[this.webcam.resolution].qualityIndex >= videoResolution.qualityIndex) {
|
|
3012
|
-
$1dedebd5ff3002eb$var$log.log('scaleVideoMediasConstraintsParameter', `scaling video by ${scale}`, videoResolution);
|
|
3013
|
-
this.webcamProducer?.track?.applyConstraints(videoResolution);
|
|
3014
|
-
}
|
|
3015
|
-
}
|
|
3016
3222
|
scaleVideoEncodingsParameter() {
|
|
3017
|
-
if (this.useVideoBackground) return;
|
|
3223
|
+
if (this.camera.useVideoBackground) return;
|
|
3018
3224
|
try {
|
|
3019
3225
|
let videoCount = 0;
|
|
3020
3226
|
this.consumers.forEach((consumer)=>{
|
|
@@ -3030,136 +3236,54 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
3030
3236
|
if (videoCount >= 9) scale = {
|
|
3031
3237
|
scaleResolutionDownBy: 4
|
|
3032
3238
|
};
|
|
3033
|
-
if (!(0, $jQDcL$mediasoupclientlibProducer.Producer).prototype.setRtpEncodingParameters) return this.scaleVideoMediasConstraintsParameter(scale.scaleResolutionDownBy);
|
|
3239
|
+
if (!(0, $jQDcL$mediasoupclientlibProducer.Producer).prototype.setRtpEncodingParameters) return this.camera.scaleVideoMediasConstraintsParameter(scale.scaleResolutionDownBy);
|
|
3034
3240
|
if (this.webcamProducer && !this.webcamProducer.closed) {
|
|
3035
3241
|
$1dedebd5ff3002eb$var$log.log('scaleVideoEncodingsParameter', `scaling video by ${scale.scaleResolutionDownBy}`);
|
|
3036
3242
|
this.webcamProducer?.setRtpEncodingParameters?.(scale).catch((err)=>{
|
|
3037
3243
|
$1dedebd5ff3002eb$var$log.error('scaleVideoEncodingsParameter', 'scaleResolutionDownBy not supported', err);
|
|
3038
|
-
this.scaleVideoMediasConstraintsParameter(scale.scaleResolutionDownBy);
|
|
3244
|
+
this.camera.scaleVideoMediasConstraintsParameter(scale.scaleResolutionDownBy);
|
|
3039
3245
|
});
|
|
3040
3246
|
}
|
|
3041
3247
|
} catch (error) {
|
|
3042
3248
|
$1dedebd5ff3002eb$var$log.error('scaleVideoEncodingsParameter', 'scaleVideo error', error);
|
|
3043
3249
|
}
|
|
3044
3250
|
}
|
|
3045
|
-
setVideoBackground(options) {
|
|
3046
|
-
this.mediaPipe?.setOptions(options);
|
|
3047
|
-
this.mediaPipeOption = options;
|
|
3048
|
-
}
|
|
3049
3251
|
async initVideoBackground() {
|
|
3050
3252
|
if (!this.permissions.find((permission)=>permission === 'virtual_background')) throw new Error('feature not allowed');
|
|
3051
|
-
if (this.useVideoBackground === true) return;
|
|
3052
|
-
this.useVideoBackground = true;
|
|
3253
|
+
if (this.camera.useVideoBackground === true) return;
|
|
3254
|
+
this.camera.useVideoBackground = true;
|
|
3053
3255
|
if (!this.webcamProducer || this.webcamProducer.closed) return;
|
|
3054
3256
|
await this.switchWebcam({});
|
|
3055
3257
|
}
|
|
3056
3258
|
async stopVideoBackground() {
|
|
3057
|
-
if (this.useVideoBackground === false) return;
|
|
3058
|
-
this.
|
|
3059
|
-
await this.mediaPipe?.clean();
|
|
3060
|
-
this.mediaPipe = undefined;
|
|
3259
|
+
if (this.camera.useVideoBackground === false) return;
|
|
3260
|
+
this.camera.cleanMediapipe();
|
|
3061
3261
|
if (!this.webcamProducer || this.webcamProducer.closed) return;
|
|
3062
3262
|
await this.switchWebcam({});
|
|
3063
3263
|
}
|
|
3064
3264
|
async switchWebcam({ device: device, resolution: resolution, rotate: rotate, frameRate: frameRate, facingMode: facingMode }) {
|
|
3065
|
-
if (!this.webcam.device) throw new Error('no webcam devices');
|
|
3066
|
-
const optionalParam = {};
|
|
3067
|
-
if (rotate) {
|
|
3068
|
-
if (this.webcam.facingMode) {
|
|
3069
|
-
console.log('switch by facing mod');
|
|
3070
|
-
this.webcam.facingMode = this.webcam.facingMode === 'user' ? 'environment' : 'user';
|
|
3071
|
-
optionalParam.facingMode = this.webcam.facingMode;
|
|
3072
|
-
} else {
|
|
3073
|
-
const webcams = Array.from(this.webcams.keys());
|
|
3074
|
-
const deviceId = this.webcam?.device?.deviceId || 'unknown';
|
|
3075
|
-
let newWebcamIndex = webcams.indexOf(deviceId);
|
|
3076
|
-
newWebcamIndex = (newWebcamIndex + 1) % webcams.length;
|
|
3077
|
-
const newWebcamDevice = this.webcams.get(webcams[newWebcamIndex]);
|
|
3078
|
-
if (!newWebcamDevice) throw new Error(`webcam device at index ${newWebcamIndex} was not found`);
|
|
3079
|
-
this.webcam.device = newWebcamDevice;
|
|
3080
|
-
optionalParam.deviceId = {
|
|
3081
|
-
ideal: this.webcam.device?.deviceId
|
|
3082
|
-
};
|
|
3083
|
-
}
|
|
3084
|
-
} else {
|
|
3085
|
-
if (facingMode) {
|
|
3086
|
-
this.webcam.facingMode = facingMode;
|
|
3087
|
-
optionalParam.facingMode = this.webcam.facingMode;
|
|
3088
|
-
} else if (device) {
|
|
3089
|
-
this.webcam.device = device;
|
|
3090
|
-
this.webcam.facingMode = undefined;
|
|
3091
|
-
optionalParam.deviceId = {
|
|
3092
|
-
ideal: this.webcam.device.deviceId
|
|
3093
|
-
};
|
|
3094
|
-
}
|
|
3095
|
-
}
|
|
3096
|
-
this.webcam.resolution = resolution || this.webcam.resolution || 'hd';
|
|
3097
|
-
this.webcam.framerate = frameRate || this.webcam.framerate;
|
|
3098
|
-
let usedResolution = $1dedebd5ff3002eb$export$d21ffcc5eb136bfa[resolution || this.webcam.resolution];
|
|
3099
|
-
if (this.useVideoBackground) usedResolution = {
|
|
3100
|
-
width: {
|
|
3101
|
-
ideal: 560
|
|
3102
|
-
},
|
|
3103
|
-
height: {
|
|
3104
|
-
ideal: 400
|
|
3105
|
-
},
|
|
3106
|
-
qualityIndex: 2
|
|
3107
|
-
};
|
|
3265
|
+
if (!this.camera.webcam.device) throw new Error('no webcam devices');
|
|
3108
3266
|
await this.webcamProducer?.replaceTrack?.({
|
|
3109
3267
|
track: null
|
|
3110
3268
|
}).catch((err)=>{
|
|
3111
3269
|
$1dedebd5ff3002eb$var$log.error('switchCamera', 'clean track failed', err);
|
|
3112
3270
|
});
|
|
3113
|
-
await this.
|
|
3114
|
-
|
|
3115
|
-
|
|
3116
|
-
|
|
3117
|
-
|
|
3271
|
+
const track = await this.camera.enable({
|
|
3272
|
+
device: device,
|
|
3273
|
+
resolution: resolution,
|
|
3274
|
+
rotate: rotate,
|
|
3275
|
+
frameRate: frameRate,
|
|
3276
|
+
facingMode: facingMode
|
|
3118
3277
|
});
|
|
3119
3278
|
const mediaStream = this.tracksHandler.video.stream;
|
|
3120
3279
|
if (!mediaStream) throw new Error('switchWebcam : no stream');
|
|
3121
|
-
if (this.useVideoBackground) {
|
|
3122
|
-
if (this.mediaPipe) await this.mediaPipe.clean();
|
|
3123
|
-
this.mediaPipe = new (0, $cb913ea078a876a6$export$2e2bcd8739ae039)(mediaStream, this.mediaPipeOption);
|
|
3124
|
-
}
|
|
3125
|
-
const stream = await this.mediaPipe?.createStream() || mediaStream;
|
|
3126
3280
|
const transport = await this.getTransport('video', 'send');
|
|
3127
3281
|
if (!transport) throw new Error('video transport not found, cannot switch');
|
|
3128
|
-
const track = stream.getVideoTracks()[0];
|
|
3129
3282
|
this.webcamTrack = track;
|
|
3130
3283
|
await this.webcamProducer?.replaceTrack?.({
|
|
3131
3284
|
track: track
|
|
3132
3285
|
});
|
|
3133
|
-
const
|
|
3134
|
-
this.webcamZoom = {
|
|
3135
|
-
available: Boolean(capabilities?.zoom),
|
|
3136
|
-
min: capabilities?.zoom?.min || 0,
|
|
3137
|
-
max: capabilities?.zoom?.max || 0
|
|
3138
|
-
};
|
|
3139
|
-
if (this.webcamZoom.available) try {
|
|
3140
|
-
await track.applyConstraints({
|
|
3141
|
-
advanced: [
|
|
3142
|
-
{
|
|
3143
|
-
zoom: this.webcamZoom.min
|
|
3144
|
-
}
|
|
3145
|
-
]
|
|
3146
|
-
});
|
|
3147
|
-
} catch (error) {
|
|
3148
|
-
console.error('Failed to set default zoom', error);
|
|
3149
|
-
}
|
|
3150
|
-
if (capabilities.focusMode) // https://github.com/w3c/mediacapture-image/blob/main/implementation-status.md
|
|
3151
|
-
try {
|
|
3152
|
-
await track.applyConstraints({
|
|
3153
|
-
advanced: [
|
|
3154
|
-
{
|
|
3155
|
-
focusMode: 'continuous'
|
|
3156
|
-
}
|
|
3157
|
-
]
|
|
3158
|
-
});
|
|
3159
|
-
} catch (error) {
|
|
3160
|
-
console.error('Failed to set focus mode', error);
|
|
3161
|
-
}
|
|
3162
|
-
const event = new $1dedebd5ff3002eb$var$SnapcallEvent('localVideoChange', {
|
|
3286
|
+
const event = new $1dedebd5ff3002eb$export$da085ff0f511c609('localVideoChange', {
|
|
3163
3287
|
detail: {
|
|
3164
3288
|
camera: this.getCurrentWebcam()
|
|
3165
3289
|
}
|
|
@@ -3169,95 +3293,14 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
3169
3293
|
async enableVideo(config) {
|
|
3170
3294
|
await this._enableVideo(config).catch((error)=>{
|
|
3171
3295
|
this.disableVideo();
|
|
3172
|
-
this.webcam.error = error;
|
|
3173
|
-
if (error.cause !== $1dedebd5ff3002eb$
|
|
3296
|
+
this.camera.webcam.error = error;
|
|
3297
|
+
if (error.cause !== $1dedebd5ff3002eb$export$75139ad9ea82cac9 && window.Sentry) window.Sentry.captureException(error);
|
|
3174
3298
|
throw error;
|
|
3175
3299
|
});
|
|
3176
|
-
this.webcam.error = undefined;
|
|
3177
3300
|
}
|
|
3178
3301
|
async _enableVideo(config) {
|
|
3179
3302
|
$1dedebd5ff3002eb$var$log.log('enableVideo', config);
|
|
3180
|
-
await this.
|
|
3181
|
-
const optionalParam = {};
|
|
3182
|
-
if (config?.facingMode) {
|
|
3183
|
-
optionalParam.facingMode = config.facingMode;
|
|
3184
|
-
this.webcam.facingMode = config.facingMode;
|
|
3185
|
-
} else {
|
|
3186
|
-
if (config?.device) this.webcam.device = config.device;
|
|
3187
|
-
optionalParam.deviceId = {
|
|
3188
|
-
ideal: this.webcam.device?.deviceId
|
|
3189
|
-
};
|
|
3190
|
-
}
|
|
3191
|
-
if (!this.webcam.device) throw new Error('no webcam devices');
|
|
3192
|
-
this.webcam.resolution = config?.resolution || this.webcam.resolution || 'hd';
|
|
3193
|
-
this.webcam.framerate = config?.frameRate || this.webcam.framerate;
|
|
3194
|
-
let usedResolution = $1dedebd5ff3002eb$export$d21ffcc5eb136bfa[config?.resolution || this.webcam.resolution];
|
|
3195
|
-
if (this.useVideoBackground) usedResolution = $1dedebd5ff3002eb$export$d21ffcc5eb136bfa.background;
|
|
3196
|
-
await this.processMediaPermissionsAndResolveRequests({
|
|
3197
|
-
video: {
|
|
3198
|
-
frameRate: config?.frameRate,
|
|
3199
|
-
...optionalParam,
|
|
3200
|
-
...usedResolution
|
|
3201
|
-
}
|
|
3202
|
-
}).catch((error)=>{
|
|
3203
|
-
throw new Error(error, {
|
|
3204
|
-
cause: $1dedebd5ff3002eb$var$SENTRY_WHITELIST_ERROR_CAUSE
|
|
3205
|
-
});
|
|
3206
|
-
});
|
|
3207
|
-
if (!this.tracksHandler.video.stream || !this.tracksHandler.video.track) throw new Error('enableVideo : no stream or video track');
|
|
3208
|
-
const trackSettings = this.tracksHandler.video.track.getSettings();
|
|
3209
|
-
if (trackSettings.deviceId) this.webcam.device = this.webcams.get(trackSettings.deviceId) || null;
|
|
3210
|
-
if (config?.facingMode) try {
|
|
3211
|
-
if (!trackSettings.facingMode) throw new Error('no facing mode');
|
|
3212
|
-
} catch {
|
|
3213
|
-
this.webcam.facingMode = undefined;
|
|
3214
|
-
}
|
|
3215
|
-
if (this.useVideoBackground) {
|
|
3216
|
-
if (this.mediaPipe) await this.mediaPipe.clean();
|
|
3217
|
-
this.mediaPipe = new (0, $cb913ea078a876a6$export$2e2bcd8739ae039)(this.tracksHandler.video.stream, this.mediaPipeOption);
|
|
3218
|
-
}
|
|
3219
|
-
const stream = await this.mediaPipe?.createStream() || this.tracksHandler.video.stream;
|
|
3220
|
-
await this.updateWebcams();
|
|
3221
|
-
const track = stream.getVideoTracks()[0];
|
|
3222
|
-
track.enabled = true;
|
|
3223
|
-
await track.applyConstraints({
|
|
3224
|
-
frameRate: config?.frameRate,
|
|
3225
|
-
...optionalParam,
|
|
3226
|
-
...usedResolution
|
|
3227
|
-
}).catch((error)=>{
|
|
3228
|
-
$1dedebd5ff3002eb$var$log.error('enableVideo', 'applyConstraints failed', error);
|
|
3229
|
-
});
|
|
3230
|
-
this.tracksHandler.video.track.enabled = true;
|
|
3231
|
-
this.webcamTrack = track;
|
|
3232
|
-
const capabilities = await track.getCapabilities?.() || navigator.mediaDevices.getSupportedConstraints?.();
|
|
3233
|
-
this.webcamZoom = {
|
|
3234
|
-
available: Boolean(capabilities?.zoom),
|
|
3235
|
-
min: capabilities?.zoom?.min || 0,
|
|
3236
|
-
max: capabilities?.zoom?.max || 0
|
|
3237
|
-
};
|
|
3238
|
-
if (this.webcamZoom.available) try {
|
|
3239
|
-
await track.applyConstraints({
|
|
3240
|
-
advanced: [
|
|
3241
|
-
{
|
|
3242
|
-
zoom: this.webcamZoom.min
|
|
3243
|
-
}
|
|
3244
|
-
]
|
|
3245
|
-
});
|
|
3246
|
-
} catch (error) {
|
|
3247
|
-
console.error('Failed to set default zoom', error);
|
|
3248
|
-
}
|
|
3249
|
-
if (capabilities.focusMode) // https://github.com/w3c/mediacapture-image/blob/main/implementation-status.md
|
|
3250
|
-
try {
|
|
3251
|
-
await track.applyConstraints({
|
|
3252
|
-
advanced: [
|
|
3253
|
-
{
|
|
3254
|
-
focusMode: 'continuous'
|
|
3255
|
-
}
|
|
3256
|
-
]
|
|
3257
|
-
});
|
|
3258
|
-
} catch (error) {
|
|
3259
|
-
console.error('Failed to set focus mode', error);
|
|
3260
|
-
}
|
|
3303
|
+
const track = await this.camera.enable(config);
|
|
3261
3304
|
const encodings = undefined;
|
|
3262
3305
|
const codecOptions = {
|
|
3263
3306
|
videoGoogleStartBitrate: 1000
|
|
@@ -3281,7 +3324,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
3281
3324
|
this.webcamProducer.on('trackended', ()=>{
|
|
3282
3325
|
this.disableVideo().catch(()=>{});
|
|
3283
3326
|
});
|
|
3284
|
-
const event = new $1dedebd5ff3002eb$
|
|
3327
|
+
const event = new $1dedebd5ff3002eb$export$da085ff0f511c609('localVideoAvailable', {
|
|
3285
3328
|
detail: {
|
|
3286
3329
|
camera: this.getCurrentWebcam()
|
|
3287
3330
|
}
|
|
@@ -3293,27 +3336,11 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
3293
3336
|
rotate: true
|
|
3294
3337
|
});
|
|
3295
3338
|
}
|
|
3296
|
-
|
|
3297
|
-
|
|
3298
|
-
if (!this.webcamTrack) throw new Error('No webcam track available');
|
|
3299
|
-
this.webcamTrack.applyConstraints({
|
|
3300
|
-
advanced: [
|
|
3301
|
-
{
|
|
3302
|
-
zoom: this.webcamZoom.min * 2
|
|
3303
|
-
}
|
|
3304
|
-
]
|
|
3305
|
-
});
|
|
3339
|
+
zoomVideo() {
|
|
3340
|
+
return this.camera.zoomVideo();
|
|
3306
3341
|
}
|
|
3307
3342
|
async unzoomVideo() {
|
|
3308
|
-
|
|
3309
|
-
if (!this.webcamTrack) throw new Error('No webcam track available');
|
|
3310
|
-
this.webcamTrack.applyConstraints({
|
|
3311
|
-
advanced: [
|
|
3312
|
-
{
|
|
3313
|
-
zoom: this.webcamZoom.min
|
|
3314
|
-
}
|
|
3315
|
-
]
|
|
3316
|
-
});
|
|
3343
|
+
return this.camera.unzoomVideo();
|
|
3317
3344
|
}
|
|
3318
3345
|
async disableVideo() {
|
|
3319
3346
|
if (!this.webcamProducer) return;
|
|
@@ -3325,14 +3352,9 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
3325
3352
|
audio: false,
|
|
3326
3353
|
video: true
|
|
3327
3354
|
});
|
|
3328
|
-
this.webcam.device = null;
|
|
3329
3355
|
this.webcamProducer = null;
|
|
3330
|
-
this.
|
|
3331
|
-
|
|
3332
|
-
await this.mediaPipe?.clean();
|
|
3333
|
-
this.mediaPipe = undefined;
|
|
3334
|
-
}
|
|
3335
|
-
const event = new $1dedebd5ff3002eb$var$SnapcallEvent('localVideoUnavailable', {
|
|
3356
|
+
this.camera.clean();
|
|
3357
|
+
const event = new $1dedebd5ff3002eb$export$da085ff0f511c609('localVideoUnavailable', {
|
|
3336
3358
|
detail: {}
|
|
3337
3359
|
});
|
|
3338
3360
|
this.dispatchEvent(event);
|
|
@@ -3343,7 +3365,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
3343
3365
|
await this._enableScreenshare(options).catch((error)=>{
|
|
3344
3366
|
this.disableScreenshare();
|
|
3345
3367
|
this.screenshare.error = error;
|
|
3346
|
-
if (error.cause !== $1dedebd5ff3002eb$
|
|
3368
|
+
if (error.cause !== $1dedebd5ff3002eb$export$75139ad9ea82cac9 && window.Sentry) window.Sentry.captureException(error);
|
|
3347
3369
|
throw error;
|
|
3348
3370
|
});
|
|
3349
3371
|
this.screenshare.error = undefined;
|
|
@@ -3371,7 +3393,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
3371
3393
|
}
|
|
3372
3394
|
})).catch((error)=>{
|
|
3373
3395
|
throw new Error(error, {
|
|
3374
|
-
cause: $1dedebd5ff3002eb$
|
|
3396
|
+
cause: $1dedebd5ff3002eb$export$75139ad9ea82cac9
|
|
3375
3397
|
});
|
|
3376
3398
|
});
|
|
3377
3399
|
if (!stream) throw new Error('enableScreenshare : no stream');
|
|
@@ -3409,7 +3431,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
3409
3431
|
this.screenshareVideoProducer?.on('trackended', ()=>{
|
|
3410
3432
|
this.disableScreenshare().catch(()=>{});
|
|
3411
3433
|
});
|
|
3412
|
-
const event = new $1dedebd5ff3002eb$
|
|
3434
|
+
const event = new $1dedebd5ff3002eb$export$da085ff0f511c609('screenshareEnabled', {
|
|
3413
3435
|
detail: {}
|
|
3414
3436
|
});
|
|
3415
3437
|
this.dispatchEvent(event);
|
|
@@ -3430,7 +3452,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
3430
3452
|
});
|
|
3431
3453
|
this.screenshareAudioProducer = undefined;
|
|
3432
3454
|
}
|
|
3433
|
-
const event = new $1dedebd5ff3002eb$
|
|
3455
|
+
const event = new $1dedebd5ff3002eb$export$da085ff0f511c609('screenshareDisabled', {
|
|
3434
3456
|
detail: {}
|
|
3435
3457
|
});
|
|
3436
3458
|
this.dispatchEvent(event);
|
|
@@ -3446,7 +3468,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
3446
3468
|
consumer.mediaSoupConsumer.close();
|
|
3447
3469
|
this.consumers.delete(consumerId);
|
|
3448
3470
|
this.scaleVideoEncodingsParameter();
|
|
3449
|
-
const event = new $1dedebd5ff3002eb$
|
|
3471
|
+
const event = new $1dedebd5ff3002eb$export$da085ff0f511c609('mediaStop', {
|
|
3450
3472
|
detail: {
|
|
3451
3473
|
mediaId: consumerId,
|
|
3452
3474
|
peerId: String(consumer.mediaSoupConsumer.appData.peerId),
|
|
@@ -3513,7 +3535,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
3513
3535
|
async captureVideo(videoElement) {
|
|
3514
3536
|
if (this.permissions.find((permission)=>permission === 'instant_picture')) {
|
|
3515
3537
|
let image;
|
|
3516
|
-
if (videoElement) image = await (0, $3575c8a563f2a1da$export$674c90a250a8b2c5)(videoElement);
|
|
3538
|
+
if (videoElement) image = await (0, $3575c8a563f2a1da$export$674c90a250a8b2c5)(videoElement, this.camera);
|
|
3517
3539
|
else if (this.webcamProducer && this.webcamProducer.track) image = await (0, $3575c8a563f2a1da$export$4a210166cc9cb64b)(this.webcamProducer.track);
|
|
3518
3540
|
else throw new Error('no video to capture');
|
|
3519
3541
|
return image;
|
|
@@ -3593,7 +3615,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
3593
3615
|
console.error('scale error', error);
|
|
3594
3616
|
}
|
|
3595
3617
|
if (consumer) {
|
|
3596
|
-
const event = new $1dedebd5ff3002eb$
|
|
3618
|
+
const event = new $1dedebd5ff3002eb$export$da085ff0f511c609('mediaStart', {
|
|
3597
3619
|
detail: {
|
|
3598
3620
|
peerId: peerId,
|
|
3599
3621
|
mediaId: consumer.id,
|
|
@@ -3624,7 +3646,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
3624
3646
|
await this.setProfile({
|
|
3625
3647
|
name: displayName
|
|
3626
3648
|
});
|
|
3627
|
-
const event = new $1dedebd5ff3002eb$
|
|
3649
|
+
const event = new $1dedebd5ff3002eb$export$da085ff0f511c609('selfDisplayName', {
|
|
3628
3650
|
detail: {
|
|
3629
3651
|
peerId: this.peerId,
|
|
3630
3652
|
displayName: this.profile?.name,
|
|
@@ -3639,7 +3661,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
3639
3661
|
this.profile = {
|
|
3640
3662
|
...newProfile
|
|
3641
3663
|
};
|
|
3642
|
-
const event = new $1dedebd5ff3002eb$
|
|
3664
|
+
const event = new $1dedebd5ff3002eb$export$da085ff0f511c609('selfProfileUpdate', {
|
|
3643
3665
|
detail: {
|
|
3644
3666
|
peerId: this.peerId,
|
|
3645
3667
|
profile: this.profile
|
|
@@ -3673,8 +3695,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
3673
3695
|
},
|
|
3674
3696
|
camera: {
|
|
3675
3697
|
enabled: cameraEnabled,
|
|
3676
|
-
|
|
3677
|
-
error: this.webcam.error
|
|
3698
|
+
...this.camera.getState()
|
|
3678
3699
|
},
|
|
3679
3700
|
screenshare: {
|
|
3680
3701
|
enabled: screenshareEnabled,
|
|
@@ -3731,7 +3752,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
3731
3752
|
return Boolean(navigator.mediaDevices?.enumerateDevices);
|
|
3732
3753
|
}
|
|
3733
3754
|
getCurrentWebcam() {
|
|
3734
|
-
return this.webcam;
|
|
3755
|
+
return this.camera.webcam;
|
|
3735
3756
|
}
|
|
3736
3757
|
getCurrentMicrophoneId() {
|
|
3737
3758
|
return this.audioMedia?.getSetting('mic').deviceId || this.micProducer?.track?.getSettings().deviceId;
|
|
@@ -3746,12 +3767,12 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
3746
3767
|
return 'default';
|
|
3747
3768
|
}
|
|
3748
3769
|
async setWebcamResolution(resolution) {
|
|
3749
|
-
if (this.webcam.device) await this.switchWebcam({
|
|
3770
|
+
if (this.camera.webcam.device) await this.switchWebcam({
|
|
3750
3771
|
resolution: resolution
|
|
3751
3772
|
});
|
|
3752
3773
|
else {
|
|
3753
|
-
this.webcam.resolution = resolution;
|
|
3754
|
-
const e = new $1dedebd5ff3002eb$
|
|
3774
|
+
this.camera.webcam.resolution = resolution;
|
|
3775
|
+
const e = new $1dedebd5ff3002eb$export$da085ff0f511c609('localVideoChange', {
|
|
3755
3776
|
detail: {
|
|
3756
3777
|
camera: this.getCurrentWebcam()
|
|
3757
3778
|
}
|
|
@@ -3894,10 +3915,12 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
3894
3915
|
}
|
|
3895
3916
|
return;
|
|
3896
3917
|
}
|
|
3897
|
-
await this.protoo?.request('startRecord', {
|
|
3918
|
+
const res = await this.protoo?.request('startRecord', {
|
|
3898
3919
|
recordingGroup: this.recordingGroup,
|
|
3899
3920
|
iceTransportState: this.micProducer?.rtpSender?.transport?.iceTransport.state
|
|
3900
3921
|
});
|
|
3922
|
+
this.tmpFilename = undefined;
|
|
3923
|
+
if (res.filename) this.tmpFilename = `recorder/${res.filename}`;
|
|
3901
3924
|
if (this.recordingGroup) {
|
|
3902
3925
|
this.doLiveAnalysis().catch(console.log);
|
|
3903
3926
|
this.liveInterval = window.setInterval(()=>{
|
|
@@ -3917,6 +3940,12 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
3917
3940
|
}
|
|
3918
3941
|
})).json();
|
|
3919
3942
|
}
|
|
3943
|
+
getRecordTmpData() {
|
|
3944
|
+
return {
|
|
3945
|
+
filename: this.tmpFilename,
|
|
3946
|
+
recordingGroup: this.recordingGroup
|
|
3947
|
+
};
|
|
3948
|
+
}
|
|
3920
3949
|
getWaitingRequests() {
|
|
3921
3950
|
if (!this.protoo) throw new Error('not connected');
|
|
3922
3951
|
return this.protoo?.request('waitingRequests');
|
|
@@ -5001,7 +5030,7 @@ const $00d3d68f4b114278$export$73d4dc21bbbd7287 = ()=>{
|
|
|
5001
5030
|
mutationFn: async (background)=>{
|
|
5002
5031
|
if (background === 'none') await (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).stopVideoBackground();
|
|
5003
5032
|
else if (background === 'blur') {
|
|
5004
|
-
await (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).setVideoBackground({
|
|
5033
|
+
await (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).camera.setVideoBackground({
|
|
5005
5034
|
blurLevel: 16,
|
|
5006
5035
|
type: 'blur'
|
|
5007
5036
|
});
|
|
@@ -5012,7 +5041,7 @@ const $00d3d68f4b114278$export$73d4dc21bbbd7287 = ()=>{
|
|
|
5012
5041
|
backgroundImage.crossOrigin = 'anonymous';
|
|
5013
5042
|
backgroundImage.onload = async ()=>{
|
|
5014
5043
|
try {
|
|
5015
|
-
(0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).setVideoBackground({
|
|
5044
|
+
(0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).camera.setVideoBackground({
|
|
5016
5045
|
background: backgroundImage,
|
|
5017
5046
|
type: 'background'
|
|
5018
5047
|
});
|
|
@@ -5273,7 +5302,7 @@ const $e9d4b4657e98cb84$export$c197ce1a352372f = ({ state: state })=>{
|
|
|
5273
5302
|
const { permissions: permissions, streamState: streamState, options: options, isAgent: isAgent } = (0, $jQDcL$react.useContext)((0, $8b39f32976a7698a$export$2e2bcd8739ae039));
|
|
5274
5303
|
const isVirtualBackgroundAvailable = streamState === 'streaming' && $e9d4b4657e98cb84$var$browser.platform.type === 'desktop' && $e9d4b4657e98cb84$var$browser.engine.name === 'Blink' && permissions.includes('virtual_background');
|
|
5275
5304
|
const isVideoRecordingAvailable = streamState === 'streaming' && permissions.includes('record_video_on_demand') && isAgent;
|
|
5276
|
-
const
|
|
5305
|
+
const showVideoSettings = !options.audioTiles && options.controls?.camera?.available;
|
|
5277
5306
|
const categories = (0, $jQDcL$react.useMemo)(()=>{
|
|
5278
5307
|
const categoriesList = [
|
|
5279
5308
|
{
|
|
@@ -5299,7 +5328,7 @@ const $e9d4b4657e98cb84$export$c197ce1a352372f = ({ state: state })=>{
|
|
|
5299
5328
|
]
|
|
5300
5329
|
}
|
|
5301
5330
|
];
|
|
5302
|
-
if (
|
|
5331
|
+
if (showVideoSettings) categoriesList[0].items.splice(1, 0, {
|
|
5303
5332
|
id: 'video',
|
|
5304
5333
|
title: t('misc.video'),
|
|
5305
5334
|
icon: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystemicons.VideoRecorderIcon), {
|
|
@@ -5307,7 +5336,7 @@ const $e9d4b4657e98cb84$export$c197ce1a352372f = ({ state: state })=>{
|
|
|
5307
5336
|
}),
|
|
5308
5337
|
content: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $2736f94642df39f3$export$40214e6b2a12030d), {})
|
|
5309
5338
|
});
|
|
5310
|
-
if (isVirtualBackgroundAvailable &&
|
|
5339
|
+
if (isVirtualBackgroundAvailable && showVideoSettings) categoriesList.push({
|
|
5311
5340
|
id: 'tools',
|
|
5312
5341
|
title: t('settings.tools'),
|
|
5313
5342
|
items: [
|
|
@@ -5334,7 +5363,7 @@ const $e9d4b4657e98cb84$export$c197ce1a352372f = ({ state: state })=>{
|
|
|
5334
5363
|
t,
|
|
5335
5364
|
isVirtualBackgroundAvailable,
|
|
5336
5365
|
isVideoRecordingAvailable,
|
|
5337
|
-
|
|
5366
|
+
showVideoSettings
|
|
5338
5367
|
]);
|
|
5339
5368
|
const isMedium = window.matchMedia('(min-width: 768px)').matches;
|
|
5340
5369
|
const [selectedMenuItem, setSelectedMenuItem] = (0, $jQDcL$react.useState)(isMedium ? categories[0].items[0] : null);
|
|
@@ -5906,8 +5935,10 @@ var $fdb92de69267f341$export$2e2bcd8739ae039 = $fdb92de69267f341$var$MediaSessio
|
|
|
5906
5935
|
|
|
5907
5936
|
|
|
5908
5937
|
|
|
5938
|
+
|
|
5909
5939
|
const $07e749066c746c7c$export$6d1782328b15ce2d = ({ width: width, height: height, children: children, name: name, image: image, className: className, activeBorder: activeBorder, hasMicrophoneDisabled: hasMicrophoneDisabled, hasCameraDisabled: hasCameraDisabled, hasScreenDisabled: hasScreenDisabled, maximizeToggle: maximizeToggle, onRequestDevice: onRequestDevice, onSnapshot: onSnapshot, ...otherProps })=>{
|
|
5910
5940
|
const { t: t } = (0, $jQDcL$reacti18next.useTranslation)();
|
|
5941
|
+
const { options: options } = (0, $jQDcL$react.useContext)((0, $8b39f32976a7698a$export$2e2bcd8739ae039));
|
|
5911
5942
|
const [isMaximized, setIsMaximized] = (0, $jQDcL$react.useState)(false);
|
|
5912
5943
|
const size = width <= 175 ? 'small' : 'large';
|
|
5913
5944
|
const disabledDevices = (0, $jQDcL$react.useMemo)(()=>{
|
|
@@ -5944,6 +5975,16 @@ const $07e749066c746c7c$export$6d1782328b15ce2d = ({ width: width, height: heigh
|
|
|
5944
5975
|
hasCameraDisabled,
|
|
5945
5976
|
hasScreenDisabled
|
|
5946
5977
|
]);
|
|
5978
|
+
const requestableDevices = (0, $jQDcL$react.useMemo)(()=>{
|
|
5979
|
+
return disabledDevices.filter((device)=>{
|
|
5980
|
+
if (device.id === 'screen') return options.controls?.screenshare?.available;
|
|
5981
|
+
if (device.id === 'webcam') return options.controls?.camera?.available;
|
|
5982
|
+
return true;
|
|
5983
|
+
});
|
|
5984
|
+
}, [
|
|
5985
|
+
disabledDevices,
|
|
5986
|
+
options.controls
|
|
5987
|
+
]);
|
|
5947
5988
|
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
5948
5989
|
className: (0, ($parcel$interopDefault($jQDcL$classnames)))('flex flex-col justify-between bg-gray-50 rounded-2xl relative transition-all group', size === 'small' ? 'p-2' : 'p-3', className),
|
|
5949
5990
|
style: {
|
|
@@ -6021,11 +6062,11 @@ const $07e749066c746c7c$export$6d1782328b15ce2d = ({ width: width, height: heigh
|
|
|
6021
6062
|
})
|
|
6022
6063
|
]
|
|
6023
6064
|
}),
|
|
6024
|
-
onRequestDevice &&
|
|
6065
|
+
onRequestDevice && requestableDevices.length > 0 && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
|
|
6025
6066
|
className: "absolute flex justify-center items-center inset-0",
|
|
6026
6067
|
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
|
|
6027
6068
|
className: "hidden p-2 gap-4 bg-gray-50 border border-gray-200 rounded-3xl opacity-60 group-hover:flex hover:opacity-100 z-20",
|
|
6028
|
-
children:
|
|
6069
|
+
children: requestableDevices.map((device)=>/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$snapcalldesignsystem.Tooltip), {
|
|
6029
6070
|
children: [
|
|
6030
6071
|
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.TooltipContent), {
|
|
6031
6072
|
children: t('requestDevice.askForDevice', {
|
|
@@ -8734,13 +8775,17 @@ const $098350f721a0bb52$export$2174f25d572f9f31 = ()=>{
|
|
|
8734
8775
|
|
|
8735
8776
|
|
|
8736
8777
|
const $ccbd73eb953b0bd0$var$generateVideoThumbnailAndGetDuration = (file)=>{
|
|
8737
|
-
return new Promise((resolve)=>{
|
|
8778
|
+
return new Promise((resolve, reject)=>{
|
|
8738
8779
|
const canvas = document.createElement('canvas');
|
|
8739
8780
|
const video = document.createElement('video');
|
|
8740
8781
|
video.autoplay = true;
|
|
8741
8782
|
video.muted = true;
|
|
8742
8783
|
video.currentTime = 3;
|
|
8743
8784
|
video.src = URL.createObjectURL(file);
|
|
8785
|
+
video.onerror = (e)=>{
|
|
8786
|
+
console.error('video error', e);
|
|
8787
|
+
reject(e);
|
|
8788
|
+
};
|
|
8744
8789
|
video.onloadeddata = ()=>{
|
|
8745
8790
|
let ctx = canvas.getContext('2d');
|
|
8746
8791
|
canvas.width = video.videoWidth;
|
|
@@ -8765,9 +8810,9 @@ const $ccbd73eb953b0bd0$export$b3fd96a52c80b3af = ()=>{
|
|
|
8765
8810
|
const onUploadClick = async (event)=>{
|
|
8766
8811
|
const file = event.target.files?.[0];
|
|
8767
8812
|
if (file && !isRecording) {
|
|
8768
|
-
const type = file.type.split('/')
|
|
8813
|
+
const [type, subtype] = file.type.split('/');
|
|
8769
8814
|
const createdAt = Date.now();
|
|
8770
|
-
const mode = type === 'image' ? 'photo' : type;
|
|
8815
|
+
const mode = type === 'image' ? 'photo' : type === 'application' ? subtype : type;
|
|
8771
8816
|
setIncomingAsset({
|
|
8772
8817
|
mode: mode,
|
|
8773
8818
|
createdAt: createdAt
|
|
@@ -8780,17 +8825,17 @@ const $ccbd73eb953b0bd0$export$b3fd96a52c80b3af = ()=>{
|
|
|
8780
8825
|
const url = data.url;
|
|
8781
8826
|
const filename = data.filename;
|
|
8782
8827
|
if (type === 'video') {
|
|
8783
|
-
const videoData = await $ccbd73eb953b0bd0$var$generateVideoThumbnailAndGetDuration(file);
|
|
8784
|
-
thumbnailUrl = videoData
|
|
8785
|
-
duration = videoData
|
|
8786
|
-
}
|
|
8828
|
+
const videoData = await $ccbd73eb953b0bd0$var$generateVideoThumbnailAndGetDuration(file).catch(console.error);
|
|
8829
|
+
thumbnailUrl = videoData?.thumbnail;
|
|
8830
|
+
duration = videoData?.duration;
|
|
8831
|
+
} else if (type === 'image') thumbnailUrl = url;
|
|
8787
8832
|
if (!url || !filename) throw new Error('upload failed');
|
|
8788
8833
|
addAsset({
|
|
8789
8834
|
filename: filename,
|
|
8790
8835
|
mode: mode,
|
|
8791
8836
|
url: url,
|
|
8792
8837
|
duration: duration,
|
|
8793
|
-
thumbnailUrl: thumbnailUrl
|
|
8838
|
+
thumbnailUrl: thumbnailUrl,
|
|
8794
8839
|
createdAt: createdAt,
|
|
8795
8840
|
networkIssue: false
|
|
8796
8841
|
});
|
|
@@ -8804,6 +8849,7 @@ const $ccbd73eb953b0bd0$export$b3fd96a52c80b3af = ()=>{
|
|
|
8804
8849
|
});
|
|
8805
8850
|
setIncomingAsset(null);
|
|
8806
8851
|
}
|
|
8852
|
+
event.target.value = '';
|
|
8807
8853
|
}
|
|
8808
8854
|
};
|
|
8809
8855
|
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$reactjsxruntime.Fragment), {
|
|
@@ -8811,7 +8857,7 @@ const $ccbd73eb953b0bd0$export$b3fd96a52c80b3af = ()=>{
|
|
|
8811
8857
|
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("input", {
|
|
8812
8858
|
ref: fileInputRef,
|
|
8813
8859
|
type: "file",
|
|
8814
|
-
accept: "image
|
|
8860
|
+
accept: "image/*,.pdf,video/*,audio/*",
|
|
8815
8861
|
className: "hidden",
|
|
8816
8862
|
onChange: onUploadClick
|
|
8817
8863
|
}),
|
|
@@ -9027,9 +9073,11 @@ const $fb1be0914e6993db$export$1885a2ec111b9681 = ({ asset: asset, index: index,
|
|
|
9027
9073
|
|
|
9028
9074
|
|
|
9029
9075
|
|
|
9030
|
-
const $8a7a24ac08dbc187$
|
|
9076
|
+
const $8a7a24ac08dbc187$export$604d5bd0ad31bf4c = 'snapcall_assets';
|
|
9077
|
+
const $8a7a24ac08dbc187$export$f590a969e8964902 = 'snapcall_tmp_assets';
|
|
9078
|
+
const $8a7a24ac08dbc187$var$getStoredAssets = async (storageKey = $8a7a24ac08dbc187$export$604d5bd0ad31bf4c)=>{
|
|
9031
9079
|
try {
|
|
9032
|
-
const storedAssets = JSON.parse(localStorage.getItem(
|
|
9080
|
+
const storedAssets = JSON.parse(localStorage.getItem(storageKey) || '[]');
|
|
9033
9081
|
const assets = await Promise.all(storedAssets.map(async (storedAsset)=>{
|
|
9034
9082
|
try {
|
|
9035
9083
|
let { url: url, thumbnailUrl: thumbnailUrl, error: error } = await (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).readAsset(storedAsset.filename);
|
|
@@ -9040,34 +9088,57 @@ const $8a7a24ac08dbc187$var$getStoredAssets = async ()=>{
|
|
|
9040
9088
|
url: url,
|
|
9041
9089
|
thumbnailUrl: thumbnailUrl
|
|
9042
9090
|
};
|
|
9043
|
-
} else if (error) $8a7a24ac08dbc187$export$df987b50509121ea(storedAsset.filename);
|
|
9091
|
+
} else if (error) $8a7a24ac08dbc187$export$df987b50509121ea(storedAsset.filename, storageKey);
|
|
9044
9092
|
} catch (error) {
|
|
9045
|
-
$8a7a24ac08dbc187$export$df987b50509121ea(storedAsset.filename);
|
|
9093
|
+
$8a7a24ac08dbc187$export$df987b50509121ea(storedAsset.filename, storageKey);
|
|
9046
9094
|
}
|
|
9047
9095
|
}));
|
|
9048
9096
|
return assets.filter((asset)=>Boolean(asset?.filename));
|
|
9049
|
-
} catch (err) {
|
|
9097
|
+
} catch (err) {
|
|
9098
|
+
console.error('getStoredAssets', 'Error getting stored assets:', err);
|
|
9099
|
+
}
|
|
9050
9100
|
return [];
|
|
9051
9101
|
};
|
|
9052
|
-
const $8a7a24ac08dbc187$export$cfdbe7fcc2578443 = (asset)=>{
|
|
9102
|
+
const $8a7a24ac08dbc187$export$cfdbe7fcc2578443 = (asset, key = $8a7a24ac08dbc187$export$604d5bd0ad31bf4c)=>{
|
|
9053
9103
|
try {
|
|
9054
|
-
const
|
|
9055
|
-
|
|
9104
|
+
const storedAssets = JSON.parse(localStorage.getItem(key) || '[]');
|
|
9105
|
+
storedAssets.push({
|
|
9056
9106
|
...asset,
|
|
9057
9107
|
url: undefined,
|
|
9058
9108
|
thumbnailUrl: null
|
|
9059
9109
|
});
|
|
9060
|
-
localStorage.setItem(
|
|
9061
|
-
} catch (err) {
|
|
9110
|
+
localStorage.setItem(key, JSON.stringify(storedAssets));
|
|
9111
|
+
} catch (err) {
|
|
9112
|
+
console.error('storeAsset', `Error storing asset in ${key}:`, err);
|
|
9113
|
+
}
|
|
9062
9114
|
};
|
|
9063
|
-
const $8a7a24ac08dbc187$export$df987b50509121ea = (filename)=>{
|
|
9115
|
+
const $8a7a24ac08dbc187$export$df987b50509121ea = (filename, key = $8a7a24ac08dbc187$export$604d5bd0ad31bf4c)=>{
|
|
9064
9116
|
try {
|
|
9065
|
-
const
|
|
9066
|
-
localStorage.setItem(
|
|
9117
|
+
const storedAssets = JSON.parse(localStorage.getItem(key) || '[]');
|
|
9118
|
+
localStorage.setItem(key, JSON.stringify(storedAssets.filter((asset)=>{
|
|
9067
9119
|
return asset.filename !== filename;
|
|
9068
9120
|
})));
|
|
9069
9121
|
} catch (err) {}
|
|
9070
9122
|
};
|
|
9123
|
+
const $8a7a24ac08dbc187$export$1cdce9790b21db20 = (key = $8a7a24ac08dbc187$export$604d5bd0ad31bf4c)=>{
|
|
9124
|
+
try {
|
|
9125
|
+
const storedAssets = JSON.parse(localStorage.getItem(key) || '[]');
|
|
9126
|
+
return storedAssets.length;
|
|
9127
|
+
} catch (err) {
|
|
9128
|
+
console.error('getStoredAssetsCount', `Error getting stored assets count in ${key}:`, err);
|
|
9129
|
+
}
|
|
9130
|
+
return 0;
|
|
9131
|
+
};
|
|
9132
|
+
const $8a7a24ac08dbc187$export$f77b5c3e9feb6db7 = (key, storageKey = $8a7a24ac08dbc187$export$604d5bd0ad31bf4c)=>{
|
|
9133
|
+
try {
|
|
9134
|
+
const storedAssets = JSON.parse(localStorage.getItem(storageKey) || '[]');
|
|
9135
|
+
if (!storedAssets) return [];
|
|
9136
|
+
return storedAssets.map((asset)=>asset[key]).filter((v)=>v);
|
|
9137
|
+
} catch (err) {
|
|
9138
|
+
console.error('getAssetsValuesByKey', `Error getting stored assets in ${storageKey} for key ${key}:`, err);
|
|
9139
|
+
}
|
|
9140
|
+
return [];
|
|
9141
|
+
};
|
|
9071
9142
|
const $8a7a24ac08dbc187$export$931d641a2a152cf = ()=>{
|
|
9072
9143
|
const storedAssets = (0, $jQDcL$tanstackreactquery.useQuery)({
|
|
9073
9144
|
queryKey: [
|
|
@@ -9082,6 +9153,25 @@ const $8a7a24ac08dbc187$export$931d641a2a152cf = ()=>{
|
|
|
9082
9153
|
});
|
|
9083
9154
|
return storedAssets;
|
|
9084
9155
|
};
|
|
9156
|
+
const $8a7a24ac08dbc187$export$685a373fa752db28 = (options)=>{
|
|
9157
|
+
const tmpAssetsCount = $8a7a24ac08dbc187$export$1cdce9790b21db20($8a7a24ac08dbc187$export$f590a969e8964902);
|
|
9158
|
+
const storedAssets = (0, $jQDcL$tanstackreactquery.useQuery)({
|
|
9159
|
+
...options,
|
|
9160
|
+
queryKey: [
|
|
9161
|
+
'stored-tmp-assets'
|
|
9162
|
+
],
|
|
9163
|
+
queryFn: ()=>$8a7a24ac08dbc187$var$getStoredAssets($8a7a24ac08dbc187$export$f590a969e8964902),
|
|
9164
|
+
refetchInterval: ()=>{
|
|
9165
|
+
if (tmpAssetsCount > 0) return 500;
|
|
9166
|
+
return false;
|
|
9167
|
+
},
|
|
9168
|
+
refetchOnMount: false,
|
|
9169
|
+
refetchOnReconnect: false,
|
|
9170
|
+
refetchOnWindowFocus: false,
|
|
9171
|
+
staleTime: Infinity
|
|
9172
|
+
});
|
|
9173
|
+
return storedAssets;
|
|
9174
|
+
};
|
|
9085
9175
|
|
|
9086
9176
|
|
|
9087
9177
|
|
|
@@ -9115,7 +9205,8 @@ const $c085aa4099740100$var$eventTypes = {
|
|
|
9115
9205
|
screen: 'screenshare',
|
|
9116
9206
|
photo: 'image',
|
|
9117
9207
|
video: 'video',
|
|
9118
|
-
audio: 'audio'
|
|
9208
|
+
audio: 'audio',
|
|
9209
|
+
pdf: 'pdf'
|
|
9119
9210
|
};
|
|
9120
9211
|
const $c085aa4099740100$export$ce05094b93c0f011 = ()=>{
|
|
9121
9212
|
const reportError = (0, $1c784e11381e6f0c$export$5a5695b638d078e7)();
|
|
@@ -10057,7 +10148,7 @@ const $a9c4bfaa4df801e6$export$50c18ae22f50c0e = ()=>{
|
|
|
10057
10148
|
(0, $jQDcL$react.useEffect)(()=>{
|
|
10058
10149
|
const onLocalVideo = ()=>{
|
|
10059
10150
|
const hasCapability = (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).isVideoZoomAvailable();
|
|
10060
|
-
const isFacingUser = (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).webcam.facingMode === 'user';
|
|
10151
|
+
const isFacingUser = (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).camera.webcam.facingMode === 'user';
|
|
10061
10152
|
const zoomAvailable = hasCapability && !isFacingUser;
|
|
10062
10153
|
setIsZoomAvailable(zoomAvailable);
|
|
10063
10154
|
if (zoomAvailable) setZoom('1');
|
|
@@ -10127,6 +10218,7 @@ const $9a3d89191e7070cd$export$53819c0e58f98d49 = (props)=>{
|
|
|
10127
10218
|
|
|
10128
10219
|
|
|
10129
10220
|
|
|
10221
|
+
|
|
10130
10222
|
const $e86e3e83467d5bba$export$f9da3144ae2525a3 = ()=>{
|
|
10131
10223
|
const { streamUIContainerRef: streamUIContainerRef } = (0, $jQDcL$react.useContext)((0, $8b39f32976a7698a$export$2e2bcd8739ae039));
|
|
10132
10224
|
const { i18n: i18n, t: t } = (0, $jQDcL$reacti18next.useTranslation)();
|
|
@@ -10227,6 +10319,11 @@ const $e86e3e83467d5bba$export$f9da3144ae2525a3 = ()=>{
|
|
|
10227
10319
|
thumbnailUrl: thumbnail || undefined,
|
|
10228
10320
|
createdAt: createdAt
|
|
10229
10321
|
});
|
|
10322
|
+
if ((0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).tmpFilename) (0, $8a7a24ac08dbc187$export$cfdbe7fcc2578443)({
|
|
10323
|
+
mode: mode,
|
|
10324
|
+
createdAt: createdAt,
|
|
10325
|
+
...(0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).getRecordTmpData()
|
|
10326
|
+
}, (0, $8a7a24ac08dbc187$export$f590a969e8964902)); // incomplete tmp asset, will be deleted on stopRecord or on asset recovery
|
|
10230
10327
|
} catch (error) {
|
|
10231
10328
|
reportError({
|
|
10232
10329
|
title: t('notifications.somethingWentWrong'),
|
|
@@ -10347,6 +10444,10 @@ const $a8f7f98371cac732$export$35dc49ae78ec5d63 = {
|
|
|
10347
10444
|
extension: '.jpeg',
|
|
10348
10445
|
thumbnailIcon: (0, $jQDcL$snapcalldesignsystemicons.Camera1Icon)
|
|
10349
10446
|
},
|
|
10447
|
+
pdf: {
|
|
10448
|
+
extension: '.pdf',
|
|
10449
|
+
thumbnailIcon: (0, $jQDcL$snapcalldesignsystemicons.File2Icon)
|
|
10450
|
+
},
|
|
10350
10451
|
video: {
|
|
10351
10452
|
extension: '.mp4',
|
|
10352
10453
|
thumbnailIcon: (0, $jQDcL$snapcalldesignsystemicons.PlayIcon)
|
|
@@ -10358,10 +10459,15 @@ const $a8f7f98371cac732$export$35dc49ae78ec5d63 = {
|
|
|
10358
10459
|
screen: {
|
|
10359
10460
|
extension: '.mp4',
|
|
10360
10461
|
thumbnailIcon: (0, $jQDcL$snapcalldesignsystemicons.Monitor2Icon)
|
|
10462
|
+
},
|
|
10463
|
+
other: {
|
|
10464
|
+
extension: '',
|
|
10465
|
+
thumbnailIcon: (0, $jQDcL$snapcalldesignsystemicons.FileQuestion3Icon)
|
|
10361
10466
|
}
|
|
10362
10467
|
};
|
|
10363
10468
|
const $a8f7f98371cac732$export$a87fb02b17364ba7 = ({ mode: mode, thumbnailUrl: thumbnailUrl, minimal: minimal = false, onClick: onClick })=>{
|
|
10364
|
-
const
|
|
10469
|
+
const assetInfo = $a8f7f98371cac732$export$35dc49ae78ec5d63[mode] || $a8f7f98371cac732$export$35dc49ae78ec5d63.other;
|
|
10470
|
+
const FallbackIcon = assetInfo.thumbnailIcon;
|
|
10365
10471
|
const resizedThumbnailUrl = (0, $jQDcL$react.useMemo)(()=>{
|
|
10366
10472
|
if (thumbnailUrl) try {
|
|
10367
10473
|
const url = new URL(thumbnailUrl);
|
|
@@ -10377,17 +10483,17 @@ const $a8f7f98371cac732$export$a87fb02b17364ba7 = ({ mode: mode, thumbnailUrl: t
|
|
|
10377
10483
|
thumbnailUrl
|
|
10378
10484
|
]);
|
|
10379
10485
|
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
|
|
10380
|
-
className: (0, ($parcel$interopDefault($jQDcL$classnames)))('rounded-lg cursor-pointer shrink-0 border-2', minimal ? 'w-12 h-12
|
|
10486
|
+
className: (0, ($parcel$interopDefault($jQDcL$classnames)))('rounded-lg cursor-pointer shrink-0 border-2 border-white/10 light-theme', minimal ? 'w-12 h-12' : 'w-[70px] h-[70px]'),
|
|
10381
10487
|
onClick: onClick,
|
|
10382
10488
|
children: resizedThumbnailUrl ? /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("img", {
|
|
10383
10489
|
className: "w-full h-full rounded-md object-cover",
|
|
10384
10490
|
src: resizedThumbnailUrl,
|
|
10385
10491
|
alt: ""
|
|
10386
10492
|
}) : /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
|
|
10387
|
-
className: "flex items-center justify-center w-full h-full bg-gray-50 rounded-md
|
|
10493
|
+
className: "flex items-center justify-center w-full h-full bg-gray-50 rounded-md",
|
|
10388
10494
|
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)(FallbackIcon, {
|
|
10389
10495
|
size: minimal ? 16 : 24,
|
|
10390
|
-
className: "text-
|
|
10496
|
+
className: "text-gray-900"
|
|
10391
10497
|
})
|
|
10392
10498
|
})
|
|
10393
10499
|
});
|
|
@@ -10909,7 +11015,7 @@ const $ed315b68f9410130$export$d70ec5859ea7c9bc = ({ asset: asset, canRemove: ca
|
|
|
10909
11015
|
const { removeAsset: removeAsset } = (0, $098350f721a0bb52$export$2174f25d572f9f31)();
|
|
10910
11016
|
const assetPreviewModalState = (0, $jQDcL$snapcalldesignsystem.useDialogState)();
|
|
10911
11017
|
const assetDeleteModalState = (0, $jQDcL$snapcalldesignsystem.useDialogState)();
|
|
10912
|
-
const assetInfo = (0, $a8f7f98371cac732$export$35dc49ae78ec5d63)[asset.mode];
|
|
11018
|
+
const assetInfo = (0, $a8f7f98371cac732$export$35dc49ae78ec5d63)[asset.mode] || (0, $a8f7f98371cac732$export$35dc49ae78ec5d63).other;
|
|
10913
11019
|
const durationSec = asset.duration ? Math.round(asset.duration / 1000) : undefined;
|
|
10914
11020
|
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
10915
11021
|
className: "flex flex-col gap-2",
|
|
@@ -10963,7 +11069,7 @@ const $ed315b68f9410130$export$d70ec5859ea7c9bc = ({ asset: asset, canRemove: ca
|
|
|
10963
11069
|
})
|
|
10964
11070
|
]
|
|
10965
11071
|
}, asset.filename),
|
|
10966
|
-
asset.mode !== 'photo' && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $c42fbc742adf8306$export$1ea93f9eface5983), {
|
|
11072
|
+
asset.mode !== 'photo' && asset.mode !== 'pdf' && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $c42fbc742adf8306$export$1ea93f9eface5983), {
|
|
10967
11073
|
duration: durationSec,
|
|
10968
11074
|
averageAudioLevel: asset.averageAudioLevel
|
|
10969
11075
|
})
|
|
@@ -11050,7 +11156,7 @@ const $e399416dd32d3252$export$c01bb29adf88f117 = ({ state: state })=>{
|
|
|
11050
11156
|
sendAssets.mutate(assets);
|
|
11051
11157
|
},
|
|
11052
11158
|
isLoading: sendAssets.isPending,
|
|
11053
|
-
disabled: assets.length === 0,
|
|
11159
|
+
disabled: assets.length === 0 || sendAssets.isPending,
|
|
11054
11160
|
children: [
|
|
11055
11161
|
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystemicons.Send3Icon), {
|
|
11056
11162
|
size: 18,
|
|
@@ -11142,6 +11248,10 @@ const $3753c01d669182c5$export$336a011955157f9a = ()=>{
|
|
|
11142
11248
|
const [isStoppingRecording, setIsStoppingRecording] = (0, $jQDcL$react.useState)(false);
|
|
11143
11249
|
const [networkIssue, setNetworkIssue] = (0, $jQDcL$react.useState)(false);
|
|
11144
11250
|
const [incomingAsset, setIncomingAsset] = (0, $jQDcL$react.useState)(null);
|
|
11251
|
+
const storedAssets = (0, $8a7a24ac08dbc187$export$931d641a2a152cf)();
|
|
11252
|
+
const storedTmpAssets = (0, $8a7a24ac08dbc187$export$685a373fa752db28)({
|
|
11253
|
+
enabled: !isRecording
|
|
11254
|
+
});
|
|
11145
11255
|
const videoRef = (0, $jQDcL$react.useRef)(null);
|
|
11146
11256
|
const isVideoBotEnabled = Boolean(clientInitResult.flow?.steps?.[0].config?.video_bot);
|
|
11147
11257
|
const videoBotState = (0, $jQDcL$snapcalldesignsystem.useDialogState)({
|
|
@@ -11164,10 +11274,13 @@ const $3753c01d669182c5$export$336a011955157f9a = ()=>{
|
|
|
11164
11274
|
const geolocation = (0, $c8b514323b7cd0b4$export$8c959c84e890409a)({
|
|
11165
11275
|
enabled: recorderOptions?.geolocation === true
|
|
11166
11276
|
});
|
|
11277
|
+
const closeFlowModalState = flowModalState.close;
|
|
11278
|
+
const openVideoBotState = videoBotState.open;
|
|
11167
11279
|
const addAsset = (0, $jQDcL$react.useCallback)((asset)=>{
|
|
11168
11280
|
const newAsset = asset;
|
|
11169
11281
|
if (geolocation) newAsset.geolocation = geolocation;
|
|
11170
11282
|
(0, $8a7a24ac08dbc187$export$cfdbe7fcc2578443)(newAsset);
|
|
11283
|
+
(0, $8a7a24ac08dbc187$export$df987b50509121ea)(newAsset.filename, (0, $8a7a24ac08dbc187$export$f590a969e8964902));
|
|
11171
11284
|
setAssets((currentAssets)=>[
|
|
11172
11285
|
...currentAssets,
|
|
11173
11286
|
newAsset
|
|
@@ -11176,7 +11289,6 @@ const $3753c01d669182c5$export$336a011955157f9a = ()=>{
|
|
|
11176
11289
|
}, [
|
|
11177
11290
|
geolocation
|
|
11178
11291
|
]);
|
|
11179
|
-
const storedAssets = (0, $8a7a24ac08dbc187$export$931d641a2a152cf)();
|
|
11180
11292
|
(0, $jQDcL$react.useEffect)(()=>{
|
|
11181
11293
|
storedAssets.data?.forEach((storedAsset)=>{
|
|
11182
11294
|
setAssets((currentAssets)=>[
|
|
@@ -11184,8 +11296,40 @@ const $3753c01d669182c5$export$336a011955157f9a = ()=>{
|
|
|
11184
11296
|
storedAsset
|
|
11185
11297
|
]);
|
|
11186
11298
|
});
|
|
11299
|
+
if (storedAssets.data?.length) {
|
|
11300
|
+
closeFlowModalState();
|
|
11301
|
+
openVideoBotState();
|
|
11302
|
+
}
|
|
11303
|
+
}, [
|
|
11304
|
+
storedAssets.data,
|
|
11305
|
+
closeFlowModalState,
|
|
11306
|
+
openVideoBotState
|
|
11307
|
+
]);
|
|
11308
|
+
(0, $jQDcL$react.useEffect)(()=>{
|
|
11309
|
+
// asset recovery
|
|
11310
|
+
if ((0, $8a7a24ac08dbc187$export$1cdce9790b21db20)((0, $8a7a24ac08dbc187$export$f590a969e8964902)) > 0) {
|
|
11311
|
+
closeFlowModalState();
|
|
11312
|
+
openVideoBotState();
|
|
11313
|
+
setIncomingAsset({
|
|
11314
|
+
mode: 'video',
|
|
11315
|
+
createdAt: Date.now()
|
|
11316
|
+
});
|
|
11317
|
+
}
|
|
11318
|
+
storedTmpAssets.data?.forEach((storedAsset)=>{
|
|
11319
|
+
try {
|
|
11320
|
+
addAsset(storedAsset);
|
|
11321
|
+
} catch (error) {}
|
|
11322
|
+
});
|
|
11187
11323
|
}, [
|
|
11188
|
-
|
|
11324
|
+
storedTmpAssets.data,
|
|
11325
|
+
closeFlowModalState,
|
|
11326
|
+
openVideoBotState,
|
|
11327
|
+
addAsset
|
|
11328
|
+
]);
|
|
11329
|
+
(0, $jQDcL$react.useEffect)(()=>{
|
|
11330
|
+
if (storedTmpAssets.error) setIncomingAsset(null);
|
|
11331
|
+
}, [
|
|
11332
|
+
storedTmpAssets.error
|
|
11189
11333
|
]);
|
|
11190
11334
|
const removeAsset = async (filename)=>{
|
|
11191
11335
|
try {
|
|
@@ -12212,6 +12356,7 @@ const $b686c3f1638d755f$export$6bd92120cafe6ad8 = (options = {})=>{
|
|
|
12212
12356
|
|
|
12213
12357
|
|
|
12214
12358
|
|
|
12359
|
+
|
|
12215
12360
|
const $ee8cb448c2c74888$var$currentLanguage = (0, $393bda1b33846dfc$export$604ba5624273df44)();
|
|
12216
12361
|
let $ee8cb448c2c74888$var$timestampCriticalError = -1;
|
|
12217
12362
|
const $ee8cb448c2c74888$var$endViewStates = [
|
|
@@ -12243,8 +12388,10 @@ const $ee8cb448c2c74888$var$StreamUI = ({ options: baseOptions })=>{
|
|
|
12243
12388
|
});
|
|
12244
12389
|
const [permissions, setPermissions] = (0, $jQDcL$react.useState)([]);
|
|
12245
12390
|
const [plan, setPlan] = (0, $jQDcL$react.useState)(undefined);
|
|
12246
|
-
const [recorderOptions, setRecorderOptions] = (0, $jQDcL$react.useState)(
|
|
12247
|
-
const [clientInitResult, setClientInitResult] = (0, $jQDcL$react.useState)({
|
|
12391
|
+
const [recorderOptions, setRecorderOptions] = (0, $jQDcL$react.useState)();
|
|
12392
|
+
const [clientInitResult, setClientInitResult] = (0, $jQDcL$react.useState)({
|
|
12393
|
+
type: 'instant'
|
|
12394
|
+
});
|
|
12248
12395
|
const blockedDevicesDialogState = (0, $jQDcL$snapcalldesignsystem.useDialogState)();
|
|
12249
12396
|
const openBlockedDevicesDialog = blockedDevicesDialogState.open;
|
|
12250
12397
|
const isFirstRender = (0, $67040444b405b263$export$5964c316e853650f)();
|
|
@@ -12259,6 +12406,8 @@ const $ee8cb448c2c74888$var$StreamUI = ({ options: baseOptions })=>{
|
|
|
12259
12406
|
const queryClient = (0, $jQDcL$tanstackreactquery.useQueryClient)();
|
|
12260
12407
|
const reportError = (0, $1c784e11381e6f0c$export$5a5695b638d078e7)();
|
|
12261
12408
|
const orientation = (containerWidth || window.screen.width) > (containerHeight || window.screen.height) ? 'landscape' : 'portrait';
|
|
12409
|
+
const recordingGroupValues = (0, $8a7a24ac08dbc187$export$f77b5c3e9feb6db7)('recordingGroup', (0, $8a7a24ac08dbc187$export$f590a969e8964902));
|
|
12410
|
+
const recordingGroup = recordingGroupValues.length > 0 ? recordingGroupValues[recordingGroupValues.length - 1] : undefined;
|
|
12262
12411
|
const onWebcamUpdate = (0, $jQDcL$react.useCallback)((event)=>{
|
|
12263
12412
|
queryClient.invalidateQueries({
|
|
12264
12413
|
queryKey: [
|
|
@@ -12400,9 +12549,9 @@ const $ee8cb448c2c74888$var$StreamUI = ({ options: baseOptions })=>{
|
|
|
12400
12549
|
reportError
|
|
12401
12550
|
]);
|
|
12402
12551
|
const onClientInitialized = (0, $jQDcL$react.useCallback)(async (event)=>{
|
|
12403
|
-
const { flow: flow } = event.detail;
|
|
12552
|
+
const { flow: flow, type: type } = event.detail;
|
|
12404
12553
|
const flowStep = flow?.steps[0];
|
|
12405
|
-
if (flowStep) {
|
|
12554
|
+
if (type === 'assist' && flowStep) {
|
|
12406
12555
|
const flowStepMode = flowStep.types.map((type)=>type === 'image' ? 'photo' : type);
|
|
12407
12556
|
setRecorderOptions({
|
|
12408
12557
|
geolocation: flowStep.config?.geolocation,
|
|
@@ -12412,11 +12561,23 @@ const $ee8cb448c2c74888$var$StreamUI = ({ options: baseOptions })=>{
|
|
|
12412
12561
|
skipOnboarding: false
|
|
12413
12562
|
});
|
|
12414
12563
|
await (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).setStep(flowStep.token);
|
|
12415
|
-
|
|
12416
|
-
|
|
12417
|
-
|
|
12418
|
-
|
|
12419
|
-
|
|
12564
|
+
await (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).joinRecorder();
|
|
12565
|
+
} else if (type === 'instant') {
|
|
12566
|
+
setOptions({
|
|
12567
|
+
...options,
|
|
12568
|
+
controls: {
|
|
12569
|
+
...options.controls,
|
|
12570
|
+
camera: {
|
|
12571
|
+
...options.controls?.camera,
|
|
12572
|
+
available: flowStep?.config?.allow_video !== false
|
|
12573
|
+
},
|
|
12574
|
+
screenshare: {
|
|
12575
|
+
...options.controls?.screenshare,
|
|
12576
|
+
available: flowStep?.config?.allow_screensharing !== false
|
|
12577
|
+
}
|
|
12578
|
+
}
|
|
12579
|
+
});
|
|
12580
|
+
if (!options.greeting) await (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).joinRoom();
|
|
12420
12581
|
}
|
|
12421
12582
|
const state = (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).getState();
|
|
12422
12583
|
const peerId = state.peerId;
|
|
@@ -12424,10 +12585,10 @@ const $ee8cb448c2c74888$var$StreamUI = ({ options: baseOptions })=>{
|
|
|
12424
12585
|
setPermissions(state.permissions);
|
|
12425
12586
|
setSelfPeerId(peerId);
|
|
12426
12587
|
setClientInitResult(event.detail || {});
|
|
12427
|
-
if (
|
|
12588
|
+
if (type === 'instant' && !options.greeting) try {
|
|
12428
12589
|
if (!options.headless) await (0, $c3d5253d9d597eb5$export$494039379563c94d)(options);
|
|
12429
12590
|
if (options.controls?.microphone?.enabled) await (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).enableMicrophone();
|
|
12430
|
-
if (options.controls?.camera?.enabled) await (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).enableVideo();
|
|
12591
|
+
if (options.controls?.camera?.enabled && flowStep?.config?.allow_video !== false) await (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).enableVideo();
|
|
12431
12592
|
setUserInteractionTriggered(true);
|
|
12432
12593
|
} catch (userInteractionError) {
|
|
12433
12594
|
openBlockedDevicesDialog();
|
|
@@ -12570,7 +12731,8 @@ const $ee8cb448c2c74888$var$StreamUI = ({ options: baseOptions })=>{
|
|
|
12570
12731
|
apiKey: uiOptions.apiKey,
|
|
12571
12732
|
email: uiOptions.email,
|
|
12572
12733
|
profile: uiOptions.profile,
|
|
12573
|
-
authKey: uiOptions.authKey
|
|
12734
|
+
authKey: uiOptions.authKey,
|
|
12735
|
+
recordingGroup: recordingGroup
|
|
12574
12736
|
}).catch((err)=>console.error(err));
|
|
12575
12737
|
else setStreamState('expired');
|
|
12576
12738
|
};
|