VLC 使用

int _tmain(int argc, _TCHAR* argv[])
19 {
20     libvlc_instance_t * inst;
21     libvlc_media_player_t *mp;
22     libvlc_media_t *m;
23     libvlc_log_t *log;
24 
25     /* Load the VLC engine */
26     inst = libvlc_new (0, NULL);
27 
28     // logging
29     log = libvlc_log_open (inst);    
30     libvlc_set_log_verbosity (inst, 2);
31     unsigned int level = libvlc_get_log_verbosity (inst);
32     printf ("vlc log verbosity level = %d\n", level);
33 
34 
35     /* Create a new item */
36 //    m = libvlc_media_new_path (inst, "f:\\downloads\\sample.avi");
37     m = libvlc_media_new_path (inst, "dshow://// :dshow-vdev= :dshow-adev=");
38 
39     // media option
40     const char *options[] = {
41         ":no-audio",
42         ":video-title-position=4",
43         ":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}\‘}",
44         ":sout-udp-caching=1",
45         ":sout-rtp-caching=1",
46         ":sout-mux-caching=1",
47         ":sout-ts-dts-delay=60"
48         
49     };
50     for (int i = 0; i < sizeof(options) / sizeof(options[0]); i++)
51         libvlc_media_add_option (m, options[i]);
52 
53     /* Create a media player playing environement */
54     mp = libvlc_media_player_new_from_media (m);
55 
56     /* No need to keep the media now */
57     libvlc_media_release (m);
58 
59 #if 0
60     /* This is a non working code that show how to hooks into a window,
61     * if we have a window around */
62     libvlc_media_player_set_xdrawable (mp, xdrawable);
63     /* or on windows */
64     libvlc_media_player_set_hwnd (mp, hwnd);
65     /* or on mac os */
66     libvlc_media_player_set_nsobject (mp, view);
67 #endif
68 
69     /* play the media_player */
70     libvlc_media_player_play (mp);
71 
72     while (!_kbhit())
73         Sleep (100); /* Let it play a bit */
74 
75     /* Stop playing */
76     libvlc_media_player_stop (mp);
77 
78     /* Free the media_player */
79     libvlc_media_player_release (mp);     
80 
81     libvlc_release (inst);
82 
83 
84     printf ("message in log = %d\n", libvlc_log_count (log));
85     system("pause");
86     return 0;
87 
88 }

========================================================================

#include "Stdafx.h"

#include "AVPlayer.h"

#include <cmath>

#include "include/vlc/vlc.h"

#pragma comment(lib, "lib/libvlc.lib")

#pragma comment(lib, "lib/libvlccore.lib")

// VLC的事件管理

void OnVLC_EndReached(const libvlc_event_t *event, void *data);

void OnVLC_PositionChanged(const libvlc_event_t *event, void *data);

CAVPlayer::CAVPlayer(void) :

m_pVLC_Inst(NULL),

m_pVLC_Player(NULL),

m_hWnd(NULL),

m_pfn(NULL)

{

m_strIp="";

m_strPort="";

isSendToNet = FALSE;

}

CAVPlayer::~CAVPlayer(void)

{

Release();

}

void CAVPlayer::Init()

{

if (! m_pVLC_Inst)

{

m_pVLC_Inst = libvlc_new(0, NULL);

}

}

void CAVPlayer::Release()

{

Stop();

if (m_pVLC_Inst)

{

libvlc_release (m_pVLC_Inst);

m_pVLC_Inst   = NULL;

}

}

bool CAVPlayer::Play(const std::string &strPath)

{

if (! m_pVLC_Inst)

{

Init();

}

if(strPath.empty() || ! m_pVLC_Inst)

{

return false;

}

Stop();

bool bRet = false;

if (m = libvlc_media_new_path(m_pVLC_Inst, strPath.c_str()))

{

if (m_pVLC_Player = libvlc_media_player_new_from_media(m))

{

libvlc_media_player_set_hwnd(m_pVLC_Player, m_hWnd);

if(isSendToNet){

CString strSend,strServer;

strSend.Format(":sout=#rtp{dst=%s,sdp=rtsp://%s:%s/stream}",m_strIp,m_strIp,m_strPort);

//strSend.Format(":sout=#rtp{dst=%s,sdp=rtsp://%s:%s/stream}",m_strIp,m_strIp,m_strPort);

strServer.Format(":rtsp-host=rtsp://%s:%s/stream",m_strIp,m_strPort);

const char *options[] = {

//":no-audio",

":video-title-position=4",

strSend.GetBuffer(0),

//":sout=#duplicate{dst=display,#rtp{dst=192.168.0.36,sdp=rtsp://192.168.0.36:11230/stream}",

//":sout=#duplicate{dst=display,dst=rtp{dst=192.168.0.36,sdp=rtsp://192.168.0.36:10086/stream}",

//vlc -vvv rtsp://192.1.101.51 --sout #rtp{dst=192.1.101.77,sdp=rtsp://192.1.101.77/live_vlc.sdp}

//strSend.GetBuffer(0),

":sout-udp-caching=1",

":sout-rtp-caching=1",

":sout-mux-caching=1",

":sout-ts-dts-delay=1024",

//":rtsp-host=rtsp://192.168.0.36:11230/stream"

strServer.GetBuffer(0),

":rtsp-throttle-users:500",

":rtsp-session-timeout:10"

};

for (int i = 0; i < sizeof(options) / sizeof(options[0]); i++)

libvlc_media_add_option (m, options[i]);

}

libvlc_media_player_play(m_pVLC_Player);

// 事件管理

libvlc_event_manager_t *vlc_evt_man = libvlc_media_player_event_manager(m_pVLC_Player);

libvlc_event_attach(vlc_evt_man, libvlc_MediaPlayerEndReached, ::OnVLC_EndReached, this);

libvlc_event_attach(vlc_evt_man, libvlc_MediaPlayerPositionChanged, ::OnVLC_PositionChanged, this);

bRet = true;

}

libvlc_media_release(m);

}

return bRet;

}

