Sunday, June 12, 2016

Binaries for POT 5.3.0-beta1 on Qt 5.6.0 and Experimental Accelerated QtWebKit

This is an experimental version of POT that includes a few new features. The driver now includes an experimental version of playback of remote content including proper buffering of the media and the QtWebKit library is able to play videos using proper hardware acceleration.

Features

The driver can now be used through the regular Qt/QML interface to play content over protocols different from file://. I only tested HTTP but others should be available.
This new feature allowed me to also implement a new player in QtWebKit using the POT driver to stream content to the regular Qt QWebView. Unfortunately I could only find the time to implement this in the WebKit 1 branch, not in WebKit 2 which requires more work. This makes the implementation hardly useful, but it is a start. If anyone wanted to contribute this is where to start. This video shows the new implementation in action:
As QtWebKit now uses the GPU properly, I could also implement a YouTube player app using the same QWebView with just a few lines of code of regular Qt code:

In the video you can also see an application I wrote to implement a YouTube fullscreen player using the YouTube iframe API. Such a sample app is also included in the package.
Of course the real target would be to implement this in QtWebEngine. I was never able to find a version of QtWebEngine with video acceleration for Pi. Anyone who knows one?


Package

The package now includes:

  • build_valgrind.tar: a build of valgrind to analyse your code;
  • libpiomxtextures_qmlutils.so: QML plugin to provide a video probe in QML;
  • piomxtextures_browser_we: an application that tests the QtWebEngine module (run passing a URL, ./piomxtextures_browser_we http://www.youtube.com);
  • piomxtextures_browser_wk: an application that tests the QtWebKit module:
    • you can run on WebKit 1 like ./piomxtextures_browser_wk http://www.youtube.com;
    • or you can run on WebKit 2 like ./piomxtextures_browser_wk --wk2 http://www.youtube.com;
  • piomxtextures_pocplayer: a sample QML player;
  • piomxtextures_pocplayer_yt: a youtube sample player (run passing a video ID like ./piomxtextures_pocplayer_yt 71UvXMzVgx4);
  • qtdeps.tar: the usual libs needed by Qt and POT;
  • Qt-rasp2-5.6.0.tar: a build of Qt 5.6.0 stable including:
    • regular Qt 5.6.0 modules;
    • untested bluetooth module including BLE support;
    • untested MySQL plugin;
    • untested QtFtp module;
    • untested Qt hat tools module;
    • QtWebEngine;
    • QtWebKit.
Please report any bug you find on github. Don't use in production. Sources will be available shortly. Have fun! ;-)

Download POT 5.3.0-beta1 for Raspbian Jessie Lite Pi2 (also tested on Pi3) here (md5: edbe0ad2a552a5c8280e3876d16b237d).

45 comments:

  1. Hello there,

    I can't seem to be able to download and uncompress the file properly. Have you considered using GitHub to release those tarballs and using a more common format?

    ReplyDelete
    Replies
    1. Just to clarify, on a Pi with lrzip 0.6 I'm getting this:

      pi@pi3:~/Downloads $ lrunzip -t PiOmxTextures_5.3.0-beta1_pi2_jessiel_5.6.0.tar.lrz
      Decompressing...
      Illegal instruction ZPAQ 1:0%

      Delete
    2. I'm sharing many gigabytes for free. Use a pc to decompress, not your pi.

      Delete
  2. You are the best Luca!!!
    I'm in vacations now, but as soon as I arrive work I'll test that mysql plugin.

    ReplyDelete
  3. I'm going to try the stream feature on this version :)

    PS: why do you upload on 360? https://meocloud.pt/ per example gives you 16GB with very nice speeds.

    ReplyDelete
    Replies
    1. Yes streaming is only supported here. Any version before this is not good for streaming.

      Delete
    2. I installed these binaries and the examples are working.
      Now on my host I create a http stream with a video I can play on your examples (big buck bunny h264 720p). I can open the stream on my host with ffplay http://192.168.1.74:8080 so how can I use it on your player?

      Delete
    3. This is a library, so you would need to write the player yourself in Qt. Otherwise you can try POCPlayer, which is a test app, but you'll probably need to modify it a bit as it probably expects a video extension.

      Delete
    4. Can you upload the source of pot 5.3?

      Delete
    5. Will be uploaded soon. But at the moment this is just a beta version.

      Delete
    6. I can play a stream with omxplayer with the following cmd line "omxplayer -o hdmi --win 0,0,800,480 --live rtsp://192.168.1.74:8554/" so create a stream server with VLC and play it with omxplayer is possible what means it should also work with your library :)

      Delete
    7. I do not understand your point sorry.

      Delete
    8. It is nothing special. I was sharing that I was able to open a strem video, I had created on host using VLC, with omxplayer and since you use omx it means I'll be able to open that stream on a qml app using POT, right?

      Delete
    9. Yes, POT uses omx. But this does not mean everything is supposed to magically work without code. Did you try this version of the library?

      Delete
    10. To be clearer: POT uses omx like omxplayer does, IT DOES NOT USE omxplayer binary.

      Delete
    11. I tried but only the samples because I don't know which input should I give to the POT to opwn the stream. I'm waiting for the samples sources to try understand that.

      Delete
    12. Create a regular Qt application using the public API.

      Delete
    13. It does seem to work for me. Created a stream with VLC, opened it with QML samples in the repo or with POCPlayer. Everything worked as expected.

      Delete
    14. Can you share what kind of stream did you create and what URL did you use as argument?

      Delete
    15. Have a look at the new article. See if it helps.

      Delete
  4. Hi lucas and thanks for your share !
    Your examples work fine and i can deploy from my host pc (kubuntu 15.10 64) to the rasp with qt5.6 but i have a problem with another library.
    I have downloaded and compile openZwave and enocean stack on the raspberry (pi 2). The examples give with this 2 library work fine on pi.
    Now i'm trying to add this library in my project (with qt5.6 and your image from my host pc). When i add this library to my project, for example in my .pro file :

    unix:!macx: LIBS += -L$$PWD/../../../../opt/rpi/sysroot/usr/local/lib/ -lopenzwave

    INCLUDEPATH += $$PWD/../../../../opt/rpi/sysroot/usr/local/include/openzwave
    DEPENDPATH += $$PWD/../../../../opt/rpi/sysroot/usr/local/include/openzwave

    when i'm trying to build my project i have this error :

    /opt/rpi/sysroot/usr/local/lib/libopenzwave.so:-1: erreur : undefined reference to `std::__throw_out_of_range_fmt(char const*, ...)@GLIBCXX_3.4.20'

    i have find a thread on the web that talk about this :
    http://stackoverflow.com/questions/33239805/libopencv-calib3d-undefined-reference-to-std-throw-out-of-range-fmtchar-co
    --> see the last post

    apparently it's a problem with the version of the gcc toolchain version. I have downloaded the lasted version of raspi toolchain from github to have gcc 4.9.3 but same result during the build.
    Do you have an idea how to resolve this please ?

    ReplyDelete
    Replies
    1. Yes likely a gcc version issue. Gcc crossbuilder 4.9 is not working properly. Possible solution: rebuild those two libs with with gcc 4.8.

      Delete
  5. Hello Luca,

    Any plan to share your cross build environment ? I'm not (yet) using POT, but I'm having troubles building the entire Qt modules, especially qtwebengine !

    ReplyDelete
    Replies
    1. I'm sorry, it would take too long. It is the reason why I provide the modules in the package.

      Delete
    2. Probably community might help with this, I'm very interested in this information and wanna help in any way it can be useful.

      Delete
    3. Can you give a tip how to cross compile qmake utility and the like?

      Delete
  6. I just tested qtbluetooth module and qtsensehat and it work fine ! great work !

    ReplyDelete
  7. Any tips for decompressing the .lrz file on OS X, please? I've only got OS X or ARM Linux available.

    ReplyDelete
    Replies
    1. I commonly use it on osx and linux. https://trac.macports.org/browser/trunk/dports/archivers/lrzip/Portfile

      Delete
  8. Can someone please put me out of my misery and tell me how to decompress this file on OS X, please?

    ReplyDelete
    Replies
    1. Doesn't seem to be very difficult: https://trac.macports.org/browser/trunk/dports/archivers/lrzip/Portfile.

      Delete
  9. Hi!
    Thanks a lot for your work!!!

    How can I pass params to omx and/or ffmpeg?

    I can successfully run

    ./omxplayer --avdict 'rtsp_transport:tcp' rtsp://

    and see video.

    But pocplayer does not (obviously) set TCP param, so I see no video. Local files played correctly.

    How can I pass params?

    Thanks again!!!!

    ReplyDelete
    Replies
    1. ./omxplayer --avdict 'rtsp_transport:tcp' rtsp://x.x.x.x/path-to-video-stream/

      Delete
    2. I'm sorry but I didn't implement anything like this. You can only interface with the decoder using Qt API (and not everything is implemented). If you need something like this you need to implement that yourself.

      Delete
  10. This comment has been removed by the author.

    ReplyDelete
  11. Hey, Hello

    I work at a Digital Signage company and we use Raspberry Pi as video player. I'm able to play html5 videos inside a iframe but it use more then 100% of the CPU and the movies are not smooth. We use electron to build our app (it uses chromium engine) and i'm thinking if your solution maybe will help us a little bit. I'm asking because your solution is a little bit complicated to me (it security guy hehe) so i need to know if it will actually help us before start to learn how to do. Thanks and regards from Brazil :P

    ReplyDelete
    Replies
    1. This comment has been removed by the author.

      Delete
    2. Sorry, but my solution at the moment only works in OpenGL or QML scenes. This version includes a WebKit1 patched build that uses it to render efficiently, but WebKit1 is almost useless for production applications nowadays.

      Delete
  12. Hello!
    Download POT 5.3.0-beta1 for Raspbian Jessie Lite Pi2 (also tested on Pi3) here (extraction code is: adb1, md5: edbe0ad2a552a5c8280e3876d16b237d).

    The link not working now...

    ReplyDelete
    Replies
    1. I'm sorry, the service has closed. I'll re-upload somewhere else.

      Delete
  13. Hello!

    I have compiled and tested your project.
    I try to use your video component in qml script on raspberry pi2 and pi3.
    It seems to me that qt5.6 draws the qml scene in eglfs (without x) very slow.
    I have created one layer with fullhd video (10-15mbits) and 20 transparent pictures 150x150.
    In this case video is twitching (bad quality). For 10 pictures quality is good.

    Is it true, that qt is to slow on raspberry?


    ReplyDelete
  14. Hello Sir
    May i know what it the password for the mega link above. Thank you.

    https://goo.gl/nZ9VJG

    ReplyDelete