Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Qt as streaming video backend/frontend



  • Hi,
    Is it reasonable to use Qt for developing scalable video streaming server software and android/iphone video streaming clients?

    Are Qt networking libraries efficient for multi threaded TCP server?

    What streaming libraries are easy to implement and efficient for h264/h265 codec on this purpose?


  • Lifetime Qt Champion

    Hi,

    You likely want to separate things a bit. You can use for example GStreamer for the streaming itself and pilot it from your GUI built with Qt.



    1. What do you mean under the terms "Frontend/Backend"?
    • One way - Backend is server solution that is streaming video and frontend is your application:
      ** Server: depend on what you want to be streaming. There are a lot of solutions for different purpose: surveillance, TV, video-conference and etc. It's might be solution written on C/C++, Erlang, Java.
      ** Application based on Qt:
      *** First question: desktop or mobile. Briefly mobile platforms has a lot of restrictions in available formats on native side (QT media used native solutions, read iOS or Android available formats). If you need universal solution for any platform or device START FROM MOBILE, if it's working with mobile it will be working everywhere.
      *** If you need any special format or not included in native - ONLY one way LibVLC, there are few Qt VLC examples but all of them outdated (2 month ago I've been investigating this issue, I've been choosing LibVLC because of unsupported by iOS video stream h264/TS but I am developing it on Objective-C (Example video and code sample), I haven't solved separate building LibVLC like static library yet for Qt)

    • Second way - Backend is libraray in QT application:
      ** Totally depend on video format and restriction from platforms, read specifications on platforms and Qt Media (Here the thread originated by me)

    1. The step-by-step guidance looks like:
    • Define video format IN-PRECISE (h264 has a lot of subformats)
    • Check native specification for platforms where you going to be using your application
    • Check Qt specification for platform
    • If your platform doesn't OK with your format - use LibVLC
    • If your format doesn't OK with LibVLC - write you own codec and add it to LibVLC functionality (there are mechanism of adding own codecs to LibVLC)
    1. About Qt for servers - I AM VERY doubt of it because of performance requirements on server side. If you not going to handle a lot of connections - might be using Qt. BUT my opinion for streaming server use Erlang (super fast in developing, but slower than pure C/C++) or pure C/C++ (extreme performance but slow in developing). Java if you need very fast start for your project - there are a lot of solutions but they are not fitted for performance, only like solution for small company (extremely expensive in maintenance if became big project because of Java).


  • Hi, in order to create movies (server side, each camera or video source with a specific thread) from live cameras I'm using ffmpeg that can create audio and video movies. The performance are good.
    For lan streaming I'm still using ffmpeg libraries or a custom protocol similar to mjpeg.



  • Thanks for info.


Log in to reply