课题_基于VLC的播放器开发

合集下载

毕设论文-基于VC 的TS 流实时视频播放器设计

毕设论文-基于VC 的TS 流实时视频播放器设计
第四章 视频播放器的设计与实现 ............................................................................ 19
4.1 视频播放器的总体设计方案 ............................................................................. 19
第三章 视频播放器的相关技术知识 ........................................................................ 10
3.1 LIBVLC 库 .......................................................................................................... 10 3.1.1 VLC 播放器................................................................................................. 10 3.1.2 LibVLC 库的组成 ....................................................................................... 10
1.1 序言 ....................................................................................................................... 1 1.2 视频编解码技术现状 ........................................................................................... 2 1.3 流媒体传输技术现状 ........................................................................................... 3 1.4 本文主要研究内容 ............................................................................................... 4 1.5 论文结构安排 ....................................................................................................... 4

C语言基于GTK+Libvlc实现的简易视频播放器 (一)

C语言基于GTK+Libvlc实现的简易视频播放器 (一)

C语言基于GTK+Libvlc实现的简易视频播放器小编心语:现下,各种视频播放软件层出不穷,竞争也越演越烈,不知道大家有木有这个想法,小编有时在想能不能做一款属于自己的视频播放器呢~小编特意去实验楼,整理出了这篇关于如何实现简易视频播放器的博文。

简易播放器,你值得拥有~友情提示:这里只是前篇,只是一些简单的功能,其他功能将会在后篇为大家介绍——一、课程说明如果你学习过之前上线的pygtk实现有道词典的项目课,那应该对gtk的使用有一些了解了,这个项目课学起来会相对轻松一些。

关于Gtk或者说是通常的图形应用开发的一些基础知识,我们会在以后的基础课程中体现,项目课适合有一定基础的用户学习。

二、Gtk简介GTK+ 是一种图形用户界面(GUI)工具包。

也就是说,它是一个库(或者,实际上是若干个密切相关的库的集合),它支持创建基于GUI 的应用程序。

可以把GTK+ 想像成一个工具包,从这个工具包中可以找到用来创建GUI 的许多已经准备好的构造块。

最初,GTK+ 是作为另一个著名的开放源码项目—— GNU Image Manipulation Program (GIMP) ——的副产品而创建的。

在开发早期的GIMP 版本时,Peter Mattis 和Spencer Kimball 创建了GTK(它代表GIMP Toolkit),作为Motif 工具包的替代,后者在那个时候不是免费的。

(当这个工具包获得了面向对象特性和可扩展性之后,才在名称后面加上了一个加号。

)这差不多已经10 年过去了。

今天,在GTK+ 的最新稳定版本—— 2.8 版上(3.0测试中),仍然在进行许多活动,同时,GIMP 无疑仍然是使用GTK+ 的最著名的程序之一,不过它已经不是惟一的使用GTK+ 的程序了。

已经为GTK+ 编写了成百上千的应用程序,而且至少有两个主要的桌面环境(Xfce 和GNOME)用GTK+ 为用户提供完整的工作环境。

用CC++开发基于VLC?SDK的视频播放器

用CC++开发基于VLC?SDK的视频播放器

