制作一个播放器(一)

制作一个播放器(二)

开发前准备

开发平台:windows

开发语言:C++(Qt)

开发工具:Visual Studio 2019 cmake  Qt5.15.2

做个小广告

推荐免费学习直播课程:C/C++Linux服务器开发高级架构师学习视频

cmake版本

第一个版本,先用vlc实现

vlc各个版本下载地址:Index of /vlc/

我选择vlc版本为: vlc-3.0.16-win64

根据上面的链接,可以下载vlc开发版本。

解压完之后

取出开发需要的sdk中的include和lib

运行所需要的libvlc.dll、libvlccore.dll 还有文件夹plugins

先来一个简单的练练手

CMakeLists.txt

CMAKE_MINIMUM_REQUIRED(VERSION 3.10)SET(PRJ_NAME VlcPlayer)
PROJECT(${PRJ_NAME})IF(WIN32)SET(CMAKE_DEBUG_POSTFIX "_d")
ENDIF(WIN32)IF(NOT CMAKE_BUILD_TYPE)IF(WIN32)ELSE(WIN32)SET(CMAKE_BUILD_TYPE Debug)ENDIF(WIN32)ENDIF()IF(WIIN32)SET(CMAKE_SYSTEM_VERSION 10.0)
ENDIF(WIN32)MESSAGE(STATUS ${PROJECT_SOURCE_DIR})
MESSAGE(STATUS ${PROJECT_BINARY_DIR})
MESSAGE(STATUS ${CMAKE_BINARY_DIR})IF(WIN32)IF(CMAKE_CL_64)SET(BASELIB_PATH ${PROJECT_SOURCE_DIR}/bin/win64)ELSE(CMAKE_CL_64)SET(BASELIB_PATH ${PROJECT_SOURCE_DIR}/bin/win32)ENDIF(CMAKE_CL_64)
ENDIF(WIN32)
LINK_DIRECTORIES(${BASELIB_PATH})IF(WIN32)SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc")
ELSE(WIN32)SET(CMAKE_CXX_STANDARD 11)SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS}" -O0 -Wall -g3 -ggdb -D_DEBUG -DDEBUG)SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall -DNDEBUG")ADD_COMPILE_OPTIONS(-std=c++11)
ENDIF(WIN32)IF(WIN32)ADD_DEFINITIONS(-DUNICODE -D_UNICODE)SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi /Od")SET(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF /OPT:ICF")SET(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF /OPT:ICF")IF(CMAKE_CL_64)SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${PROJECT_SOURCE_DIR}/bin/win64/debug)SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${PROJECT_SOURCE_DIR}/bin/win64/debug)SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${PROJECT_SOURCE_DIR}/bin/win64/debug)SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/bin/win64/release)SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/bin/win64/release)SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/bin/win64/release)ELSE(CMAKE_CL_64)SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${PROJECT_SOURCE_DIR}/bin/win32/debug)SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${PROJECT_SOURCE_DIR}/bin/win32/debug)SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${PROJECT_SOURCE_DIR}/bin/win32/debug)SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/bin/win32/release)SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/bin/win32/release)SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/bin/win32/release)ENDIF(CMAKE_CL_64)
ENDIF(WIN32)INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include)IF(WIN32)IF(CMAKE_CL_64)SET(CMAKE_PREFIX_PATH "D:/Qt/5.15.2/msvc2019_64")ELSE(CMAKE_CL_64)SET(CMAKE_PREFIX_PATH "D:/Qt/5.15.2/msvc2019")ENDIF(CMAKE_CL_64)ELSE(WIN32)SET(CMAKE_PREFIX_PATH ${QTDIR}/5.15.2)
ENDIF(WIN32)ADD_SUBDIRECTORY(src/Player)

开发遇到的问题:

解决方案:在vlc.h 中添加typedef __int64 ssize_t

实现代码:

#include <QApplication>
#include "vlc/vlc.h"
#include <QDialog>
#include <QWidget>
#include <QHBoxLayout>#define qtu(str) ((str).toUtf8().constData())const char* const vlc_args[] = {"-I","dummy","--ignore-config","--rtsp-frame-buffer-size=1000000","--rtsp-tcp",
};int main(int argc, char* argv[])
{QApplication a(argc, argv);QDialog dlg;QWidget w(&dlg);QHBoxLayout* pHlayout = new QHBoxLayout(&dlg);pHlayout->addWidget(&w);dlg.resize(640, 480);w.setAttribute(Qt::WA_QuitOnClose, true);QObject::connect(&a, &QApplication::lastWindowClosed, &a, &QApplication::quit);int argc2 = sizeof(vlc_args) / sizeof(vlc_args[0]);QString strUrl = "rtsp://wowzaec2demo.streamlock.net/vod/mp4";libvlc_instance_t* pInstance = libvlc_new(argc2, vlc_args);libvlc_media_t* pVlcMedia = libvlc_media_new_location(pInstance, qtu(strUrl));libvlc_media_player_t* pVlcMediaPlayer = libvlc_media_player_new_from_media(pVlcMedia);libvlc_media_player_set_hwnd(pVlcMediaPlayer, (void *)w.winId());libvlc_media_release(pVlcMedia);libvlc_media_player_play(pVlcMediaPlayer);dlg.exec();//release libvlc_media_player_stop(pVlcMediaPlayer);libvlc_media_player_release(pVlcMediaPlayer);return 0;
}

最终运行效果

完整工程上传gitee上,码云地址

注意事项:

