qml LAVFSplitter播放器

写好qml播放代码后运行时一直报DirectShowPlayerService::doRender: Unresolved error code 80040218 
找到原因是QtMultimedia 使用的系统默认的音视频编/解码器,如果系统没有安装与qt对应的音视频编解码器的话,就会报以上错误。
解决方案:

安装LAVFSplitter-0.3,用管理员权限运行CMD,切换到LAVFSplitter-0.3目录后运行安装安装脚本即可(注意32和64版本问题)。


qml代码:

import QtQuick 2.4
import QtQuick.Controls 1.3
import QtQuick.Window 2.2
import QtQuick.Dialogs 1.2
import QtMultimedia 5.4

ApplicationWindow {
    title: qsTr("LAVPlayer")
    width: 640
    height: 480
    visible: true

    Rectangle {
        color: "black"
        anchors.fill: parent

        MediaPlayer {
            id: mediaPlayer
            source: "file:///e:/dome.mp4"
            autoPlay: true
        }

        VideoOutput {
            id: video
            anchors.fill: parent
            source: mediaPlayer
        }
    }
//使用Video播放
//    Video {
//        id: mediaPlayer
//        anchors.fill: parent
//        source: "file:///e:/dome.mp4"

//        MouseArea {
//            anchors.fill: parent
//            onClicked: {
//                mediaPlayer.play()
//            }
//        }

//        focus: true
//        Keys.onSpacePressed: mediaPlayer.playbackState == MediaPlayer.PlayingState ? mediaPlayer.pause() : mediaPlayer.play()
//        Keys.onLeftPressed: mediaPlayer.seek(mediaPlayer.position - 5000)
//        Keys.onRightPressed: mediaPlayer.seek(mediaPlayer.position + 5000)
//    }
//播放进度条
    Rectangle {
        id: progressBar
        anchors.left: parent.left
        anchors.right: parent.right
        anchors.bottom: parent.bottom
        anchors.margins: 0
        height: 10
        color: "lightGray"

        Rectangle {
            anchors.left: parent.left
            anchors.top: parent.top
            anchors.bottom: parent.bottom
            width: mediaPlayer.duration>0?parent.width*mediaPlayer.position/mediaPlayer.duration:0
            color: "darkGreen"
        }

        MouseArea {
            property int pos
            anchors.fill: parent

            onClicked: {
                if (mediaPlayer.seekable)
                    pos = mediaPlayer.duration * mouse.x/width
                mediaPlayer.seek(pos)
            }
        }
    }
//选择播放文件窗口
    FileDialog {
        id: fileDialog
        title: "Please choose a file"
        onAccepted: {
            path = fileDialog.fileUrls[0].toString();
            console.log("You chose: ",path)
            mediaPlayer.source = path
        }
        onRejected: {
            console.log("Canceled")
        }
    }

    menuBar: MenuBar {
        Menu {
            title: qsTr("&File")
            MenuItem {
                text: qsTr("&Open")
                onTriggered: {
                    fileDialog.open()
                }
            }
            MenuItem {
                text: qsTr("E&xit")
                onTriggered: Qt.quit();
            }
        }
    }

    MessageDialog {
        id: messageDialog
        title: qsTr("May I have your attention, please?")

        function show(caption) {
            messageDialog.text = caption;
            messageDialog.open();
        }
    }

//测试代码
//    Item {
//        anchors.fill: parent
//        MediaPlayer {
//            id: mediaplayer
//            source: "file:///e:/dome.mp4"
//            autoPlay: true
//        }

//        VideoOutput {
//            anchors.fill: parent
//            source: mediaplayer
//        }

//        MouseArea {
//            id: playArea
//            anchors.fill: parent
//            onPressed: mediaplayer.play();
//        }
//    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值