QMediaPlayer的duration问题

遇到了一个坑QMediaPlayer::duration的坑.

这个坑是当你setMedia之后, 直接使用duration获取播放时长会得到0, 出错时候的代码片段如下:

void MainWindow::slotPlayAudio(const QString &audioFilePath)
{
    currentAudioFilePath_ = audioFilePath;

    player_->setMedia(QUrl::fromLocalFile(audioFilePath));
    player_->setVolume(50);
    horizontalSliderMusic->setMinimum(0);
    horizontalSliderMusic->setMaximum(player_->duration()); //这里的duration返回是0, 从而导致之后处理进度的时候出错
    player_->play();
    pushButtonPlay->setText("pause");
}

针对这个问题文档中对此描述是"The value may change across the
life time of the QMediaPlayer object and may not be available when initial playback begins"

要解决这个问题可以在响应durationChanged信号的槽中获取duration, 这个时候duration是正确的, 如此可以使用诸如下面的代码进行处理:

connect(player_, &QMediaPlayer::positionChanged, [this](qint64 position){
        if(player_->duration() != horizontalSliderMusic->maximum())
        {
            horizontalSliderMusic->setMaximum(player_->duration());
        }

        horizontalSliderMusic->setValue(position);
});
时间: 2024-10-10 13:57:29

QMediaPlayer的duration问题的相关文章

QMediaplayer详解以及简易音乐播放实现

QMediaplayer可以用于解析音频文件和视频文件,继承自QMediaObject,设计到的对象为QMediaContent.QMediaObject可以提供关于媒体内容的接入,通过URL进行初始化,同时也可以提供可以播放的媒体文件的列表,与QMediaplayer对象息息相关.使用QMediaplayer,除了需要添加必要的头文件之外,还需要在.pro(Qt的工程配置文件)添加QT += multimedia.下面解析有关QMediaplayer的相关知识. Type Informatio

UIViewController新方法的使用(transitionFromViewController:toViewController:duration:options:animations:completion:)

iOS5中,UIViewController新添加了几个方法: - (void)addChildViewController:(UIViewController *)childController NS_AVAILABLE_IOS(5_0); - (void) removeFromParentViewController NS_AVAILABLE_IOS(5_0); - (void)transitionFromViewController:(UIViewController *)fromView

transcode_step()在转码过程中对pts、dts、duration的处理

对pts.dts.duration的处理主要集中在两大函数里面 1.process_input()读入数据并处理,放到滤镜里面 2.reap_filters()从滤镜读出数据,处理后写入文件 process_input()中对时间的处理 获取数据包 ret = get_input_packet(ifile, &pkt);11通过这条语句实际里面调用 return av_read_frame(f->ctx, pkt);11将读取到的帧放到pkt中. 处理获取的pkt中的时间 //如果pkt.d

Qt5.2.0 MinGW480 release静态版编译结果、过程及QtCreator配置分享(realfan的编译方法)(configure -h可以显示帮助)(静态编译mysql插件,需要做一些其它工作,机器上要有mysql)(不编译qtwebkit,就不用安装ActivePerl了)(用到 QMediaPlayer的编译办法)

这是我编译好的静态release版,可以直接取用,7z压缩包,解压即用(感谢zzhouqianq提醒)http://yunpan.cn/QDvxdTL9LFLJP (提取码:871c)包含odbc,sqlite,没有webkit如果要自己编译,可以参考下面的过程及需要的文件一.文件准备,下面用到的文件,可以自行到相应官网下载.我在网盘上也共享了:① qt-opensource-windows-x86-mingw48_opengl-5.2.1.exehttp://yunpan.cn/QpMMWfE

Window 下 Qt5 使用QMediaplayer 进行视频播放 流播放问题

1 int main(int argc, char *argv[]) 2 { 3 QApplication a(argc, argv); 4 5 6 QWidget *widget = new QWidget; 7 widget->resize(400, 300); // 8 9 QVBoxLayout *layout = new QVBoxLayout; 10 QMediaPlayer* player = new QMediaPlayer; 11 QVideoWidget* vw = new

iOS appear for some time duration

http://stackoverflow.com/questions/9603165/show-uilabel-animated http://stackoverflow.com/questions/11661077/ios-making-an-object-on-view-controller-disappear-after-some-time http://stackoverflow.com/questions/4364880/show-label-for-a-time-duration i

C++ 静态存储周期(static storage duration)

拥有静态存储周期(static storage duration)的对象将会被一直保存到程序结束. 声明 存储类型说明符(static)用于声明对象拥有静态存储期(static storage duration). 存储类型说明符(static)只可以用于对象,函数和匿名联合体. 块作用域中不能声明静态函数,也不能声明静态函数参数. void func(static int tag){ cout<<tag<<endl; { static void nonStaticFunc(int

微信内置浏览器对于video的duration和redayState支持程度

之前接到一个在微信页面中添加背景音乐的需求,想都没想,查了几个相关的事件和属性上来就开始coding.随后悲剧了... 测试的时候很多人说,我的怎么不能加载完了就自动播放音乐呢?后来发现ios在这个方面有专门的限制,在没有用户交互的时候是不能自动播放的.后来不得已根据产品设计添加了触发播放的事件. 但是,新的需求又来了,前段时间风靡一时的朋友圈语音,也让我不少费心了,一个是自动播放,一个是对于音频的时长的获取. 这个测试数据不禁让我心头一疼啊,不知道该说点什么了. 今天联系微信相关的负责人员之后

org.openqa.selenium.WebDriverException: f.QueryInterface is not a function Command duration or timeout:

今天偶遇一个问题,运行项目时,发现这个问题: org.openqa.selenium.WebDriverException: f.QueryInterface is not a functionCommand duration or timeout: 30.17 secondsBuild info: version: '2.45.0', revision: '5017cb8e7ca8e37638dc3091b2440b90a1d8686f', time: '2015-02-27 09:10:26