用CC++开发基于VLC SDK的视频播放器在windows系统如果开发万能播放器,一般都是基本DirectShow来开发,开发也很简单,但缺点也很多,一个文件格式是否能够播放完全取决于你是否安装了正确的解析器和解码器,即使现在有了万能解器安装包也会出现很多问题,不过自从很多开源软件的出现,比如大名鼎鼎的ffmpeg,vlc等,一切都变得简单起来,基于ffmpeg sdk开发就不多介绍了,本文主要介绍基于 VLC SDK来开发自己的播放器,一切都是那么的简单.1.先下载VLC player, , 安装的时候要安装开发库(SDK)2.用VC 6.0/2003/2005/2008/2010 IDE均可开发自己的测试程序3.创建一个控制台程序,当然创建一个窗口程序更好,由于只是为了关注于如何使用VLC SDK,所以都无所谓的4.在工程中设置好vlc的 include和lib路径,一般VLC sdk路径是C:\Program Files\VideoLAN\VLC\sdk5.复制libvlc.dll, libvlccore.dll,plugins目录到工程debug目录,如果是release需要复制到release目录,目录结构如图:之后就是完整的代码:#include <stdio.h>#include <tchar.h>#include <time.h>#include <windows.h>#include <vlc/vlc.h>#pragma comment(lib, "libvlc.lib")#pragma comment(lib, "libvlccore.lib")int main(int argc, char* argv[]){libvlc_instance_t * vlc_ins = NULL;libvlc_media_player_t * vlc_player = NULL;libvlc_media_t * vlc_media = NULL;const char * vlc_args[] ={"-I","dummy","--ignore-config","--extraintf=logger","--verbose=2",};// 创建一个VLC实例vlc_ins = libvlc_new(sizeof(vlc_args)/sizeof(vlc_args[0]), vlc_args);if(vlc_ins != NULL){// 创建一个VLC播放器vlc_player = libvlc_media_player_new(vlc_ins);if(vlc_player != NULL){// 通过文件路径创建一个媒体实例,这里是我的测试文件vlc_media = libvlc_media_new_path(vlc_ins, "d:\\clips\\org.mp4");if(vlc_media != NULL){// 解析媒体实例libvlc_media_parse(vlc_media);// 获取媒体文件的播放长度, 返回 mslibvlc_time_t duration = libvlc_media_get_duration(vlc_media);// 此处是获取媒体包含多个的视频和音频轨以及其他类型的轨道信息libvlc_media_track_info_t *media_tracks = NULL;int trackCount = libvlc_media_get_tracks_info(vlc_media, &media_tracks);// 这里是释放内存,但我测试的时候会有问题,还没仔细研究是为何// free(media_tracks); // crash?// 把打开的媒体文件设置给播放器libvlc_media_player_set_media(vlc_player, vlc_media);// 因为是windows系统,所以需要设置一个HWND给播放器作为窗口,这里就直接使用桌面窗口,这里仅是测试libvlc_media_player_set_hwnd(vlc_player, ::GetDesktopWind ow());// 开始播放视频libvlc_media_player_play(vlc_player);// 这里仅是为了打印一些信息出来,20秒后退出time_t last_time = time(NULL);while((time(NULL) < (last_time + 20))){Sleep(10);// 获取当前播放位置libvlc_time_t play_time = libvlc_media_player_get_time(vlc_player);printf("playing time : %lld ms\r", (__int64)(play_time));// 获取媒体的状态// libvlc_state_t media_state = libvlc_media_get_state(vlc_media);// printf("\nmedia state : %d\n", (int)(media_state));}// 停止libvlc_media_player_stop(vlc_player);// 释放libvlc_media_release(vlc_media);}// 释放libvlc_media_player_release(vlc_player);}// 释放libvlc_release(vlc_ins);}return 0;}编译运行,就可以在桌面上看到播放的视频了,用VLC SDK做自己的播放器是如此的简单。

C#Winform开发程序调用VLC播放器控件播放视频.

C#Winform开发程序调用VLC播放器控件播放视频.

