Qt实战开源项目:视频播放器

不过日子系列之视频播放器


前言

不过日子了,今天开源一个基于QT和libvlc sdk写的视频播放器,基本上按照VLC给的API功能都能实现,只不过获取总时长和更新当前已播放时间需要换算一下。


一、功能列表

1.支持打开硬盘上的任意视频添加到左侧列表,双击显示的视频名称播放。

2.支持全屏。

3.支持静音、取消静音。

4.支持音量拖大拖小。

5.显示当前播放时间和总时长。

6.支持停止、暂停、播放。

7.支持进度条拖动到指定位置播放。

8.支持最大化,最小化,全屏。

二、效果

三、主要代码

VLC是个挺好用的播放器主要调用如下:

libvlc_instance_t *pInstace = libvlc_new(0, NULL);
	if (NULL == pInstace)
	{
		return;
	}

pMedia = libvlc_media_new_path(pInstance, pstPlayUrl);

libvlc_media_player_t *pPlayer = libvlc_media_player_new_from_media(pMedia);
	if (NULL == pPlayer)
	{
		libvlc_media_release(pMedia);
		return NULL;
	}

	libvlc_media_player_stop(pPlayer);
	libvlc_media_release(pMedia);

	libvlc_media_player_set_hwnd(pPlayer, handle);
	int iRet = libvlc_media_player_play(pPlayer);
	if (0 != iRet)
	{
		libvlc_media_player_stop(pPlayer);
		libvlc_media_player_release(pPlayer);
		return NULL;
	}

获取总的时长和更新当前时长需要换算

long long llTotal = pThis->m_oMediaPlayer.SktGetDur(pThis->m_pPlayWindow);

	long long durationInSeconds = llTotal / 1000;			// 转换为秒数
	long long llDuration= durationInSeconds;
	pThis->m_lDuration	= durationInSeconds;
	long long hours		= durationInSeconds / 3600;			// 小时数
	long long minutes	= (durationInSeconds % 3600) / 60;	// 分钟数
	long long seconds	= durationInSeconds % 60;			// 秒数

	char szSktVal[32] = {0};
	if ((10 > minutes) && (seconds >= 10))
	{
		sprintf_s(szSktVal, 32, "0%lld:0%lld:%lld", hours, minutes, seconds);
	}else if ((10 > minutes) && (seconds < 10))
	{
		sprintf_s(szSktVal, 32, "0%lld:0%lld:0%lld", hours, minutes, seconds);
	}
	else if ((10 <= minutes) && (seconds < 10))
	{
		sprintf_s(szSktVal, 32, "0%lld:%lld:0%lld", hours, minutes, seconds);
	}
	else {
		sprintf_s(szSktVal, 32, "0%lld:%lld:%lld", hours, minutes, seconds);
	}

	emit pThis->SktSetSig(SKT_SIG_01, 0, szSktVal);
	Sleep(500);

	pThis->m_lCurDur = 0;

	while (true)
	{
		long long llCurTime = pThis->m_oMediaPlayer.SktGetCurDur(pThis->m_pPlayWindow);
		durationInSeconds	= llCurTime / 1000;
		hours				= durationInSeconds / 3600;
		minutes				= (durationInSeconds % 3600) / 60;
		seconds				= durationInSeconds % 60;

		memset(szSktVal, 0, 32);
		if ((10 > minutes) && (seconds >= 10))
		{
			sprintf_s(szSktVal, 32, "0%lld:0%lld:%lld", hours, minutes, seconds);
		}
		else if ((10 > minutes) && (seconds < 10))
		{
			sprintf_s(szSktVal, 32, "0%lld:0%lld:0%lld", hours, minutes, seconds);
		}
		else if ((10 <= minutes) && (seconds < 10))
		{
			sprintf_s(szSktVal, 32, "0%lld:%lld:0%lld", hours, minutes, seconds);
		}
		else {
			sprintf_s(szSktVal, 32, "0%lld:%lld:%lld", hours, minutes, seconds);
		}

		if (true == pThis->m_bStop)
		{
			if (0 != pThis->m_lCurDur)
			{
				long long llVal = pThis->m_lCurDur * pThis->m_lDuration / 100 * 1000;
				pThis->m_oMediaPlayer.SktSetCurDur(pThis->m_pPlayWindow, llVal);
				pThis->m_lCurDur = 0;
				pThis->m_bStop = false;
			}
		} else {
			emit pThis->SktSetSig(SKT_SIG_02, 0, szSktVal);
			Sleep(500);

			int iSdrVal = (durationInSeconds * 100) / llDuration;
			emit pThis->SktSetSig(SKT_SIG_03, iSdrVal, szSktVal);
			Sleep(500);
		}

		int iRet = pThis->m_oMediaPlayer.SktGetPlayState(pThis->m_pPlayWindow);
		if ((libvlc_Ended == iRet) || (libvlc_Stopped == iRet))
		{
			break;
		}

		//Sleep(1000);
	}

总结

下载地址:

https://download.csdn.net/download/tanging123/88278753

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值