Qt C ++如何通过Android的原生播放器播放视频

时间:2016-06-24 07:53:45

标签: java android qt android-intent video

我想从我的qt小部件应用程序播放视频。由于Qt不支持Android中的Qmediaplayer我无法使用它。由于某些原因,QML视频输出类型也不起作用。

因此,我想调用原生的Android视频播放器,这样当用户按下按钮时,应用选择器就会启动。我已经设置了那部分。

我从很多不同的地方找到了信息,但无法弄清楚如何把所有东西放在一起。

启动app选择器的java代码:

   public class videoPlayer extends org.qtproject.qt5.android.bindings.QtActivity
{
    private static videoPlayer instance;

    videoPlayer() {
        instance = this;
    }

    public void playVideo(String newVideoPath) {
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(newVideoPath));
        intent.setDataAndType(Uri.parse(newVideoPath), "video/*");
        // Verify that the intent will resolve to an activity
        if (intent.resolveActivity(getPackageManager()) != null) {
            startActivity(intent);
        }

        String title = "play video with";
        // Create intent to show the chooser dialog
        Intent chooser = Intent.createChooser(intent, title);

        // Verify the original intent will resolve to at least one activity
        if (intent.resolveActivity(getPackageManager()) != null) {
            startActivity(chooser);
        }
    }
}

应该调用上述java方法的C ++代码

 QAndroidJniObject videoUrl = QAndroidJniObject::fromString( "file://path/to/video/1.mp4");
    QAndroidJniObject::callStaticMethod<void>("path/to/java/src/videoPlayer",
                                       "playVideo",
                                       "(Ljava/lang/String;)V",
                                       videoUrl.object<jstring>());

上面应该启动选择器,但在我的情况下,它确实......没有错误,没有错误,没有app选择器,没有警告,没有视频,没有任何东西。

因此,如何从qt c ++调用android中的应用选择器并传递视频的网址?

1 个答案:

答案 0 :(得分:0)

我让QMediaPlayer使用Qt Widgets。

  • 有些事情需要注意qt的多媒体小部件不受支持,但多媒体是(QT + = .pro文件中的多媒体)。
  • 视频不是使用QVideoWidget或QAbstractVideoSurfect显示的,而是直接绘制到Android界面。
  • 我发现了一些视频,有些则没有。那些没有的,声音镀,但不是没有图像。
  • 我发现qml有效。
VideoWidget::VideoWidget()
{
    setPalette(Qt::transparent);
    setAttribute( Qt::WA_TranslucentBackground, true );
    setAttribute( Qt::WA_OpaquePaintEvent, true );
    setAutoFillBackground(false);
    setStyleSheet("QWidget{background-color: transparent;}");
    setAttribute(Qt::WA_NoSystemBackground);

    playlist = new QMediaPlaylist;
    playlist->addMedia(QUrl("http://stage.static.video.sky.com/skymedia/2016/02/116956.ism/manifest-clip-006ifst2.m3u8"));
    playlist->setCurrentIndex(0);

    player = new QMediaPlayer (this, QMediaPlayer::StreamPlayback);
    //player->setVideoOutput(this);
    player->setPlaylist(playlist);
}