void CAVPlayer::Stop()

{

if (m_pVLC_Player)

{

libvlc_media_player_stop (m_pVLC_Player);      /* Stop playing */

libvlc_media_player_release (m_pVLC_Player);   /* Free the media_player */

m_pVLC_Player = NULL;

}

/* Stop the media */

//if (libvlc_media_player_get_state(vlcPlayer) == libvlc_Ended)

}

void CAVPlayer::Play()

{

if (m_pVLC_Player)

{

libvlc_media_player_play(m_pVLC_Player);

}

}

void CAVPlayer::Pause()

{

if (m_pVLC_Player)

{

libvlc_media_player_pause(m_pVLC_Player);

}

}

void CAVPlayer::Volume(int nVol)

{

if (m_pVLC_Player)

{

libvlc_audio_set_volume(m_pVLC_Player,nVol);

if(nVol == 0){

Pause();

}else if(nVol == 100){

Play();

}

}

}

void CAVPlayer::VolumeIncrease()

{

if (m_pVLC_Player)

{

int nVol = libvlc_audio_get_volume(m_pVLC_Player);

Volume((int)ceil(nVol * 1.1));

}

}

void CAVPlayer::VolumeReduce()

{

if (m_pVLC_Player)

{

int nVol = libvlc_audio_get_volume(m_pVLC_Player);

Volume((int)floor(nVol * 0.9));

}

}

int CAVPlayer::GetPos()

{

if (m_pVLC_Player)

{

return (int)(100 * libvlc_media_player_get_position(m_pVLC_Player));

}

return 0;

}

void CAVPlayer::SeekTo(int nPos)

{

if (m_pVLC_Player)

{

libvlc_media_player_set_position(m_pVLC_Player, nPos/(float)100.0);

}

}

void CAVPlayer::SeekForward()

{

int nPos = GetPos();

//SeekTo(ceil(nPos * 1.1));

SeekTo(nPos + 10);

}

void CAVPlayer::SeekBackward()

{

int nPos = GetPos();

//SeekTo(floor(nPos * 0.9));

SeekTo(nPos - 10);

}

void CAVPlayer::SetHWND( HWND hwnd )

{

if (::IsWindow(hwnd))

{

m_hWnd = hwnd;

}

}

HWND CAVPlayer::GetHWND()

{

return m_hWnd;

}

void CAVPlayer::SetCallback( pfnPosChanged pfn )

{

m_pfn = pfn;

}

pfnPosChanged CAVPlayer::GetCallback()

{

return m_pfn;

}

BOOL CAVPlayer::IsOpen()

{

return NULL != m_pVLC_Player;

}

BOOL CAVPlayer::IsPlaying()

{

if (m_pVLC_Player)

{

return libvlc_media_player_is_playing(m_pVLC_Player);

}

return FALSE;

}

__int64 CAVPlayer::GetTime()

{

if (m_pVLC_Player)

{

return libvlc_media_player_get_time(m_pVLC_Player);

}

return 0;

}

void OnVLC_EndReached( const libvlc_event_t *event, void *data )

{

}

void OnVLC_PositionChanged( const libvlc_event_t *event, void *data )

{

switch (event->type)

{

case libvlc_MediaPlayerPositionChanged:

{

float     fPos       = event->u.media_player_position_changed.new_position;

CAVPlayer *pAVPlayer = (CAVPlayer *) data;

if (pAVPlayer)

{

pfnPosChanged pfn = pAVPlayer->GetCallback();

if (pfn)

{

pfn(pAVPlayer, int(fPos * 100));

}

}

}

break;

case libvlc_MediaPlayerSnapshotTaken:

break;

default:

break;

}

}

int CAVPlayer::ScreenShot(CString strPath){

if (m_pVLC_Player)

{

int res=libvlc_video_take_snapshot(m_pVLC_Player,0,strPath.GetBuffer(0),300,200);

if(-1 == res){

AfxMessageBox("读取视频流错误!");

return -1;

}

}

return 0;

}