C#Winform开发程序调⽤VLC播放器控件播放视频. VLC是个好东西,⽀持的格式多,还⽆⼴告,关键还有调⽤它的播放控件不⽤安装.开个⽂章记录下调⽤这个控件的流⽔账,以便以后需要的时候查阅创建⼯程⾸先新建⼀个Winform⼯程.这⾥姑且叫做VLC.Test吧复制⽂件在⾃⼰的项⽬⽬录⾥创建⼀个Lib⽬录,⾥⾯再创建⼀个VLC⽬录,在VLC的安装⽬录能找到这三个⽂件/⽂件夹复制到⾃⼰的项⽬⾥在项⽬属性⾥配置⽣成事件这⼀步的效果是在编译程序的时候能⾃动把库⽂件复制到输出⽬录. 毕竟在创建git仓库的时候是要屏蔽输出⽬录的.xcopy "$(ProjectDir)\Lib\VLC\*" "$(ProjectDir)$(OutDir)" /s /e /r /h /d /y对API进⾏声明由于VLC的DLL是Native DLL,在C#中需要进⾏声明才能⽤,不过好在这条路已经有⼈⾛过了:借⽤写的⼀个Class(⽂章末尾会附带git地址)添加测试视频在⼯程⾥添加了⼀个视频,并设置⾃动复制到输出⽬录编写代码将这⼏⾏代码加在窗⼝的load事件中:VlcPlayer.VlcPlayerBase VlcPlayerBase = new VlcPlayer.VlcPlayerBase(Environment.CurrentDirectory + "\\vlc\\plugins\\"); VlcPlayerBase.SetRenderWindow(pictureBox1.Handle.ToInt32());VlcPlayerBase.LoadFile("银河与极光.mp4");VlcPlayerBase.Play();运⾏即可播放.播放效果代码获取。

利用MCI在VC++环境下设计一个播放器

利用MCI在VC++环境下设计一个播放器

利用MCI在VC++环境下设计一个播放器一、实验目的通过动手制作基于Vc++的音乐播放器,了解播放器的原理。

并通过自己动手,在windows 播放器组件的基础上,用自己的算法,去实现自己的界面和自己的播放模式。

二、实验仪器或设备Pc机一台、 windows xp以上操作系统开发环境:Vc++6.0三、总体设计(设计原理、设计方案及流程等)1、设计原理:Microsoft Visual C++是Microsoft公司推出的开发Win32环境程序,面向对象的可视化集成编程系统。

它不但具有程序框架自动生成、灵活方便的类管理、代码编写和界面设计集成交互操作、可开发多种程序等优点,而且通过简单的设置就可使其生成的程序框架支持数据库接口、OLE2,WinSock网络、3D控制界面。

它以拥有“语法高亮”,IntelliSense(自动编译功能)以及高级除错功能而著称。

比如,它允许用户进行远程调试,单步执行等。

还有允许用户在调试期间重新编译被修改的代码,而不必重新启动正在调试的程序。

其编译及建置系统以预编译头文件、最小重建功能及累加连结著称。

这些特征明显缩短程式编辑、编译及连结的时间花费,在大型软件计划上尤其显著。

visual C++ 6.0集成了MFC6.0,于1998发行。

发行至今一直被广泛地用于大大小小的项目开发。

但是,这个版本在WindowsXP下运行会出现问题,尤其是在调试模式的情况下(例如:静态变量的值并不会显示)。

这个调试问题可以通过打一个叫“Visual C++ 6.0Processor Pack”的补丁来解决。

奇怪的是,这个网页强调用户也必须运行Windows 98、Windows NT4.0、或Windows 2000。

2、设计方案:通过Vc++6.0的可视化程序设计界面,运用基本对话框和按钮以及时间条进行界面设计,而后对各个按钮空间,以及时间条空间进行时间编码,依据自己的算法,实现自己的播放器。

用VC做视频播放器

用VC做视频播放器

用VC做视频播放器网址:/space.php?do=thread&id=10426三设计过程和算法描述(宋体,四号)6.2.1 利用VC6.0的MFC AppWizard创建工程首先:注册该控件在windows“运行”里写入:regsvr32 msdrm.ocx 单击确定1.在VC++集成开发环境中,选择菜单File|New,弹出New对话框。

2.在Projects选项卡中选择MFC AppWizard(exe),并在Location项中输入“D:\Samples”。

3.在Project name中输入“CTLY2412”,项中的内容自动设置为“D:\Samples\Player”。

