2016-06-24 6 views
1

Я хочу воспроизвести видео из приложения-виджета qt. Поскольку Qt не поддерживает Qmediaplayer в android, я не могу его использовать. Также по какой-то причине тип видеовыхода QML также не работает.Qt C++ Как играть в видео от собственного игрока Android

Таким образом, я хочу позвонить на родной плеер для Android, поэтому, когда пользователь нажимает кнопку, запускается приложение. Я создал эту часть.

Я нашел информацию из разных мест, но не могу понять, как собрать все вместе.

Java-код, который запускает приложение Chooser:

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

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>()); 

выше следует запустить Chooser, но в моем случае, это делает ... НИЧЕГО, нет ошибок, нет выбора приложений, нет предупреждений, нет видео, нет ничего.

Поэтому, как я могу вызвать приложение для выбора в android с qt C++ и передать URL-адрес видео?

+0

заведите отладочный вывод в файл Java в функции playVideo (например, 'Log.Wtf («ЗДЕСЬ»);' Это поможет выяснить, где ошибка – Felix

ответ

0

У меня был QMediaPlayer, работающий с Qt Widgets.

  • Есть некоторые вещи, о которых следует помнить, что мультимедийные виджеты qt не поддерживаются, но мультимедиа (QT + = мультимедиа в файле .pro).
  • Видеоролик не отображается с помощью QVideoWidget или QAbstractVideoSurfect, его обращается прямо к поверхности андроида.
  • Я нашел какое-то видео, а некоторые нет. Того не было, звук покрыт, но нет изображения.
  • Я нашел, что 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); 
} 
+0

С тех пор, Я обнаружил, что с помощью какого-то видеопроигрывателя многое не получилось. Если вы получите класс из QAbstractVideoSurface, вы получите серию для текстур OpenGL. – user1809814

Смежные вопросы