Java Qt C++;如何通过android播放视频';美国本土选手

Java Qt C++;如何通过android播放视频';美国本土选手,java,android,qt,android-intent,video,Java,Android,Qt,Android Intent,Video,我想从我的qt widgets应用程序播放一段视频。因为Qt在android中不支持Qmediaplayer,所以我不能使用它。出于某种原因,QML videooutput类型也不起作用 因此,我想调用本机android视频播放器,这样当用户按下按钮时,应用程序选择器就会启动。我已经安排好了那部分 我从许多不同的地方找到了信息,但我不知道如何把所有的东西放在一起 启动应用程序选择器的java代码: public class videoPlayer extends org.qtproject

我想从我的qt widgets应用程序播放一段视频。因为Qt在android中不支持Qmediaplayer,所以我不能使用它。出于某种原因,QML videooutput类型也不起作用

因此,我想调用本机android视频播放器,这样当用户按下按钮时,应用程序选择器就会启动。我已经安排好了那部分

我从许多不同的地方找到了信息,但我不知道如何把所有的东西放在一起

启动应用程序选择器的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);
        }
    }
}

C++代码,调用上面的java方法< /p>

 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>());
QAndroidJniObject videoUrl=QAndroidJniObject::fromString(“file://path/to/video/1.mp4");
QAndroidJniObject::callStaticMethod(“path/to/java/src/videoPlayer”,
“播放视频”,
“(Ljava/lang/String;)V”,
videoUrl.object());
上面应该启动选择器,但在我的情况下,它确实。。。没有,没有错误,没有应用程序选择器,没有警告,没有视频,什么都没有


<> P>因此,如何在Qt C++中调用Android中的App选择器,并通过视频的URL?

< P>我已经使用QtIMAPLE与QT小部件一起工作。p>
  • 需要注意的是,qt的多媒体小部件不受支持,但多媒体是受支持的(qt+=multimedia in.pro文件)
  • 视频不使用QVideoWidget或QAbstractVideoSurfect显示,而是直接绘制到android表面
  • 我发现一些视频被播放了,有些没有。那些没有,声音被镀上,但没有图像
  • 我发现qml有效
VideoWidget::VideoWidget()
{
setPalette(Qt::透明);
setAttribute(Qt::WA_半透明背景,true);
setAttribute(Qt::WA_OpaquePaintEvent,true);
setAutoFillBackground(假);
setStyleSheet(“QWidget{背景色:透明;}”);
setAttribute(Qt::WA_NoSystemBackground);
playlist=新的QMediaPlaylist;
播放列表->添加媒体(QUrl(“http://stage.static.video.sky.com/skymedia/2016/02/116956.ism/manifest-clip-006ifst2.m3u8"));
播放列表->设置当前索引(0);
player=新的QMediaPlayer(这是QMediaPlayer::StreamPlayback);
//播放器->设置视频输出(此);
播放器->设置播放列表(播放列表);
}

我已经让QMediaPlayer使用Qt小部件

  • 需要注意的是,qt的多媒体小部件不受支持,但多媒体是受支持的(qt+=multimedia in.pro文件)
  • 视频不使用QVideoWidget或QAbstractVideoSurfect显示,而是直接绘制到android表面
  • 我发现一些视频被播放了,有些没有。那些没有,声音被镀上,但没有图像
  • 我发现qml有效
VideoWidget::VideoWidget()
{
setPalette(Qt::透明);
setAttribute(Qt::WA_半透明背景,true);
setAttribute(Qt::WA_OpaquePaintEvent,true);
setAutoFillBackground(假);
setStyleSheet(“QWidget{背景色:透明;}”);
setAttribute(Qt::WA_NoSystemBackground);
playlist=新的QMediaPlaylist;
播放列表->添加媒体(QUrl(“http://stage.static.video.sky.com/skymedia/2016/02/116956.ism/manifest-clip-006ifst2.m3u8"));
播放列表->设置当前索引(0);
player=新的QMediaPlayer(这是QMediaPlayer::StreamPlayback);
//播放器->设置视频输出(此);
播放器->设置播放列表(播放列表);
}

请在playVideo函数的java文件中创建调试输出(如
Log.Wtf(“此处”);
这将有助于找出错误所在。请在playVideo函数的java文件中创建调试输出(如
Log.Wtf(“此处”)
这将有助于找出错误所在。然后,我发现,通过某些视频播放器,很多错误都没有出现。如果从QAbstractVideoSurface派生类,则会通过OpenGL纹理系列。从那时起,我发现通过某些视频播放器,很多错误都没有出现。如果从QAbstractVideoSurface派生类,则会得到传递了一系列OpenGL纹理。