[Live-devel] Help with live streaming h.264 frames
Ross Finlayson
finlayson at live555.com
Wed Apr 24 14:32:52 PDT 2024
> On Apr 24, 2024, at 1:46 PM, Flavio Alves <flavio.alves at vitalintelligencedata.com> wrote:
>
> My first implementation uses the approach you mentioned. I implemented it using x264 and it worked fine.
>
> But my requirement is to use the Nvidia Jetson Nano hardware encoder. Nvidia provides an API to handle the encoder. This API uses threads for the encoder and select() for V4L communication. On my implementation, when I executed everything, the Live555 worked fine and the Encoder thread got stuck, because the use of the select() is also blocking.
I’m not sure I see the problem here. Suppose you have two threads - one for your encoder (that uses your Nvidia API), and another for the server (that uses the LIVE555 API). Both threads are event-driven (using “select()”). Set up your encoder thread to call “select()” (and thus block) on your input socket (for your encoder), to call a handler function whenever there’s new data (presumably, an encoded NAL unit) available to read on this socket. This handler function would call “triggerEvent()” (the only LIVE555 function that can be called by a non-LIVE555 thread), to signal the LIVE555 thread of the availability of new data.
In other words, both threads are blocking, but only until an event occurs - which the thread should then handle.
The other possibility is to use just a single (LIVE555) thread, and do all event handling using LIVE555. You could handle events on your encoder socket by calling (the LIVE555 function) “setBackgroundHandling()” (you can see several examples of this in the “liveMedia” directory. In this case, you would not call “select()” at all (because the LIVE555 event loop already does that for you).
But I don’t know anything about your "Nvidia Jetson multimedia API”. so I might be completely wrong here…
Ross Finlayson
Live Networks, Inc.
http://www.live555.com/
More information about the live-devel
mailing list