void CAVPlayer::VideoRecord(CString strPath){

if (m_pVLC_Player)

{

}

}

VLC 使用,布布扣,bubuko.com

时间: 2024-10-14 14:07:03

VLC 使用的相关文章

fedora 23 vlc 以root运行的方法

1: 源码安装 加入参数 --enable-root 2:vim /usr/bin/vlc 进入命令模式搜索替换%s/geteuid/getppid/g 第一种暂时还没试!

通过VLC的ActiveX进行二次开发,实现一个多媒体播放器 2011-04-10 00:57:23

http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=25498312&id=218294 通过VLC的ActiveX进行二次开发,实现一个多媒体播放器 2011-04-10 00:57:23 分类: 系统运维 首先要注册VLC的ActiveX控件. 拷贝vlc-0.8.6e\activex目录下面的axvlc.dll文件到c:\windows目录下面,然后运行命令提示符cmd.在命令提示符中输入如下命令注册该控件 REGSVR32

ubuntu 安装ffmpeg VLC

ffmpeg安装 1.下载ffmpeg源码 ffmpeg.org 2.解压 tar -jvxf ffmpeg-2.5.2.tar.bz2 3.进入目录 ./configure 1)解决 ffmpeg yasm not found, use --disable-yasm for a crippled build ref:blog.csdn.net/ranxiedao/article/details/16359183 A 如果是Windows系统, 从网上下载一个 yasm.exe 并安装在ming

为VLC增加在线字幕插件VLSub

VLC的在在线字幕插件VLSub,官网:https://github.com/exebetche/vlsub. 原理是通过搜索全球最大的字幕网站https://www.opensubtitles.org/zh,但是经过测试,中文字幕不是很多,而且中文字幕在一些版本上会出现乱码问题.所以现在来看还是迅雷影音靠谱一些,但这不是绝对的,时间问题吧. VLC下载:https://www.videolan.org/vlc/releases/2.2.0.html 安装方法: 在新版本的VLC中已经集成VLS

VLC播放RTSP视频延迟问题

VLC播放RTSP视频延迟问题 配置 VLC 以播放 RTSP/RTP 流 vlc播放rtp封装的h.264延时很大是什么原因? 开启打印: VLC的工具->消息->等级 调整为2,就可以看到VLC的错误调试信息.

用VLC搭建流媒体server

VLC开元项目相当强大,我们既能够将其作为播放核心用于二次开发,又能够将其作为高性能的流媒体server.今篇博客主要讲用VLC搭建流媒体server. VLC搭建流媒体server步骤非常easy:选择输入数据.选择输出格式.选择编码器.选择流通量.输入数据来源非常多,能够是本地文件,能够是网络流,能够是音频.甚至图片.编码器选择主要是选择音频编码器.视频编码器用以确定声音输出质量和图像质量.输出格式较多,能够是本地文件,能够是网络流,也能够是组播:流通量眼下保留.实际没有多少用处. 以下我用

VLC视频播放插件的使用

首先不得不承认,VLC是一款非常牛逼的视频播放插件,支持格式N多.但是集成到web上,尤其是google上网上资源很少,我是众里千百度,看各种文档.终于找到了,小嘿一下: 1).下载VLC应用程序vlc-2.1.3-win32.exe,官方默认集成IE和火狐插件,唯独没有google,没办法找办法 2).在google应用开发中心找VLC,VLC media PLay 3).有没有成功自己可以写代码测试 <div id="scrollDiv"> <object cla

(转)VLC播放RTP打包发送的.264文件

VLC播放RTP打包发送的.264文件 1,要有一个发送RTP包的264文件的服务器; 具体代码如下: rtp.h #include <WinSock2.h> #pragma comment(lib,"ws2_32.lib") #define PACKET_BUFFER_END (unsigned int)0x00000000 #define MAX_RTP_PKT_LENGTH 1400 #define DEST_IP "172.18.191.194"

VLC编译

http://blog.csdn.net/hdh4638/article/details/7602321 1 下载代码 ki.videolan.org/VLC_Source_code git colone git://git.videolan.org/vlc.git 2 编译 http://wiki.videolan.org/UnixCompile A 编译工具检测 % sudo apt-get install git libtool build-essential pkg-config aut

vlc源码分析(七) 调试学习HLS协议

HTTP Live Streaming(HLS)是苹果公司提出来的流媒体传输协议.与RTP协议不同的是,HLS可以穿透某些允许HTTP协议通过的防火墙. 一.HLS播放模式 (1) 点播模式(Video on demand, VOD) 点播模式是指当前时间点可以获取到所有index文件和ts文件,二级index文件中记录了所有ts文件的地址.这种模式允许客户端访问全部内容.上面的例子中就是一个点播模式下的m3u8的结构. (2) 直播模式(Live) 直播模式是指实时生成M3u8和ts文件.它的