4.按下OK按钮,在弹出的MFC AppWizard-Step-1对话框中选择Dialog based项,生成基于对话框的应用程序。

5.按下Finish按钮,在弹出的对话框中按下OK按钮,等待创建完相应的工程。

6.2.2 为对话框添加菜单1.在工作区中单击Resource View选项卡,展开Dialog资源组,双击IDD_PLAYER_DIALOG。

在右边的工作台中显示可以进行可视化编辑的IDD_PLAYER_DIALOG对话框,并打开一个控件工具窗口。

删除AppWizard在对话框中生成的控件,即一个OK按钮、一个Cancel按钮和一个文本框。

2.鼠标右击Dialog资源组中的IDD_PLAYER_DIALOG条目,在弹出的菜单中选择Insert…选项。

这时,显示Insert Resource(增加资源)窗口,选择其中的Menu项,单击右边的New按钮。

这样,VC++6.0在资源文件Player.rc中增加了一项资源,即一个菜单。

3.双击ID号:IDR_MENU1,则在右边显示一个可编辑的菜单条,该菜单条的最右边是一个虚方框,表示最右边的一个菜单项。

4.双击虚方框,弹出Menu Item Properties(菜单项属性)对话框,在“C编辑”框中输入菜单标题:文件(&F),其中“&”的作用是使其后面的字符加上下划线,让用户可用键盘来选择菜单。

c#winformvlcPlayer播放器

c#winformvlcPlayer播放器

c#winformvlcPlayer播放器vlcPlayer是⼀款免费开源的播放器项⽬,可以播放⼏乎所有的视频格式。

第⼀步:获取dll安装vlcplayer视频播放器,在安装⽬录下⾯获取所需的dll。

