To devise a device to devalue in reverse.
And to hear matey play piano without the background noise filtering algorithm deleting half the sound!
And without crushing the rest of the sound with low bitrate - not spending enough brush strokes of data describing the sound.
Even though it's pretty easy to have loads more bitrate!
And then it's like having your mate made of luxury holographic atoms.
More convincing signal means more action on the brain, etc etc.
...Has led me to take up WebRTC to do phone calls on a webpage! It's easy.
A brief forray into "webrtc insertable-streams API to capture data"
This API can be used for experimenting with end-to-end media encryption (e.g., SFrame. However, this API is not recommended for this use case until a mechanism that allows browsers to perform end-to-end encryption without exposing keys to JavaScript becomes available. This document will also define a mechanism for browsers to provide built-in transformers which do not require JavaScript access to the key or media. Separately, this or some other WG may work on a mechanism for end-to-end keying.
Interesting notes.
Skim this, you can do things:
Currently we're working towards this feature:
Which is also in the plan|note|calendar time-slot of now thus:
Or exactly as it looks in this codemirror web based editor from before svelte time:
It is highlighting perl keywords.
So we got into wanting a stack of effects I could CRUD with.
No data channel, hence:
When we recreate next time, it's full of the old effects! What the hell.
You gotta:
Or as I commit, effects = undefined or they resurrect!
Anyway, here's a composition made of screenshots taken during one of my computer's seizures:
I simply transform blur things here, all the tile-shuffling and transparent bits are how it was.
Slight crop of the background layer of the above image. Mastodon people are talking, somehow some montane has gotten in there...
Still no WebRTC happiness though.
Watch out for this memory leak, I've found these after a while to be multiple GB:
Refreshing the page, one of them suddenly grows by 30MB, then drops back to 50MB again. This is probably a new instance of whatever is in there throwing itself up and then garbage collection taking out the old instance of whatever.
Even though recording isn't switched on... I'm not sure what else could be saving up the stream..? We'll come back to this before launch, right?
Anyway, we have not remote connectivity, at this point...
And so, gitk is a program we can use to get outside the spaceship of time, to where it worked:
And then bring up larger slabs of data from the good time:
The mid is null and the receiver stream is empty. The setLocalDescription looks very healthy.
The receiver (and mid) of the above object fills out a little later:
receiver:{ track:'106d616b-05b4-494e-9280-2ef06a4126cd', streams:['{a79b4bb4-8eb3-4910-adaa-9d7ebed9a643}'], },
Which means it's going.
And now to check out the main branch again:
Okay, as I had no idea negotiation was a bus you could just miss...
The name "createDataChannel" is quite misleading, it's more like adding an option to something that's happening approximately when you might call it... how racey
you're not handling onnegotiationneeded
anywhere
TADA!
Now it should do this when it needs to change the qualities of the phone it's holding...
All the fine grains are stuck in my fingers. Better bike ride-off the tension.
Anyway,
Renegotiation is not that easy!
I put it in a tailspin trying to avoid renegotiation and just recreate par.pc:
Because here is my first try at renegotiation. It seems overly fussy, basically deciding a stable connection is not what it's after:
I look at Janus Gateway, find a little bit of red herring in the CHANGELOG. janus.c reveals: FIXME This is a renegotiation: we can currently only handle simple changes
It's only wanting a datachannel that breaks it. Perhaps... Oh yes:
That call to this.couldbeready(par)
Which is our "keep setting up" repeating action,
Will not have par.pc_ready yet! Twas imperceptible in the log.
Oh well, that was it.
So if you want a datachannel you better make one pronto! Is the message.
I'd like to network my people with gear like this. I'm taking the loads of disappointment so they don't have to!
I try to show negotiation going wrong again but it seems to want to work now too. So lets share that!
We can save build time not doing COPY . . since we already volumes:
Getting rid of that makes the build take no time! It was throwing uploads/ into every build :-0
Build? Yes. Adding a router configuring spider at 8a32170f78368689c224a6abb8af97243f183c9c using puppeteer.
I take a couple of screenshots to represent "now", which is always in flux:
And that tells me that the username is already filled in! This is working.
The rest is code. This is all becoming the self-hosting kit for random NZ flats.
It's unfortunate I had to do all this though. It just keeps forgetting the settings. Why? It's a holiday I am spending working.
But you can do this:
The console.log
statements inside page.evaluate()
are actually running in the browser's context (the webpage), not in Node.js. To see those logs, you need to:
- Either listen to the browser console logs using:
page.on('console', msg => console.log('Browser console:', msg.text()));
- Or return the values you want to log from the evaluate function:
// on adding a mapping to a host, we must find the identifier of our application// will be something like:// 'InternetGatewayDevice.Services.X_Application.32.'let portmapapp_name = null// we will add it if not found hereasync function select_portforwarding_app(page) {let {appid,all} = await page.evaluate(() => {const select = document.querySelector('select#portmapping_app_id_ctrl');const options = Array.from(select.options);let all = {}let appid = nulloptions.map(opt => {let name = opt.textContent.trim()all[opt.value] = nameif (name == config.portMapping.name) {appid = opt.value}})return appid})console.log("Found apps:",all)portmapapp_name = appidreturn appid}
The above is out of date now, config should be passed in. Let's move on though.
Lets intelligise these, which were AI'd from apparently now obsolete Puppeteer code that DevTools Recorder made. It used to have about five different selectors for each thing, pragmatics for organics. Most of them were unintelligible, so we go around replacing the likes of:
With what it didn't notice was a much more human-shaped thing to talk about just above that thing:
And muck about quite thoroughly with validation:
But it all worked in the end, now it's just another thing in docker compose.
Here it is running through in screenshots:
Ahhh... Good quality time needs this work done.
A couple of times in the past month I invited people over to my favela on the digital frontier, but their impression turned out to be 100% connection error, because the router forgot what I told it.
With that and that taken care of at around 19de895759883e7c73322976ce536a5228dc3efc lets return to:
Gain
I think I'll post this now and edit in the main event some time tomorrow...
No comments:
Post a Comment