[Libav-user] Logging in multi-stream multi-threaded video processing service
Alexander Shumsky
alex3d at netup.ru
Tue Jan 10 13:23:25 EET 2017
Hi all!
We are developing multi-stream multi-threaded video processing service and
would like to improve log usefulness by including media-stream identifier.
So instead of
[mp4 @ 0x313b820] Application provided invalid, non monotonically ...
We would like to get something like
[live stream #5] [mp4 @ 0x313b820] Application provided invalid, ...
I've found similar discussion in libav-user 2012 archives but it's not
much helpful:
http://libav-users.943685.n4.nabble.com/Libav-user-Questions-about-using-libav-in-a-multi-threaded-application-td4297394.html
Now we are considering three options:
1) Register all contexts we create in context registry singleton.
Cons:
- we should also register indirectly created contexts
(e.g. codecs created by avformat_open_input)
- some indirectly created contexts probably can log before we register
it or can be created on-demand and we won't register it
2) Set thread-local media-stream identifier before calling libav functions.
Cons:
- this won't work for threads created inside context
(e.g. multi-threaded codecs)
3) Inject stream identifier into some field in context (opaque or metadata)
Cons:
- it seems that there is no reliable way to inject data into context.
Some contexts contain opaque or metadata field, others don't
contain both
- same cons as in registry option
Probably we are missing something and there are better ways to achieve
our goal?
What is the best practices of logging in multi-stream libav video
processing services?
--
С уважением, Шумский Александр
Компания NetUP
More information about the Libav-user
mailing list