1、本程序为64位,需要32位的话,需要自行下载vlc开发包

2、Qt 安装路径,需要在CMakeLists.txt 中修改,bin 目录下copy64debug.bat/copy64release.bat 中的Qt路径也需要改成你本机的版本

3、生成工程:需要先在根目录下建一个文件夹,build cmake .. -G "Visual Studio 16" -A x64 这是我这个版本cmake执行的命令,上面的配好后,就能正常的生成工程了

4、运行工程前,需要执行对应的脚本,拷贝lib和运行库到对应的路径下面,生成后在运行一次,把Qt对应的依赖放到对应的路径下面。

参考文档:

最简单的基于libVLC的视频播放器https://blog.csdn.net/leixiaohua1020/article/details/42363593https://blog.csdn.net/leixiaohua1020/article/details/42363593

制作一个播放器(一)相关推荐

  1. 使用AVPlayer制作一个播放器

    代码地址如下: http://www.demodashi.com/demo/11685.html AVPlayer 是一个强大的视频播放器,可以播放多种格式的视频,缺点是没有控制界面,需要自己去实现. ...

  2. 制作一个播放器(二)

    制作一个播放器(一) 制作一个播放器(二) 接着上一章的热身,咱们继续写播放器.上一篇中咱们用的是句柄的方式来播放视频.实际开发中,我们更多的是把数据给回调出来,这样更好的去显示视频,处理视频.这期, ...

  3. 树莓派3B qt+mplayer制作音乐播放器(10)

    内容 树莓派3B qt+mplayer制作音乐播放器:播放.暂停.上一曲.下一曲,音量调节. 平台:树莓派+qt+mplayer 1.配置 qt安装见此: https://blog.csdn.net/ ...

  4. winform制作音乐播放器

    winform制作音乐播放器 本文利用C# 调用Windows自带的Windows Media Player 打造一款属于自己的音乐播放器,以供学习分享使用,如有不足之处,还请指正. 概述 Windo ...

  5. flash制作swf播放器

    AS3的 LoaderInfo 类为我们加载外部资源提供了更多的可控信息,以前制作SWF播放器的两大难题终于可以得到解决: ◦获得加载SWF的舞台大小以缩放到适合尺寸显示 LoaderInfo 的 w ...

  6. 利用python制作简单播放器

    在这里可以制作小播放器的界面,objectName 是每一个图片,图标每一个部位的名字,它们每个地方都有一个属于自己的小名字. windowtitle 可以为自己的小播放器取一个好听又可爱的名字. w ...

  7. 用Python制作简易播放器(电子钢琴) mac系统

    用Python制作简易播放器(电子钢琴) 开发环境:Python3.7 Mac OS 思路: 先根据需要设计GUI的样式,并思考需要定义什么功能 把功能写出来 把功能填入GUI之中 用曲子测试完整的程 ...

  8. 基于Arduino Uno开发板制作音乐播放器

    基于Arduino Uno开发板制作音乐播放器 本文将基于Arduino开发板实现一个音乐播放器. 利用Arduino Uno读取sd卡模块中内存卡的音乐,传输信号到扬声器进行播放. 一.项目软硬件简 ...

  9. unity制作简易播放器

    unity制作简易播放器 先上效果图 我采用的解决方案是unity内置的video player,通过UGUI-rawimage进行显示,当然也可以使用quad方式,会更简单点. 1.界面搭建 首先需 ...

最新文章

  1. 进一步理解:inline-block,vertical-align,line-height
  2. js date转成 时间字符串_秋招快要开始了,前端笔试中的坑位-JS隐式转换问题
  3. 【数据结构1.3笔记】研究内容
  4. B1023 组个最小数 (20分)
  5. 复练-软考网规-虚拟化专题
  6. GNS3 Windows安装
  7. 老李分享:单元测试的 5 个错误
  8. win7 docker centos安装mysql_CentOS 7 使用docker安装mysql
  9. ies文件 vray_VRAY IES灯与光域网的灯有什么不同 VRAY IES有什么特性
  10. cad解除块的快捷命令_47个快捷键50个CAD技巧,快收藏起来
  11. Paused before potential out-of-memory crash页面崩溃
  12. java生成树形Excel_java poi导出树形结构到excel文件
  13. win10下的linux占用大小,详解Win10系统上使用Linux之前要知道的几件事
  14. Virus_JS3_PyAnalysisAndSummary
  15. python地图匹配_基于隐马尔科夫模型(HMM)的地图匹配(Map-Matching)算法
  16. R语言 tidyverse 之数据处理:dplyr (中)
  17. 如何学习安卓软件开发?(转自知乎)
  18. 常见设计模式快速记忆
  19. 微信论坛交流小程序系统毕业设计毕设(8)毕业设计论文模板
  20. 一文带你了解Kafka【一看就懂】

热门文章

  1. 端口号占用问题 serveral ports(8080,8009) are already in use
  2. sql sever 数据类型 text 和 varchar 在 equal to 运算符中不兼容。
  3. 2022-2028全球飞机抬头显示(飞机HUD)行业调研及趋势分析报告
  4. Java File.listFiles方法具有什么功能呢?
  5. 京东商业提升事业部广告质量部招聘2023届算法实习生
  6. Chrome下载官网
  7. 项目计划管理软件:GanttProject
  8. [答疑]运维记录台账本子识别为一个现状业务实体,妥否
  9. 国外Essay写作能力怎么正确提升?
  10. 攻防世界web新手- fileinclude宜州网信办