Bring Releases up to 26.11.2, and the MAUI pin to 10.0.120
The page still called 26.9.21 current, with an "Unreleased - fixed on master"
section, although 26.9.29, 26.10.25, 26.10.26 and 26.10.28 had all shipped.
- 26.11.2: the three advisories cleared (SignalR.Common high, SignalR MessagePack
protocol, MessagePack), every dependency updated, and the MAUI 10.0.120 step.
- 26.10.25 to 26.10.28: the Windows ReplaceTrack, transceiver release (#50), tile
sizing and track Enabled fixes, and the Android foreground-service crash.
- 26.9.29: the old Unreleased section, attributed to the release that shipped it.
It was published by manual dispatch, so it has no tag; the attribution comes
from the commit that was published, not from tag ancestry, which would have
credited all of it to 26.10.25.
MAUI 10.0.120 in Getting started, Platform prerequisites, Troubleshooting and
Releases, and the current version on six pages. "Since/before 26.9.21" history
is left as written, as is the 2.0.0 summary line naming MAUI 10.0.101.
How a release is cut: publish.yml now creates the GitHub release from the
annotated tag's message, so the notes belong in the tag.
9bc20f2
What is fixed on master since 26.9.21, and what 26.9.21 users should know
Releases gains an Unreleased section. It opens with the known issues in
26.9.21:
- Apple sends video only on the first call and never turns the camera off.
- MAUI error dialogs hang up the call.
- A join can silently never connect.
- Closing a call on Apple's UI thread can freeze the app.
It then gives the fixes, and what an application will notice when they
ship. What works where points to it. Middleware now describes the native
MAUI dialogs and VideoMuted's move to the observable side.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1c8075d
Add 26.9.21 to Releases and move the current version
The release notes for what shipped today: Android reporting real peer
connection states, so a call whose transport died finally ends there;
RestartIce working on all five platforms rather than one, and the
IceRestart offer option that four bindings silently ignored; automatic
recovery of a failed transport on the signalling path; a Windows
sender that can be capped mid-call; the frame sink deadlock and the
Media tile that ignored a changed stream. M153 underneath.
The Apple camera preview delay is written up as a known issue rather
than left for someone to find: it is in this release and fixed after
it.
Current version moved from 26.9.18 across Home, Getting started,
Platform prerequisites, Testing and the feature matrix, whose body was
already written for 26.9.21.
3a0dda0
ICE restart only ever worked on Blazor
RTCOfferOptions.IceRestart is read by one binding. Blazor passes the options
object to the browser's createOffer; Android, iOS, Mac Catalyst and Windows
discard it, so the "restart" was a plain re-offer carrying the old credentials.
The call renegotiated and nothing restarted, which is why a browser test passed
it and this page said the feature was verified on all five.
Fixed in the repository as of 26.9.21 by calling RestartIce() instead, so:
- What works where says what each platform actually did, and gains a row for
the automatic recovery, which is new.
- Connection.md documents that a call now recovers by itself, and warns anyone
on an earlier package that the button is decorative on four platforms.
- The 26.9.18 release note carries a correction, because that is the published
package and people are running it today.
414475b
Two more places that claimed to be current at 26.9.16
The page index in Releases and the heading of What works where both state a
version they are current as of, so they are claims rather than history and had
gone stale. The remaining 26.9.16 mentions are deliberate - "on 26.9.16 and
earlier", "26.9.16 or later", and a tag in the release-process diagram.
f78db3d
Add 26.9.18 to Releases and bump the current version
One bug across three platforms, filed as several issues: peer connection awaits
resumed on libwebrtc own signalling thread, so a Dispose after an await ran
inside libwebrtc callback and closed the connection a few lines before libwebrtc
used what the close destroyed. EXC_BAD_ACCESS at 0x30 on Apple, a destroyed-mutex
abort on Android, and asynchronous either way so it killed unrelated work.
Also records OnTrack finally firing on Apple, and the -NativeLog switch.
Connection-Signaling said "the release following 26.9.16" in three places for
things that have now shipped; they name 26.9.18.
fac7a12
DOMAIN must be the address clients dial, not localhost
The documented docker run set DOMAIN=localhost, which rejects every client that
is not on the server's own machine. The demo server turns away a WebSocket
upgrade whose Origin does not match DOMAIN, and it does it above the
application, so docker logs shows nothing whatsoever.
The client-side message is actively misleading - "Websocket connection aborted
unexpectedly. Check connection and socket security version/TLS version" - when
TLS has already succeeded a line earlier. The empty server log is the real tell.
Found the hard way while verifying issue #21 on an iPhone: TCP connected, TLS
connected, handshake aborted, nothing logged. Setting DOMAIN to the announced
address fixed it immediately and the phone produced to the SFU.
0f94584
Correct the TURN proxy table: three of the five are stubs
The table listed all five proxies as though they were choices. Three of them -
Twilio, Coturn and AppRtc - have a GetIceServersAsync that throws
NotImplementedException, so picking one gets an exception at the first client
to join a room rather than a working call. The page also said "the two proxies
for hosted ones are already written", which is half true: Xirsys is, Twilio is
not.
That misinformation had a cost. Someone deploying the server and asking why
calls worked on a LAN and not the internet (issue #42) was told, on the issue,
to switch to Coturn or Twilio. Neither could ever have worked.
Records the third gate as well, which nobody had noticed: IHttpClientFactory
was never registered, so XirsysProxy - the one hosted proxy that is
implemented - could not be resolved even after the two source edits this page
described.
Documents the single configuration key that replaces all three edits, marked as
arriving in the release after 26.9.16 since the server is run from source and
master does not have it yet. The old three-edit procedure is kept for anyone on
an older checkout.
Also documents ISignalingServerUrlProvider for setting the client's signalling
address at runtime, same release, since this page is where the client BaseUrl
is documented.
03e8a24
Connection-Signaling: switching TURN provider takes two edits, not one
The page said uncomment the proxy you want in Startup.cs. That is necessary
and not sufficient: RoomHub hardcodes Create(TurnServer.StunOnly) rather than
reading it from configuration, so uncommenting alone changes nothing and the
reader would conclude the provider is broken.
Written from Startup.cs without following the call through to the hub. Found
by tracing what actually reads the TURN settings - the answer being nothing,
in the default build.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
dcf8590
Release as 26.9.16, today's date
The scheme is the build date and 26.9.17 was tomorrow's. Also corrects the
one sentence a blind replace would have left wrong - the example that maps
the version back to a calendar date.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
96cbc39
Releases: NOTICE now ships inside the packages
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
200fdb0
Releases: NOTICE is filled in, so stop saying it is empty
Replaces the warning with what the file now covers, and keeps one caveat
that is still true: it is not packed into the .nupkg, so it does not reach a
consumer on its own.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
0dcea4e
Releases: absorb the release notes the README was carrying
The root README had become a changelog with a package list attached - the
2.0.0 notes, the Xamarin drop, the credits and the upgrade steps. That
belongs on a releases page, and now that one exists the README can stop
being one.
README_V1.md stays where it is and is linked rather than copied. It is a
stack of dated notes going back to 2021 and reads as the historical record
it is.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
4af22ec
Wiki: the five reference pages
Platform prerequisites leads with the three failures that say nothing when
you hit them, symptom first, because that is how a reader arrives.
What works where separates implemented from run. A lot of Apple code was
written on reasoning alone and compiles perfectly, and a matrix that shows
only yes or no would hide exactly that. Two rows were corrected against the
source while writing it: OnDeviceChange is dead on iOS and Mac Catalyst, and
simulcast outside Blazor and Android is unverified rather than working.
Testing carries the real numbers - 114 tests, 2.0s - from a run, not from
counting attributes.
Troubleshooting is organised by what the reader sees, never by which layer
is at fault, since a reader who knew the layer would not need the page.
Releases records what the packages embed and that attribution is the
consumer's to satisfy, and says plainly that NOTICE is empty rather than
letting an empty file read as nothing being required.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
44e8490
Wiki: the seven stack pages
One page per layer, bottom to top, each ending in a pointer to the next:
WebRTCnative, Bindings, The unified API, Middleware, Connection and its two
implementations, and the demo apps.
The unified API page is named for what it is rather than for the package,
because a sidebar with WebRTCme nested under WebRTCme reads as a mistake.
Connection is split three ways. One page covering two topologies, two server
deployments and two sequence diagrams would have been six hundred lines, and
the two implementations have almost nothing in common below IConnection.
Twelve mermaid diagrams, all parsed and rendered under the strict security
level GitHub uses before being committed. Mermaid rather than SVG pairs: it
themes itself for dark mode and stays editable in place.
Connection-Signaling records that the server's tracked appsettings.json
carries a real Xirsys credential, because a reader who forks this needs to
know not to rely on it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
71350c8
Wiki spine: Home, Getting started, Hello world, sidebar
Replaces the two-page stub. Home and Api.md described the Xamarin era and a
WebRTCme.Api that no longer exists as a separate assembly; Api.md was a
placeholder line of text and is deleted.
The three prerequisites that fail silently - the Windows App Runtime, the MAUI
version pin and the Blazor script tag - are each stated where a reader hits
them, not only on a page of their own.
The Hello world sample is compiled against all five slices before publishing,
not transcribed.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
815986d