Try it in two stepsThe salesroom below already works — bid on it now if you like. The steps add the part MediaSFU actually provides: live media between real people.
- 1Launch the private auction room
Turns the auctioneer tile into a real camera and microphone. No account and no setup — it is a guest room, and it ends when you do. The bidding logic does not change, which is the point: media is a capability you attach, not a rewrite.
- 2Create a bidder link and open it elsewhere
Open it in a second browser or on your phone to see both sides of the same room at once — the auctioneer's view and a bidder's. That two-way view is the whole demo.
Advanced · auction setupRoom capabilities for testing. Defaults match the plain showcase.
Live camera and mic are off. The auction still runs — everything below works without them.
Lot 1 of 3
Vintage camera
$0
Reserve not yet met
Bidding, anti-snipe and lot progression all run for real, here in your browser. Payments, inventory and fulfilment stay in your own systems.
For developers: what's running behind this UIThe SDK calls that produce everything above
useMediasfuHeadless()- One hook for the whole room — streams, controls, moderation — with no MediaSFU UI rendered at all. The auction layout is entirely app-owned.
getRemoteVideoStreams()- Resolves who is on camera: merges the SDK's stream lists, dedupes by producer id, drops your own self-marker, and checks each track is live.
getAudioGridComponents()- Every participant's audio, all of it. Rendering a subset silences whoever falls off the end while they are still visibly present.
selectBidderPanel()- Seats the bidding floor. A seat is held by publishing, not by being approved, so an approved-but-silent bidder never blocks the floor.
attachPlayback()- Streams the salesroom over HLS to a large audience. Those viewers never join the room, so they cost a CDN request instead of a media connection each.
Add ?floor=1 to this URL to seat bidders on camera with everyone else on the stream. &seats=2, &role=viewer and &viewer=webrtc exercise each view without a second device.