Due to an influx of spam, we have had to impose restrictions on new accounts. Please see this wiki page for instructions on how to get full permissions. Sorry for the inconvenience.
Admin message
The migration is almost done, at least the rest should happen in the background. There are still a few technical difference between the old cluster and the new ones, and they are summarized in this issue. Please pay attention to the TL:DR at the end of the comment.
In summary, aggregate-mode=zero-latency is breaking various proprietary NVRs while they worked in previous versions and with aggregate-mode=none. On the other hand Safari WebRTC doesn't work with no aggregation, which is why it was changed at all.
@ndufresne also says that aggregate-mode=none behaviour now matches live555.
Edited
Designs
Child items ...
Show closed items
Linked items 0
Link issues together to show that they're related.
Learn more.
Apparently I wasn't right on 555, I received a pcap a while ago, which was suppose to be from that, most likely a modifier version. So you can find the minimalistic payloader here (live555 does not use a public version system like git, so picking from random repo):
@ndufresne What would you suggest then? Make the old behaviour the default again and document that people should enable zero-latency for WebRTC compatibility?
Not certain, I think rtsp server should explicitly configure it, whatever we pick here (for the RSTP case), and perhaps WebRTCBin have the ability to do the same. So basically we should not leave it to good will of default values in context we can control this.
As for the default, perhaps being conservative (old value) make sense. As I bet pretty old RAW RTP stuff will be affected ?
The payloaders are before webrtcbin in the pipeline - it has no control over them at the moment.
For this use case and also others (like automatic encoder bitrate control), we'll need to build something that makes it possible for WebRTCbin to affect elements outside the pipeline.
RTSP server also can't configure it directly, the payloaders are in the same position as with webrtcbin. In both cases it would have to be the job of the application.
We could add some kind of CONFIGURATION_HINT query for elements to retrieve more info that could guide default values that are not negotiable via caps.
Or (something I've been wanting) a ConfigurationContext on pipelines/bins that elements can use to figure out more about the bigger use case / scenario they operate in.
I tried implementing something like that once, but it was awkward with the GstContext as it exists now. I think the best you can do is to supply a GstContext with a GstStructure that holds an object that elements can retrieve and call API on.
Yes, sticky upstream events would be useful, but that's flying car future for now.
It's not clear to me that this kind of query would always be racy, especially in an rtsp-server / webrtcbin context? Doing a (non-serialised) query on startup and in response to reconfigure events (which are triggered automatically on relink) should be pretty much functionally equivalent, even if convoluted?
The tricky bit with query is that you never know when to do them. Implementations I seen endup adding just enough random location so that it works for the tested pipeline (and add more when it breaks). It's far from elegant.
Let's move back to old behaviour for 1.18 now and if someone feels like it they can implement a query and a better solution. @ndufresne do you want to provide a MR for switching the default or should I?
I think it should be documented in webrtcbin but also in the payloader (basically explain that a mode can break webtrc while the other can break RTSP with specific NVR). I won't be able to help with this until August 10th.
Currently there is no codec/stream specific documentation at all in webrtcbin and I'm not sure where to put it exactly. Does anybody have any suggestions, or do we just keep it as-is?