dll⽂件夹:plugins还有2个dll:libvlc.dll,libvlccore.dll第⼆步:获取播放器对象基类VlcPlayerBaseusing System;using System.Runtime.InteropServices;using System.Security;using System.Text;namespace VlcPlayer{public class VlcPlayerBase{private IntPtr libvlc_instance_;private IntPtr libvlc_media_player_;///<summary>///视频时长///</summary>private double duration_;///<summary>/// VLC 播放器。

///</summary>///<param name="pluginPath"></param>public VlcPlayerBase(string pluginPath){//string pluginPath = Environment.CurrentDirectory + "\\vlc\\plugins\\"; //插件⽬录string plugin_arg = "--plugin-path=" + pluginPath;string[] arguments = { "-I", "dummy", "--ignore-config", "--no-video-title", plugin_arg };libvlc_instance_ = LibVlcAPI.libvlc_new(arguments);libvlc_media_player_ = LibVlcAPI.libvlc_media_player_new(libvlc_instance_); //创建 libvlc_media_player 播放核⼼}///<summary>///设置播放容器///</summary>///<param name="wndHandle">播放容器句柄</param>public void SetRenderWindow(int wndHandle){if (libvlc_instance_ != IntPtr.Zero && wndHandle != 0){LibVlcAPI.libvlc_media_player_set_hwnd(libvlc_media_player_, wndHandle); //设置播放容器}}///<summary>///播放指定媒体⽂件///</summary>///<param name="filePath"></param>public void LoadFile(string filePath){IntPtr libvlc_media = LibVlcAPI.libvlc_media_new_path(libvlc_instance_, filePath); //创建 libvlc_media_player 播放核⼼if (libvlc_media != IntPtr.Zero){LibVlcAPI.libvlc_media_parse(libvlc_media);duration_ = LibVlcAPI.libvlc_media_get_duration(libvlc_media) / 1000.0; //获取视频时长LibVlcAPI.libvlc_media_player_set_media(libvlc_media_player_, libvlc_media); //将视频绑定到播放器去LibVlcAPI.libvlc_media_release(libvlc_media);//LibVlcAPI.libvlc_media_player_play(libvlc_media_player_); //播放}}///<summary>///播放///</summary>public void Play(){if (libvlc_media_player_ != IntPtr.Zero){LibVlcAPI.libvlc_media_player_play(libvlc_media_player_);}}///<summary>///暂停播放///</summary>public void Pause(){if (libvlc_media_player_ != IntPtr.Zero){LibVlcAPI.libvlc_media_player_pause(libvlc_media_player_);}///<summary>///停⽌播放///</summary>public void Stop(){if (libvlc_media_player_ != IntPtr.Zero){LibVlcAPI.libvlc_media_player_stop(libvlc_media_player_);}}public void Release(){if (libvlc_media_player_ != IntPtr.Zero){LibVlcAPI.libvlc_media_release(libvlc_media_player_);}}///<summary>///获取播放时间进度///</summary>///<returns></returns>public double GetPlayTime(){return LibVlcAPI.libvlc_media_player_get_time(libvlc_media_player_) / 1000.0;}///<summary>///设置播放时间///</summary>///<param name="seekTime"></param>public void SetPlayTime(double seekTime){LibVlcAPI.libvlc_media_player_set_time(libvlc_media_player_, (Int64)(seekTime * 1000));}///<summary>///获取⾳量///</summary>///<returns></returns>public int GetVolume(){return LibVlcAPI.libvlc_audio_get_volume(libvlc_media_player_);}///<summary>///设置⾳量///</summary>///<param name="volume"></param>public void SetVolume(int volume){LibVlcAPI.libvlc_audio_set_volume(libvlc_media_player_, volume);}///<summary>///设置是否全屏///</summary>///<param name="istrue"></param>public void SetFullScreen(bool istrue){LibVlcAPI.libvlc_set_fullscreen(libvlc_media_player_, istrue ? 1 : 0);}///<summary>///视频时长///</summary>///<returns></returns>public double Duration { get { return duration_; } }///<summary>///是否正在播放///</summary>public bool IsPlaying{get{if (Duration > 0 && (int)GetPlayTime() == (int)Duration) this.Stop(); //如果播放完,关闭视频return (int)GetPlayTime() < (int)Duration /* 播放时间进度⼩于视频时长 */&& Duration > 0/* 播放时间进度⼤于0 */&& GetPlayTime() > 0; /* 视频时长⼤于0 */}}///<summary>///获取版本(VS2015 调试模式程序会直接崩掉)///</summary>///<returns></returns>public string Version { get { return LibVlcAPI.libvlc_get_version(); } }}#region vlclib.dllinternal static class LibVlcAPIinternal struct PointerToArrayOfPointerHelper{[MarshalAs(UnmanagedType.ByValArray, SizeConst = 11)]public IntPtr[] pointers;}///<summary>///传⼊播放参数///</summary>///<param name="arguments"></param>///<returns></returns>public static IntPtr libvlc_new(string[] arguments){PointerToArrayOfPointerHelper argv = new PointerToArrayOfPointerHelper();argv.pointers = new IntPtr[11];for (int i = 0; i < arguments.Length; i++){argv.pointers[i] = Marshal.StringToHGlobalAnsi(arguments[i]); //将托管 System.String 中的内容复制到⾮托管内存,并在复制时转换为 ANSI 格式。

基于VC的多媒体播放器的设计与开发

基于VC的多媒体播放器的设计与开发

基于VC的多媒体播放器的设计与开发在设计和开发基于VC的多媒体播放器时,有几个关键的方面需要考虑。

首先,我们需要确定播放器的功能和特性。

其次,我们需要设计用户界面,并开发与之相应的功能。

最后,我们需要确保播放器的性能和稳定性。

在功能和特性的确定方面,我们可以考虑以下几点:1. 支持多种多媒体文件格式:播放器应该能够支持常见的音频和视频文件格式,如MP3,MP4,AVI等。

2. 播放控制功能:播放器应该具备诸如播放,暂停,停止,快进,快退,循环播放,随机播放等基本的播放控制功能。

3. 音量调节功能:播放器应该提供音量增减的功能,使用户可以根据需要调整音量大小。

4. 播放列表功能:播放器应该允许用户创建和管理自己的播放列表,方便用户播放和组织自己的音频和视频文件。

在用户界面的设计方面,我们可以考虑以下几点:1. 主界面设计:主界面应该简洁明了,让用户能够直观地找到所需的功能按钮和控件。

2. 播放控制按钮:应该将常用的播放控制按钮(如播放,暂停,停止)放置在主界面上,方便用户随时进行操作。

3. 播放进度条:应该显示当前正在播放的媒体文件的播放进度,以便用户了解播放进度。

4. 音量控制按钮:应该提供对音量的调节按钮,让用户能够根据需要增加或减少音量大小。

在功能的开发方面,我们可以使用VC等开发工具来实现:1. 文件解码播放:使用合适的解码器来解码音频和视频文件,并通过音频驱动和显示驱动将其播放出来。

2. 播放控制:根据用户的操作,通过调用相关的API来实现播放,暂停,停止,快进,快退等操作。

3. 播放列表管理:通过读取用户的文件夹和文件,将其组织成播放列表,并实现相应的增加,删除和切换操作。

最后,在性能和稳定性方面,我们可以采取以下措施:1. 优化播放器的代码结构和算法,使其能够高效地解码和播放多媒体文件。

2. 对于文件解码过程中可能发生的异常和错误情况,进行适当的异常处理和错误提示,以确保播放器的稳定性和可靠性。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

VLC的C++封装
因为工作需要,研究了一段时间的播放器开发,如果从头开始做,可以学习下FFmpeg,很多播放器都是基于FFmpeg 开发的,但是这样工作量和难度都比较大,如果想很快能拿出一个播放器来用的,可以研究下开源的播放器,参考下射手播放器作者的文章:媒体播放器三大底层架构。

对比下现有的主流播放器:媒体播放器列表,VLC是在各个方面都表现很突出的一款。

VLC 是一款免费、自由、开源的跨平台多媒体播放器及框架,可播放大多数多媒体文件,DVD、音频CD、VCD 以及各类流媒体协议。

VLC是在Linux下用C语言开发的,如果想用其接口,可以将C的接口用C++封装一下,这样使用方便的很多,在CodeProject上搜到一个C++的封装,在他的基础上加了点函数,使用了最新的VLC版本(2.1.0),用MFC做成了如下的样子:
主要实现功能:
1、打开:加载音视频文件(同时开始播放)。

2、播放/暂停:播放暂停文件播放。

3、停止:停止播放。

4、快进:快进5秒。

5、快退:后退5秒。

6、音量:音量调节(0--100)。

7、播放进度控制:使用进度条控制。

基本上实现的功能和CodeProject上那个demo差不多,我修改后可以播放网络流媒体,将加载的文件名修改为流媒体地址就可以了。

播放上面双语字幕的文件时貌似不能正常显示中文,VLC播放器本身也有这个问题,不过可以设置修改。

其他更多的功能还有待研究,VLC的接口注释都很详细,按照它的接口应该可以实现更多的功能,有问题也可以直接在VideoLan的论坛上发帖问。

主要问题:运行时需要依赖的VLC的plugins目录里的DLL(66M大小)太多,有一些DLL是用不到的,如果封装成ActiveX给Web下调用,打包的cab的会比较大,需要裁剪。

VLC的C#封装
如果播放器客户端使用的是.Net开发的,如何使用VLC?可以有以下几种方法:
1、ActiveX控件:可以将上述MFC的播放器封装成ActiveX控件提供给C#调用。

鉴于业余时间有限,现在这部分工作还没做。

2、使用.Net的PInvoke技术将VLC的C接口封装成C#接口,这方面网上的文章也很多.。

相关文档
最新文档