用Paslibvlc 二次开发是不是还要安装VLC

2013年2月 Delphi大版内专家分月排行榜第二2013年1月 Delphi大版内专家分月排行榜第二
2013年7月 Delphi大版内专家分月排行榜第三2012年10月 Delphi大版内专家分月排行榜第三2012年9月 Delphi大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。37283人阅读
我的开源项目(66)
=====================================================最简单的基于libVLC的例子文章列表:=====================================================本文记录使用libVLC的开发的最简单的视频播放器示例。VLC Media Player是一款优秀的播放器,但是由于它的源代码编译的难度比较大,一直没有深入研究过它的开发方面的技术。此前触到了一些VLC开发方面的东西,因此总结了一下libVLC的开发示例程序。如何获取VLC的SDKVLC开发所需的库文件可以有2种获取方法:1. 自行编译2. 直接从安装目录里面拷贝出来第一种方法难度要大一些。尤其是在Windows下编译VLC是个比较麻烦的事情。一般情况下可以选择第二种方法获取VLC开发所需的文件。开发VLC所需的文件的位置:1. 动态链接库*.dll:安装目录下的libvlc.dll,libvlccore.dll以及plugins目录下的所有文件。PS:VLC支持非常多的plugin。因此plugins目录的体积确实是非常大的。2. 静态链接库*.lib:安装目录/sdk/lib3. 头文件*.h:安装目录/sdk/include新建一个VC工程后,把上述三类文件分别拷贝至新工程目录下,并且配置它们的路径之后,就可以使用libVLC进行开发了。最简单的基于libVLC的视频播放器使用libVLC开发一个播放器十分的容易。最简单的基于libVLC的视频播放器的流程图如下图所示。流程图中包含了3个结构体:libvlc_instance_t:代表一个libVLC的实例。libvlc_media_t:代表一个可以播放的媒体。libvlc_media_player_t:代表一个VLC媒体播放器(一个视频播放器播放一个视频)。注意VLC并不仅仅用于媒体播放。创建或者以上3个结构体通过以下6个函数:libvlc_new():创建libvlc_instance_t。libvlc_media_new_path():创建libvlc_media_t。libvlc_media_player_new_from_media():创建libvlc_media_player_t。libvlc_media_player_release():释放libvlc_media_player_tlibvlc_media_release():释放libvlc_media_t。libvlc_release():释放libvlc_instance_t。可以已通过下面的函数控制媒体的播放或者暂停,这些函数都需要使用libvlc_media_player_t作为参数。这里处于简化的目的,只使用了播放和停止函数:libvlc_media_player_play():播放。libvlc_media_player_pause():暂停。libvlc_media_player_stop():停止。除了上述3个函数之外,还包括libvlc_media_player_set_position()等函数,这里不再一一记录。几点注意事项libvlc_media_t的创建创建libvlc_media_t有两种方法:libvlc_media_new_path()和libvlc_media_new_location()。简单描述一下这两个函数的区别:libvlc_media_new_location()用于打开协议,而libvlc_media_new_path()用于打开文件。因而传递给libvlc_media_new_path()的就是普通的文件路径(绝对路径例如D:\xxx.flv,或者相对路径例如xxx.flv),而传递给libvlc_media_new_location()的就是协议地址(例如“udp://….”,“http://”)。但是这里有一点需要注意,在VLC中“文件”也属于一种广义上的“协议”。因此使用libvlc_media_new_location()也可以打开文件,但是必须在文件路径前面加上“文件协议”的标记“file:///”。例如打开“F:\movie\cuc_ieschool.flv”下的视频,实际使用的代码如下所示。libvlc_media_new_location (inst, &file:///F:\\movie\\cuc_ieschool.flv&);此外,VLC还支持很多“神奇”的协议,比如输入“screen://”协议就可以进行屏幕录制,代码如下。libvlc_media_new_location (inst, &screen://&);把libVLC的弹出窗口嵌入到程序中在这里我只实践过Windows下把libVLC的弹出窗口嵌入到程序中。将窗口或者控件的句柄传递给libvlc_media_player_set_hwnd()函数即可。这里有一点需要注意,如果把libVLC弹出窗口嵌入到程序中的话,“全屏”功能就不能使用了。关于libVLC加载的问题在libVLC中可以通过libvlc_media_player_get_length(),libvlc_video_get_width(),libvlc_video_get_height()等函数获取到视频的时长,宽,高等信息。但是有一个很奇怪的现象:如果在调用完libvlc_media_player_play()之后立即调用上述3个函数的话,返回的值都是0,只有“等待”一段时间(例如调用sleep())后再调用上述函数,才能得到正确的数值。对于这种现象,我觉得可能是libVLC加载完成之后,才能通过上述几个函数获得正确的值(自己推测的,还没有深究)。代码/**
* 最简单的基于libVLC的播放器
* Simplest libVLC Player
* 雷霄骅 Lei Xiaohua
* 中国传媒大学/数字电视技术
* Communication University of China / Digital TV Technology
* http://blog.csdn.net/leixiaohua1020
* 本程序是一个最简单的基于libVLC的视频播放器。
* 适合初学者学习libVLC。
* This example is the simplest Video Player based on libVLC.
* Suitable for the beginner of libVLC.
#include &Windows.h&
#include &vlc/vlc.h&
int main(int argc, char* argv[])
libvlc_instance_t *
libvlc_media_player_t *
libvlc_media_t *m;
libvlc_time_
int wait_time=5000;
//libvlc_time_
/* Load the VLC engine */
inst = libvlc_new (0, NULL);
//Create a new item
//Method 1:
//m = libvlc_media_new_location (inst, &file:///F:\\movie\\cuc_ieschool.flv&);
//Screen Capture
//m = libvlc_media_new_location (inst, &screen://&);
//Method 2:
m = libvlc_media_new_path (inst, &cuc_ieschool.flv&);
/* Create a media player playing environement */
mp = libvlc_media_player_new_from_media (m);
/* No need to keep the media now */
libvlc_media_release (m);
// play the media_player
libvlc_media_player_play (mp);
//wait until the tracks are created
_sleep (wait_time);
length = libvlc_media_player_get_length(mp);
width = libvlc_video_get_width(mp);
height = libvlc_video_get_height(mp);
printf(&Stream Duration: %ds\n&,length/1000);
printf(&Resolution: %d x %d\n&,width,height);
//Let it play
_sleep (length-wait_time);
// Stop playing
libvlc_media_player_stop (mp);
// Free the media_player
libvlc_media_player_release (mp);
libvlc_release (inst);
}运行结果程序运行后,会弹出一个窗口播放“cuc_ieschool.flv”文件。下载Simplest libVLC Example项目主页SourceForge:Github:开源中国:CDSN下载地址:&本工程是包含了一些基于libVLC的示例程序。一共包含了如下几个子程序。playerGUI: 最简单的基于libVLC的播放器-图形界面版。simplest_libvlc_example: 最简单的基于libVLC的播放器。simplest_libvlc_streamer: 最简单的基于libVLC的推流器。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:7135334次
积分:55338
积分:55338
排名:第45名
原创:375篇
转载:159篇
译文:28篇
评论:6400条
姓名:雷霄骅
网名:leixiaohua1020
中国传媒大学-广播电视工程
中国传媒大学-数字电视技术
中国传媒大学-数字视频技术
[注1:QQ消息较多,难以一一回复,见谅]
[注2:CSDN私信功能使用很少,有问题可以直接在博客评论处留言]
主要从事与广播电视有关的视音频技术的研究。包括视音频质量评价,视音频编解码,流媒体,媒资检索等。
【SourceForge】【主】
【Github】
【开源中国】
欢迎转载本博客原创或翻译文章,但请声明出处,谢谢!
本QQ群旨在为视音频技术同行方便交流提供一个平台。无论是实验室,电视台,互联网视频,安防,播放器,媒体中心等等都可以加入讨论。欢迎新手和大牛,多交流可以更快的进步~1号群【2000人】:2号群【1000人】:通知:1号群成员容量为2000人,目前已经接近上限,为了给新成员入群讨论的机会,会定期清理不发言的用户,希望大家理解,谢谢支持! 2号群为新创建的群,欢迎加入~ 针对近期出现的各种问题,为保障本群和谐发展制定了《群规》,新成员入群后请阅读位于群公告中的《群规》了解本群的规则
文章:135篇
阅读:3269973
文章:91篇
阅读:848115
文章:41篇
阅读:314848当前位置: →
→ libvlc外部api的简单整理
libvlc外部api的简单整理
& 作者及来源: 一个人的天空@ - 博客园 &
&收藏到→_→:
摘要: libvlc外部api的简单整理
"libvlc外部api的简单整理"::
libvlc.h定义了libvlc的外部api,引用这个头文件就可以把vlc嵌入到我们的程序里面了。libvlc的对象必须先被初始化之后才能被使用。libvlc&core
libvlc_new()&用于初始化一个libvlc的实例,argc表示参数的个数,argv表示参数,返回创建的实例若当发生错误时返回null
libvlc_release()用于销毁一个libvlc的实例
&libvlc&error&handling
libvlc_errmsg()返回的是在当前线程中产生的最新的libvlc错误,这个错误信息至少在另外一个错误发生之前(至少再调用一次libvlc)都是有效的,当没有任何错误的时候返回的是null
libvlc_clearerr()用于清除当前线程的libvlc的错误状态.此操作是可选的,默认情况下,错误状态是会在新的错误发生时被覆盖.
libvlc_vprinterr()用于设置当前线程的libvlc的错误状态和消息.无论何时都返回一个nul字符
libvlc_printerr()&/源码里的注释和上一个一模一样
libvlc_retain()增加libvlc的引用计数,任何新的libvlc实例的引用计数为1
libvlc_add_intf():尝试启动libvlc实例的用户接口,p_instance表示要启动的实例,name为接口名,null表示默认,返回0表示成功-1表示发生错误
libvlc_set_exits_handler():此函数用于为一个已存在的libvlc事件注册一个回调.此方法在你用libvlc_add_intf()开启了至少一个接口时非常有用.典型的,这个函数将唤醒你的程序主循环(从其他线程).参数p_instance&表示libvlc实例,cb表示当libvlc要退出时要调用的回调.opaque表示回调的数据指针.警告:此函数不能同libvlc_wait()同时调用.
libvlc_wait():等待到有一个接口引发实例的推出动此文来自: 马开东博客
转载请注明出处 网址:
作.必须先用libvlc_add_intf()开启至少一个接口.
libvlc_set_user_agent():&设置名,当有协议要求的时候,libvlc将把这个名字作为用户代理串传递给它.参数name应该是一个可读的名,例如"foobar&player&1.2.3",http参数为http&user&agent。例如"foobar/1.2.3&python/2.6.0。
libvlc_get_version():返回libvlc的版本号
libvlc_get_compiler():返回编译libvlc的的版本。
libvlc_get_changeset()&:返回libvlc的&changeset?
libvlc&asynchronous&events&&libvlc&发出不同步事件&&许多libvlc对象,如libvlc_instance_t&libvlc_media_player_t不同步的产生时间,它们中的每一个都提供了libvlc_event_manager_t事件管理器。你可以通过libvlc_event_attach()来订阅这些事件以及用libvlc_event_detach()来退订事件。
libvlc_event_manager_t是属于libvlc对象的事件管理器
libvlc_event_type_t:表示libvlc的事件
libvlc_callback_t():回调函数通知(call&back&function&notification翻译不准确),参数p_event为触发回调的时间.
libvlc_event_attach():注册一个event&notification。参数p_event_manager&想要绑定的事件管理器.通常来说它是由vlc_my_object_event_manager()处获得的,此处的my_object是你想要监听的对象,i_event_type是想要监听的事件,f_callback是当i_event_type发生时要调用的函数。user_data是用户提供的伴随事件而传递的数据。成功时此函数返回0,发生错误时返回enomem
libvlc_event_detach()退订一个event&notification
libvlc_event_type_name():获得一个事件的类型名
libvlc_log&libvlc&logginglibvlc_log系列函数提供了访问libvlc消息日志的方法.这些函数仅用于高级用户或调试之用.
libvlc_get_log_verbosity():获得vlc消息的详细级别
libvlc_set_log_verbosity():设置vlc消息的详细级别
libvlc_log_open():开启vlc消息日志实例(从一个libvlc实例中获得其消息日志实例)
libvlc_log_close():关闭vlc消息日志实例
libvlc_log_count():返回日志中消息条数
libvlc_log_clear():清除日志实例.将把实例中的所有消息删除,为了防止消息阻塞,应该经常清除.
libvlc_log_get_iterator():定位并返回一个日志中记录的iterator
libvlc_log_iterator_free():释放一个先前定位好的iterator
libvlc_log_iterator_next():返回下一条日志消息,当接下来为空的时候返回null,否则返回下一个消息对象
&libvlc_media.hlibvlc_media_t是一个可播放的媒体的抽象表达.它包含了此文来自: 马开东博客
转载请注明出处 网址:
这个媒体的位置以及各种可选的元数据.
libvlc_state_t:此枚举类型的循序必须严格保证和源码一致,同时可参考mediacontrol_playerstatus,input_state_e枚举类型以及videolan.libvlc.state(在bindings/cil/src/media.cs)
libvlc_media_stats_t:libvlc的媒体统计信息
libvlc_media_track_info_t:没有注释,主要是fourcc和docec的其他信息。
libvlc_media_new_location():使用一个给定的媒体资源路径来建立一个libvlc_media对象.参数psz_mrl为要读取的mrl(media&resource&location).此函数返回新建的对象或null.
libvlc_media_new_path():从本地文件系统路径新建,其他参照上一条
libvlc_media_new_as_node():使用给定的名称创建一个libvlc_media_t并将其作为一个空的节点
libvlc_media_add_option():添加一个选项到已有的libvlc_media_t,这个选项将被用于决定media_player如何读取媒体。这样一来就可以在每个媒体上指定各自的vlc的高级reading/streaming选项。
libvlc_media_add_option_flag():减价一个带有可配置标记的选贤到已有的libvlc_media_t.其他同上一条.
libvlc_media_retain():保留一个引用到一个媒体描述对象(libvlc_media_t.使用libvlc_media_release()来减少一个媒体描述对象的引用计数
libvlc_media_release():减少一个libvlc_media_t的引用计数,如果减少到0时,此此函数将释放此对象(销毁).它将发送一个libvlc_mediafreed事件到所有的监听者那里。如果一个libvlc_media_t被释放了,它就再也不能使用了。
libvlc_media_get_mrl():从一个媒体描述对象处获得它的mrl
libvlc_media_duplicate():镜像一份媒体描述对象
libvlc_media_get_meta():读取媒体的元数据。如果媒体还没被解析,则返回null,这个方法会自动调用libvlc_media_parse_async(),因此,在调用此方法以后,你可以接收到一个libvlc_mediametachanged事件。如果你希望使用一个同步的版本,请确保你在调用get_meta()之前调用了libvlc_media_parse();
libvlc_media_set_meta():设置媒体的元数据,此方法不会保存数据,还需要调用libvlc_media_save_meta()来保存.
libvlc_media_get_state():获取当前媒体描述对象的状态.可能的状态被定义在livblc_structures.c中.
libvlc_media_subitems():获得一个媒体描述对象的子项目.此方法将增加媒体描述对象的引用计数,使用libvlc_media_list_release()减少引用计数.
libvlc_media_event_manager():获得一个媒体描述对象的事件管理器.
libvlc_media_get_duration():获得一个媒体描述对象的持续时间.发生错误时返回-1.
libvlc_media_parse():解析一个本地媒体的元数据和轨道信息,此方法是同步的.
libvlc_media_parse_async():同上,此方法不同步,你可以监听libvlc_mediaparsedchanged事件来追踪他,如果已经被解析过了则此事件不会被触发。
libvlc_media_is_parsed():获得一个媒体描述对象的分析状态。当分析过了返回true。
libvlc_media_set_user搜索此文相关文章:此文来自: 马开东博客
网址: 站长QQ
libvlc外部api的简单整理_博客园相关文章
博客园_总排行榜
博客园_最新
博客园_月排行榜
博客园_周排行榜
博客园_日排行榜E:\Project\VLC\bin&tree&/F│&&libvlc.dll│&&libvlccore.dll│&&libvlcTutorial.exe│└─plugins&&&&&&&&liba52tofloat32_plugin.dll&&&&&&&&liba52tospdif_plugin.dll&&&&&&&&liba52_plugin.dll&&&&&&&&libaccess_attachment_plugin.dll&&&&&&&&//&other&dll
4. vlc的提供了libvlc的简单例子,下面给出的代码主要增加了参数配置进行网络串流的部分:()
&1&//&libvlcTutorial.cpp&:&定义控制台应用程序的入口点。&2&//&3&&4&#include&"stdafx.h"&5&&6&#include&"vlc/vlc.h"&7&&8&//&vlc&command&line&9&/*<span style="color: #&vlc&-vvv&--extraintf&logger&--logfile&vlc_server.log&<span style="color: #&dshow://&:dshow-vdev=&:dshow-adev=&<span style="color: #&:sout="#duplicate{dst=display,<span style="color: #&dst='transcode{vcodec=h264,vb=8,fps=30,width=320,height=240,scale=1,acodec=none}<span style="color: #&:rtp{dst=127.0.0.1,mux=ts,port=1234,caching=100}'}"<span style="color: #&&*/<span style="color: #&<span style="color: #&<span style="color: #&int&_tmain(int&argc,&_TCHAR*&argv[])<span style="color: #&{<span style="color: #&&&&&libvlc_instance_t&*&<span style="color: #&&&&&libvlc_media_player_t&*<span style="color: #&&&&&libvlc_media_t&*m;<span style="color: #&&&&&libvlc_log_t&*<span style="color: #&<span style="color: #&&&&&/*&Load&the&VLC&engine&*/<span style="color: #&&&&&inst&=&libvlc_new&(<span style="color: #,&NULL);<span style="color: #&<span style="color: #&&&&&//&logging<span style="color: #&&&&&log&=&libvlc_log_open&(inst);&&&&<span style="color: #&&&&&libvlc_set_log_verbosity&(inst,&<span style="color: #);<span style="color: #&&&&&unsigned&int&level&=&libvlc_get_log_verbosity&(inst);<span style="color: #&&&&&printf&("vlc&log&verbosity&level&=&%d\n",&level);<span style="color: #&<span style="color: #&<span style="color: #&&&&&/*&Create&a&new&item&*/<span style="color: #&//&&&&m&=&libvlc_media_new_path&(inst,&"f:\\downloads\\sample.avi");<span style="color: #&&&&&m&=&libvlc_media_new_path&(inst,&"dshow:////&:dshow-vdev=&:dshow-adev=");<span style="color: #&<span style="color: #&&&&&//&media&option<span style="color: #&&&&&const&char&*options[]&=&{<span style="color: #&&&&&&&&&":no-audio",<span style="color: #&&&&&&&&&":video-title-position=4",<span style="color: #&&&&&&&&&":sout=#duplicate{dst=display,dst=\'transcode{venc=x264{profile=baseline},vcodec=h264,vb=10,width=320,height=240,fps=10,scale=1}:rtp{dst=127.0.0.1,port=1234,mux=ts}\'}",<span style="color: #&&&&&&&&&":sout-udp-caching=1",<span style="color: #&&&&&&&&&":sout-rtp-caching=1",<span style="color: #&&&&&&&&&":sout-mux-caching=1",<span style="color: #&&&&&&&&&":sout-ts-dts-delay=60"<span style="color: #&&&&&&&&&<span style="color: #&&&&&};<span style="color: #&&&&&for&(int&i&=&<span style="color: #;&i&&&sizeof(options)&/&sizeof(options[<span style="color: #]);&i++)<span style="color: #&&&&&&&&&libvlc_media_add_option&(m,&options[i]);<span style="color: #&<span style="color: #&&&&&/*&Create&a&media&player&playing&environement&*/<span style="color: #&&&&&mp&=&libvlc_media_player_new_from_media&(m);<span style="color: #&<span style="color: #&&&&&/*&No&need&to&keep&the&media&now&*/<span style="color: #&&&&&libvlc_media_release&(m);<span style="color: #&<span style="color: #&#if&0<span style="color: #&&&&&/*&This&is&a&non&working&code&that&show&how&to&hooks&into&a&window,<span style="color: #&&&&&*&if&we&have&a&window&around&*/<span style="color: #&&&&&libvlc_media_player_set_xdrawable&(mp,&xdrawable);<span style="color: #&&&&&/*&or&on&windows&*/<span style="color: #&&&&&libvlc_media_player_set_hwnd&(mp,&hwnd);<span style="color: #&&&&&/*&or&on&mac&os&*/<span style="color: #&&&&&libvlc_media_player_set_nsobject&(mp,&view);<span style="color: #&#endif<span style="color: #&<span style="color: #&&&&&/*&play&the&media_player&*/<span style="color: #&&&&&libvlc_media_player_play&(mp);<span style="color: #&<span style="color: #&&&&&while&(!_kbhit())<span style="color: #&&&&&&&&&Sleep&(<span style="color: #0);&/*&Let&it&play&a&bit&*/<span style="color: #&<span style="color: #&&&&&/*&Stop&playing&*/<span style="color: #&&&&&libvlc_media_player_stop&(mp);<span style="color: #&<span style="color: #&&&&&/*&Free&the&media_player&*/<span style="color: #&&&&&libvlc_media_player_release&(mp);&&&&&<span style="color: #&<span style="color: #&&&&&libvlc_release&(inst);<span style="color: #&<span style="color: #&<span style="color: #&&&&&printf&("message&in&log&=&%d\n",&libvlc_log_count&(log));<span style="color: #&&&&&system("pause");<span style="color: #&&&&&return&<span style="color: #;<span style="color: #&<span style="color: #&}<span style="color: #&<span style="color: #&
需要说明的是,上面的代码只是给出了实现串流的一种实现,我也不知道是否为标准做法。43行中sout配置为一路在本地显示原始码流,另一路经x264编码后进行网络串流,venc=x264后面的{}内可以设置的参数还相当多,这里只举了一个例子;另外一个经验是,第二个dst后面的一对\'也是不可少的,也可以替换为一对{},否则运行时会出现参数解析错误。不清楚为了实现低码率的编码和串流,除了vb、fps还有哪些影响较大的参数,继续研究中。
很好很强大,我之前都没发现还有.lib文件,还自己去导出这个文件
请教楼主两个问题,1、您用的是什么版本的libvlc 我下载的是1.1.7可是为什么没有libvlc_media_new_path
这个函数,而且其他函数比如 libvlc_log_open
我的版本里面是2参数的 多了一个libvlc_exception_t * 参数,请问您的版本是从哪里下的?2、您是否有rtp接收串流的例子? 望指点一下,谢谢!!
@squwal1. 我用的版本是1.1.11 The Luggage,就在官方网站下载的2. 参考代码的40-49行,你可以到vlc wiki看看相关的命令行参数,或者装个vlc播放器试一下它的rtsp串流功能
RTSP串流后只能是直播视频,没法实现VOD点播吧?
@jack_incredible不清楚,google vlc vod
请教,接收串流的url怎么写?
随笔分类(91)
随笔档案(94)
阅读排行榜}

我要回帖

更多关于 libeay32.pas 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信