[Libav-user] libavformat Realtime Best Practice
steve.sisak at gmail.com
Tue Jan 23 12:32:33 EET 2018
I’m in the process of writing to a wrapper for libavformat to record from an H.264/AAC RTSP stream on macOS/iOS and have some questions on how to start/stop the stream and respond to discontinuities cleanly (i.e. without large hiccups).
I’m using libavformat solely for the RTSP implementation and parsing/consuming the H.264 stream directly and theoretically have no need for libx264 beyond what libavformat requires to open the stream. (Can it be avoided?)
Ideally I’m looking for an “Opening a network stream” and “Reading from a network stream” equivalents of the “Opening a media file” and “Reading from an opened file” sections here:
If someone is willing to answer some questions on how libavformat is _supposed_ to be used in this scenario, I’ll be glad to summarize them in write those sections.
If already exists, I’d appreciate a link as Google is failing me.
At the moment, I have working code avformat_open_input() / avformat_find_stream_info() / av_read_frame() but am seeing occasional bad timestamps and dropouts, which I want to recover from as smoothly as possible.
Calling avformat_find_stream_info() / av_find_best_stream() cause a large hiccup reading ahead to find the program streams and seems inappropriate for RTSP — especially if the video format could change on the fly.
Further av_read_play() and av_read_pause() have been returning errors — perhaps because avformat_find_stream_info() has been called?
Should I just call avformat_open_input() then av_read_play() and assume any necessary AVStream* structures will have been lazily created for any index i see in av_read_frame()?
What I’m looking for is user-level documentation for:
1) Opening/Playing/Pausing an RTSP stream
2) Finding what sub streams are present including format and timebase information
3) Detecting and restarting cleanly after discontinuities — either dropouts of format changed
TIA for any assistance.
More information about the Libav-user