mirror of
https://github.com/eliasstepanik/vdo.ninja.git
synced 2026-01-15 23:58:29 +00:00
Add files via upload
This commit is contained in:
parent
41d9f2fc9a
commit
1f24e6b0a8
45
index.html
45
index.html
@ -67,7 +67,7 @@
|
||||
<link itemprop="url" href="./media/vdoNinja_logo_full.png" />
|
||||
</span>
|
||||
<script type="text/javascript" crossorigin="anonymous" src="./thirdparty/CodecsHandler.js?ver=34"></script>
|
||||
<script type="text/javascript" crossorigin="anonymous" src="./webrtc.js?ver=326"></script>
|
||||
<script type="text/javascript" crossorigin="anonymous" src="./webrtc.js?ver=327"></script>
|
||||
<input id="zoomSlider" type="range" style="display: none;" />
|
||||
<div id="header">
|
||||
|
||||
@ -740,14 +740,18 @@
|
||||
Some devices that use H264 hardware encoding can experience video glitching; switching to VP8 or VP9 as a codec can help.
|
||||
</li>
|
||||
<li>
|
||||
Video glitching and random audio-loss can occur when using the OBS browser source. The <a href='https://github.com/steveseguin/electroncapture/blob/master/README.md'>Electron Capture app</a> avoids these issues.
|
||||
Video glitching and random audio-loss can occur when using the OBS browser source. The <a href='https://github.com/steveseguin/electroncapture/blob/master/README.md' target="_blank">Electron Capture app</a> avoids these issues.
|
||||
</li>
|
||||
<li>
|
||||
Chrome v95 with an AMD GPUs have an issue hardware encoding H264 video; this will be fixed in Chrome v96. <a href='https://bugs.chromium.org/p/chromium/issues/detail?id=1252710' target="_blank">Details here</a>.
|
||||
</li>
|
||||
|
||||
<br />
|
||||
<h4 style="color:#daad09;">
|
||||
👋 👀 Welcome to VDO Ninja! We've rebranded! 📼 Nothing else is changing and we're staying 100% free.
|
||||
</h4>
|
||||
<br />
|
||||
🎁 Site updated October 15th (v19.4). The <a href="https://docs.vdo.ninja/release-notes/v19">v19 release notes are here</a>. If new issues occur, the older v18 can be <a href="https://vdo.ninja/v183/">found here</a>.
|
||||
🎁 Site updated October 19th (v19.4). The <a href="https://docs.vdo.ninja/release-notes/v19">v19 release notes are here</a>. If new issues occur, the older v18 can be <a href="https://vdo.ninja/v183/">found here</a>.
|
||||
|
||||
<br />
|
||||
<br />
|
||||
@ -1797,25 +1801,18 @@
|
||||
|
||||
// session.configuration.iceTransportPolicy = "relay"; // uncomment to enable "&privacy" and force the TURN server
|
||||
|
||||
///// Different officially hosted handshake endpoints are available; each isolated from each other.
|
||||
// session.wss = "wss://wss13.obs.ninja:443"; // US-East (Default)
|
||||
// session.wss = "wss://apibackup.obs.ninja:443"; // US-West
|
||||
// session.wss = "wss://jp1wss.obs.ninja:443"; // Japan
|
||||
// session.wss = "wss://au1wss.obs.ninja:443"; // Australia
|
||||
// session.wss = "wss://de1wss.obs.ninja:443"; // Germany
|
||||
// session.wss = "wss://insecure.cam:444"; // China
|
||||
//////
|
||||
// session.wss = "wss://api.vdo.ninja:443"; // US-East (Default)
|
||||
|
||||
/// If wanting to fully-self-host, uncomment the following and deploy your own websocket server; good for air-gapped deployments
|
||||
// session.wss = "wss://wss.contribute.cam:443"; // https://github.com/steveseguin/websocket_server
|
||||
// session.customWSS = true;
|
||||
//////
|
||||
|
||||
/////// Or you can use piesocket.com if you wish to have a basic free websocket server hosted for you by a third-party
|
||||
//session.customWSS = true; // Set to true to have Piesocket.com
|
||||
//var apiKey = "ZCu96UFf9ezeQeClK7BOCkq6Q0x0lxWAPJcgxjz5"; // GET YOUR OWN API KEY at piesocket.com, as using this one is a privacy hazard.
|
||||
//session.wss = "wss://us-nyc-1.websocket.me/v3/1?api_key="+apiKey;
|
||||
////////////
|
||||
/// If wanting to fully-self-host, uncomment the following and deploy your own websocket server; good for air-gapped deployments
|
||||
// session.wss = "wss://wss.yourdomainhere.com:443"; // https://github.com/steveseguin/websocket_server
|
||||
// session.customWSS = true;
|
||||
//////
|
||||
|
||||
/////// Or you can use piesocket.com if you wish to have a basic free websocket server hosted for you by a third-party
|
||||
//session.customWSS = true; // Set to true to have Piesocket.com
|
||||
//var apiKey = "ZCu96UFf9ezeQeClK7BOCkq6Q0x0lxWAPJcgxjz5"; // GET YOUR OWN API KEY at piesocket.com
|
||||
//session.wss = "wss://us-nyc-1.websocket.me/v3/1?api_key="+apiKey;
|
||||
////////////
|
||||
|
||||
///// The following lets you set the defaults
|
||||
|
||||
@ -1838,7 +1835,7 @@
|
||||
// session.width // int
|
||||
// session.quality // int -- if setting == 0, then than the default resolution will be 1080p, instead of 720p
|
||||
// session.sink
|
||||
// session.offsetChannel /2 int
|
||||
// session.offsetChannel //2 int
|
||||
// session.audioChannels // int
|
||||
// session.security
|
||||
// session.framerate // int
|
||||
@ -1849,11 +1846,11 @@
|
||||
// session.title // "zzzz"
|
||||
</script>
|
||||
<script type="text/javascript" crossorigin="anonymous" src="./thirdparty/aes.js"></script>
|
||||
<script type="text/javascript" crossorigin="anonymous" id="lib-js" src="./lib.js?ver=202"></script>
|
||||
<script type="text/javascript" crossorigin="anonymous" id="lib-js" src="./lib.js?ver=204"></script>
|
||||
<!--
|
||||
// If you wish to change branding, blank offers a good clean start.
|
||||
<script type="text/javascript" id="main-js" src="./main.js" data-translation="blank"></script>
|
||||
-->
|
||||
<script type="text/javascript" crossorigin="anonymous" id="main-js" src="./main.js?ver=275"></script>
|
||||
<script type="text/javascript" crossorigin="anonymous" id="main-js" src="./main.js?ver=277"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
37
lib.js
37
lib.js
@ -5283,23 +5283,36 @@ function directMigrate(ele, event, room=false) { // everyone in the room will ha
|
||||
|
||||
if (migrateRoom) {
|
||||
previousRoom = migrateRoom;
|
||||
|
||||
var msg = {};
|
||||
msg.request = "migrate";
|
||||
if (session.password) {
|
||||
return generateHash(migrateRoom + session.password + session.salt, 16).then(function(rid) {
|
||||
var msg = {};
|
||||
msg.request = "migrate";
|
||||
msg.roomid = rid;
|
||||
msg.target = ele.dataset.UUID;
|
||||
session.sendMsg(msg); // send to everyone in the room, so they know if they are on air or not.
|
||||
if (session.director && session.directorUUID && (session.directorUUID !==true)){
|
||||
msg.migrate = ele.dataset.UUID;
|
||||
msg.roomid = rid;
|
||||
session.sendRequest(msg, session.directorUUID);
|
||||
log(msg);
|
||||
} else {
|
||||
msg.request = "migrate";
|
||||
msg.roomid = rid;
|
||||
msg.target = ele.dataset.UUID;
|
||||
session.sendMsg(msg); // send to everyone in the room, so they know if they are on air or not.
|
||||
}
|
||||
}).catch(errorlog);
|
||||
} else {
|
||||
var msg = {};
|
||||
msg.request = "migrate";
|
||||
msg.roomid = migrateRoom;
|
||||
msg.target = ele.dataset.UUID;
|
||||
session.sendMsg(msg); // send to everyone in the room, so they know if they are on air or not.
|
||||
if (session.director && session.directorUUID && (session.directorUUID !==true)){
|
||||
msg.migrate = ele.dataset.UUID;
|
||||
msg.roomid = migrateRoom;
|
||||
session.sendRequest(msg, session.directorUUID);
|
||||
log(msg);
|
||||
} else {
|
||||
msg.request = "migrate";
|
||||
msg.roomid = migrateRoom;
|
||||
msg.target = ele.dataset.UUID;
|
||||
session.sendMsg(msg); // send to everyone in the room, so they know if they are on air or not.
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -6444,7 +6457,7 @@ session.publishIFrame = function(iframeURL){
|
||||
function outboundAudioPipeline(stream) {
|
||||
|
||||
if (session.disableWebAudio) {
|
||||
if (session.mobile){return stream;} // iOS devices can't remap video tracks, else KABOOM. Might as well do this for android also.
|
||||
//if (session.mobile){return stream;} // iOS devices can't remap video tracks, else KABOOM. Might as well do this for android also.
|
||||
|
||||
var newStream = createMediaStream();
|
||||
stream.getTracks().forEach(function(track) { // this seems to fix a bug with macbooks.
|
||||
@ -10860,7 +10873,8 @@ async function grabVideo(quality = 0, eleName = 'previewWebcam', selector = "sel
|
||||
|
||||
});
|
||||
|
||||
|
||||
updateRenderOutpipe();
|
||||
// senderAudioUpdate
|
||||
|
||||
if (wasDisabled && !session.videoMuted){
|
||||
var msg = {};
|
||||
@ -10912,7 +10926,6 @@ async function grabVideo(quality = 0, eleName = 'previewWebcam', selector = "sel
|
||||
|
||||
grabVideoTimer = setTimeout(function(callback3) {
|
||||
|
||||
updateRenderOutpipe();
|
||||
makeImages(true);
|
||||
|
||||
if (getById("popupSelector_constraints_loading")) {
|
||||
|
||||
5
main.css
5
main.css
@ -15,7 +15,8 @@
|
||||
--color-mode: light;
|
||||
--button-radius: 2px;
|
||||
--myvideo-max-width: min(800px,100vw);
|
||||
--myvideo-width:800px;
|
||||
--myvideo-width:unset;
|
||||
--myvideo-height:auto;
|
||||
}
|
||||
|
||||
* {
|
||||
@ -1522,7 +1523,7 @@ img {
|
||||
width: var(--myvideo-width);
|
||||
max-width: 800px !important;
|
||||
max-height: 100% !important;
|
||||
height: auto !important;
|
||||
height: var(--myvideo-height) !important;
|
||||
display: block !important;
|
||||
margin: auto auto !important;
|
||||
position: relative !important;
|
||||
|
||||
13
main.js
13
main.js
@ -141,6 +141,10 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
if (urlParams.has('cleanoutput') || urlParams.has('clean') || urlParams.has('cleanish')) {
|
||||
session.cleanOutput = true;
|
||||
}
|
||||
|
||||
if (urlParams.has('cleanviewer') || urlParams.has('cv')) {
|
||||
session.cleanViewer = true;
|
||||
}
|
||||
|
||||
if (urlParams.has('retrytimeout')) {
|
||||
session.retryTimeout = parseInt(urlParams.get('retrytimeout'));
|
||||
@ -507,6 +511,7 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
document.documentElement.style.setProperty('--fit-style', 'cover');
|
||||
document.documentElement.style.setProperty('--myvideo-max-width', '100vw');
|
||||
document.documentElement.style.setProperty('--myvideo-width', '100vw');
|
||||
document.documentElement.style.setProperty('--myvideo-height', '100vh');
|
||||
}
|
||||
|
||||
if (urlParams.has('record')) {
|
||||
@ -1031,8 +1036,6 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
session.micDelay = parseInt(session.micDelay) || 0;
|
||||
session.disableWebAudio = false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (urlParams.has('tips')){
|
||||
getById("guestTips").style.display="flex";
|
||||
@ -2262,6 +2265,12 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
}
|
||||
}
|
||||
|
||||
if (session.cleanViewer){
|
||||
if (session.view && !session.director && session.permaid===false){
|
||||
session.cleanOutput = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (urlParams.has('hidescreenshare') || urlParams.has('hidess') || urlParams.has('sshide') || urlParams.has('screensharehide')) { // this way I don't need to remember what it's called. I can just guess. :D
|
||||
session.screenShareElementHidden = true;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user