Playing Videos from C++ using QML on Android does not work either



  • Since QVideoWidget is not supported on Android I have created a QML file which contains a MediaPlayer instance and a VideoOutput. Using C++ I set the source to a path with assets:/ on Android. I show the widget with a green background. Unfortunately, the video is played but only sound is played no image.

    This is my QML script:

    import QtQuick 2.0
    import QtQuick.Controls 1.2
    import QtMultimedia 5.6
    
    Rectangle {
        width: 200
        height: 200
        color: "black"
    
        MediaPlayer {
            id: player
            objectName: "player"
            audioRole: MediaPlayer.GameRole
            source: "assets:/vampir/vampir.avi"
            //autoPlay: true
        }
    
        VideoOutput {
            id: videoOutput
            objectName: "videoOutput"
            source: player
            anchors.fill: parent
        }
    }
    

    Here is the code I created the view:

    m_view = new QQuickView();
    
    	m_videoWidget = QWidget::createWindowContainer(m_view, this);
    	m_videoWidget->setFocusPolicy(Qt::TabFocus);
    
    	// TEST to check if the widget appears at all
    	QPalette pal;
    	pal.setColor(QPalette::Background, Qt::green);
    	m_videoWidget->setPalette(pal);
    
    	m_view->setSource(QUrl("qrc:/videoplayer.qml"));
    
    	qDebug() << "QML Errors:";
    	foreach (QQmlError error, m_view->errors())
    	{
    		qDebug() << error.description();
    	}
    
    	if (m_view != nullptr)
    	{
    		m_item = m_view->rootObject();
    		qDebug() << "Children size: " << m_item->children().size();
    
    		if (m_item != nullptr)
    		{
    			m_mediaPlayer = m_item->findChild<QObject*>("player");
    		}
    	}
    

    Here is the adb output:

    08-20 17:16:06.044  1232  1267 D NuPlayerDriver: start(0xae48c660), state is 4, eos is 0
    08-20 17:16:06.044  1232  3154 I GenericSource: start
    08-20 17:16:06.048  1232  3162 I MediaPlayerService: MediaPlayerService::getOMX
    08-20 17:16:06.048  1232  3162 I OMXClient: MuxOMX ctor
    08-20 17:16:06.048  1229  1248 I OMXMaster: makeComponentInstance(OMX.google.raw.decoder) in mediacodec process
    08-20 17:16:06.049  1229  1229 E OMXNodeInstance: setConfig(4cd002d:google.raw.decoder, ConfigPriority(0x6f800002)) ERROR: Undefined(0x80001001)
    08-20 17:16:06.049  1232  3162 I ACodec  : codec does not support config priority (err -2147483648)
    08-20 17:16:06.049  1232  3162 I MediaCodec: MediaCodec will operate in async mode
    08-20 17:16:06.051  1232  3160 D AudioTrack: Client defaulted notificationFrames to 11264 for frameCount 22528
    08-20 17:16:06.053  1231  1817 I SampleTable: There are reordered frames present.
    08-20 17:16:06.053  1232  3158 D NuPlayerDriver: notifyListener_l(0xafca8ba0), (5, 1280, 720), loop setting(0, 0)
    08-20 17:16:06.053  1232  3158 D NuPlayerDriver: notifyListener_l(0xafca8ba0), (1, 0, 0), loop setting(0, 0)
    08-20 17:16:06.053  2940  2940 D MediaPlayer: setSubtitleAnchor in MediaPlayer
    08-20 17:16:06.054  1232  1648 D NuPlayerDriver: start(0xafca8ba0), state is 4, eos is 0
    08-20 17:16:06.054  1232  3158 I GenericSource: start
    08-20 17:16:06.058  1232  3154 D NuPlayerDriver: notifyListener_l(0xae48c660), (6, 0, 0), loop setting(0, 0)
    08-20 17:16:06.058  1232  3161 I NuPlayerDecoder: [audio] saw output EOS
    08-20 17:16:06.060  1231  1817 I SampleTable: There are reordered frames present.
    08-20 17:16:06.062  1232  3169 I MediaPlayerService: MediaPlayerService::getOMX
    08-20 17:16:06.062  1232  3171 I MediaPlayerService: MediaPlayerService::getOMX
    08-20 17:16:06.062  1232  3169 I OMXClient: MuxOMX ctor
    08-20 17:16:06.062  1232  3171 I OMXClient: MuxOMX ctor
    08-20 17:16:06.062  1229  1646 I OMXMaster: makeComponentInstance(OMX.google.aac.decoder) in mediacodec process
    08-20 17:16:06.062  1229  1229 I OMXMaster: makeComponentInstance(OMX.google.h264.decoder) in mediacodec process
    08-20 17:16:06.073  1229  1646 E OMXNodeInstance: setConfig(4cd002e:google.aac.decoder, ConfigPriority(0x6f800002)) ERROR: Undefined(0x80001001)
    08-20 17:16:06.073  1232  3171 I ACodec  : codec does not support config priority (err -2147483648)
    08-20 17:16:06.073  1232  3171 I MediaCodec: MediaCodec will operate in async mode
    08-20 17:16:06.074  1229  3172 I SoftAAC2: Reconfiguring decoder: 0->48000 Hz, 0->6 channels
    08-20 17:16:06.077  1232  3166 D AudioTrack: Client defaulted notificationFrames to 8169 for frameCount 24508
    08-20 17:16:06.077  1232  3158 D NuPlayerDriver: notifyListener_l(0xafca8ba0), (6, 0, 0), loop setting(0, 0)
    08-20 17:16:06.093  1232  3168 I MediaCodec: [OMX.google.h264.decoder] setting surface generation to 1261570
    08-20 17:16:06.096  1229  1646 W OMXNodeInstance: [4cd002f:google.h264.decoder] component does not support metadata mode; using fallback
    08-20 17:16:06.096  1232  3169 E ACodec  : [OMX.google.h264.decoder] storeMetaDataInBuffers failed w/ err -1010
    08-20 17:16:06.097  1229  1248 E OMXNodeInstance: setConfig(4cd002f:google.h264.decoder, ConfigPriority(0x6f800002)) ERROR: Undefined(0x80001001)
    08-20 17:16:06.097  1232  3169 I ACodec  : codec does not support config priority (err -2147483648)
    08-20 17:16:06.097  1229  1229 E OMXNodeInstance: setConfig(4cd002f:google.h264.decoder, ConfigOperatingRate(0x6f800003)) ERROR: Undefined(0x80001001)
    08-20 17:16:06.097  1232  3169 I ACodec  : codec does not support config operating rate (err -2147483648)
    08-20 17:16:06.097  1232  3168 I MediaCodec: MediaCodec will operate in async mode
    08-20 17:16:06.132  1232  3168 D MediaCodec: [OMX.google.h264.decoder] setting dataspace on output surface to #104
    08-20 17:16:06.133  1232  3158 D NuPlayerDriver: notifyListener_l(0xafca8ba0), (5, 1280, 720), loop setting(0, 0)
    08-20 17:16:06.133  1232  3158 D NuPlayerDriver: notifyListener_l(0xafca8ba0), (200, 3, 0), loop setting(0, 0)
    08-20 17:16:06.134  2940  3156 W MediaPlayer: info/warning (3, 0)
    08-20 17:16:06.139  1232  3168 D SoftwareRenderer: setting dataspace on output surface to #104
    08-20 17:16:06.153  1224  1262 D AudioFlinger: mixer(0xa8583e00) throttle end: throttle time(1)
    08-20 17:16:06.224  1224  1262 D AudioFlinger: mixer(0xa8583e00) throttle end: throttle time(1)
    08-20 17:16:06.438  1224  1262 D AudioFlinger: mixer(0xa8583e00) throttle end: throttle time(1)
    08-20 17:16:06.569  1232  3154 D NuPlayerDriver: notifyListener_l(0xae48c660), (2, 0, 0), loop setting(0, 0)
    08-20 17:16:06.570  1232  1267 D NuPlayerDriver: stop(0xae48c660)
    08-20 17:16:06.570  1232  1267 D NuPlayerDriver: notifyListener_l(0xae48c660), (8, 0, 0), loop setting(0, 0)
    08-20 17:16:06.571  1232  1648 D NuPlayerDriver: reset(0xae48c660) at state 8
    08-20 17:16:06.571  1232  3154 W AMessage: failed to post message as target looper for handler 0 is gone.
    08-20 17:16:06.572  1232  3154 D NuPlayerDriver: notifyResetComplete(0xae48c660)
    08-20 17:16:06.572  1232  1267 D NuPlayerDriver: reset(0xae48c660) at state 0
    08-20 17:16:06.642  1232  3199 D NuPlayerDriver: notifyListener_l(0xafca8e40), (1, 0, 0), loop setting(0, 0)
    08-20 17:16:06.642  2940  2940 D MediaPlayer: setSubtitleAnchor in MediaPlayer
    08-20 17:16:06.650  1232  1267 D NuPlayerDriver: start(0xafca8e40), state is 4, eos is 0
    08-20 17:16:06.650  1232  3199 I GenericSource: start
    08-20 17:16:06.702  1232  3204 I MediaPlayerService: MediaPlayerService::getOMX
    08-20 17:16:06.702  1232  3204 I OMXClient: MuxOMX ctor
    08-20 17:16:06.702  1229  1248 I OMXMaster: makeComponentInstance(OMX.google.raw.decoder) in mediacodec process
    08-20 17:16:06.702  1229  1646 E OMXNodeInstance: setConfig(4cd0030:google.raw.decoder, ConfigPriority(0x6f800002)) ERROR: Undefined(0x80001001)
    08-20 17:16:06.702  1232  3204 I ACodec  : codec does not support config priority (err -2147483648)
    08-20 17:16:06.703  1232  3204 I MediaCodec: MediaCodec will operate in async mode
    08-20 17:16:06.708  1232  3202 D AudioTrack: Client defaulted notificationFrames to 11264 for frameCount 22528
    08-20 17:16:06.708  1232  3199 D NuPlayerDriver: notifyListener_l(0xafca8e40), (6, 0, 0), loop setting(0, 0)
    08-20 17:16:06.804  1224  1262 D AudioFlinger: mixer(0xa8583e00) throttle end: throttle time(2)
    08-20 17:16:07.126  1224  1262 D AudioFlinger: mixer(0xa8583e00) throttle end: throttle time(2)
    08-20 17:16:07.572  1224  1262 D AudioFlinger: mixer(0xa8583e00) throttle end: throttle time(1)
    08-20 17:16:07.706  1224  1262 D AudioFlinger: mixer(0xa8583e00) throttle end: throttle time(2)
    08-20 17:16:07.733  1232  3203 I NuPlayerDecoder: [audio] saw output EOS
    08-20 17:16:08.190  1224  1262 D AudioFlinger: mixer(0xa8583e00) throttle end: throttle time(1)
    08-20 17:16:08.261  1224  1262 D AudioFlinger: mixer(0xa8583e00) throttle end: throttle time(1)
    08-20 17:16:08.381  1224  1262 D AudioFlinger: mixer(0xa8583e00) throttle end: throttle time(1)
    08-20 17:16:08.942  1224  1262 D AudioFlinger: mixer(0xa8583e00) throttle end: throttle time(1)
    08-20 17:16:09.003  1232  3199 D NuPlayerDriver: notifyListener_l(0xafca8e40), (2, 0, 0), loop setting(0, 0)
    

    Is it even possible to do what I want to achieve? I'd like to avoid using another plugin or API like suggested here: http://stackoverflow.com/questions/38979135/qmediaplayer-on-android

    But in the end I need to play videos on Android using my Qt application and I have to react to the changing states with custom slots.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.