Multimedia(二:一些参数)

上一节实现了简单的媒体播放,这节在上一节的基础上完善一下!

  • 当播放媒体时可以通过MediaPlayer元素的volume属性来控制音量
  • duration与position属性可以用来创建一个进度条。如果seekable属性为true,当拨动进度条时可以更新position属性
  • mediaObject属性的notifyInterval属性改变可以设置每个position之间更新的毫秒数,增加用户界面的平滑度。
  • 使用status属性来监听播放器,这个属性是一个枚举,它枚举了播放器可能出现的状态:
  1. MediaPlayer.UnknownStatus - 未知状态
  2. MediaPlayer.NoMedia - 播放器没有指定媒体资源,播放停止
  3. MediaPlayer.Loading - 播放器正在加载媒体
  4. MediaPlayer.Loaded - 媒体已经加载完毕,播放停止
  5. MediaPlayer.Stalled - 加载媒体已经停止
  6. MediaPlayer.Buffering - 媒体正在缓冲
  7. MediaPlayer.Buffered - 媒体缓冲完成
  8. MediaPlayer.EndOfMedia - 媒体播放完毕,播放停止
  9. MediaPlayer.InvalidMedia - 无法播放媒体,播放停止
  • 调用play,pause或者 stop将会切换状态
  • 当前的播放状态可以使用playbackState属性跟踪,
  • 这个值可能是MediaPlayer.PlayingState,MediaPlayer.PasuedState或者 MediaPlayer.StoppedState
  • 使用autoPlay属性,MediaPlayer在source属性改变时将会尝试进入播放状态。
  • 类似的属性autoLoad将会导致播放器在source属性改变时尝试加载媒体。
  • loops属性控制source将会被重复 播放多少次,设置属性为MediaPlayer.Infinite将会导致不停的重播
import QtQuick 2.9
import QtQuick.Window 2.2
import QtMultimedia 5.0

Window {
    visible: true
    width: 770
    height: 480
    title: qsTr("Hello World")
    
    Item {
        id: root
        anchors.fill: parent
        
        MediaPlayer{
            id:player
            // 无限循环
            loops: MediaPlayer.Infinite
            source:"file:///E:/QT_Object/Multimedia/test.mp4"
        }
        
        VideoOutput{
            id:output
            anchors.fill: parent
            source: player
        }
        
        // 进度条矩形框
        Rectangle {
            id: progressBar
            
            anchors.left: parent.left
            anchors.right: parent.right
            anchors.bottom: parent.bottom
            anchors.margins: 100
            
            height: 30
            
            color: "blue"
            
            Rectangle {
                anchors.left: parent.left
                anchors.top: parent.top
                anchors.bottom: parent.bottom
                border.width: 2
                border.color: "blue"
                
                // 获得当前的播放进度
                // 显示当前播放进度
                // 和 playser.position 绑定了
                // playser.position 更新的话 width 就会更新
                width: player.duration > 0?
                           parent.width*player.position/player.duration : 0
                
                color: "red"
            }
            
            MouseArea {
                anchors.fill: parent
                
                onClicked: {
                    if (player.seekable) {
                        // 更新视频播放进度
                        player.seek(player.duration * mouse.x / width)
                    }
                }
            }
        }
        
        // 利用 onMediaObjectChanged 设置更新进度的频率
        Connections {
            target: player
            onMediaObjectChanged: {
                if (player.mediaObject) {
                    player.mediaObject.notifyInterval = 50;
                }
            }
        }
        
        // 利用 onCompleted 设置更新进度的频率
        Component.onCompleted: {
            player.play();
            if (player.mediaObject) {
                player.mediaObject.notifyInterval = 50;
            }
        }
    }
}

在这个 demo 里面加入了进度条、循环播放、player 更新 position 的频率!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sssnial-jz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值