libVLC可以';t叠加并一起录制视频流
我正在使用libVLC处理和录制来自IP摄像机的视频,但在录制时无法使覆盖层正常工作。libVLC可以';t叠加并一起录制视频流,c,libvlc,C,Libvlc,我正在使用libVLC处理和录制来自IP摄像机的视频,但在录制时无法使覆盖层正常工作。 这意味着,如果我注释掉复制流的代码以将其保存到文件中,那么覆盖就可以工作了。 但是如果我将代码保留在中,则会录制视频,但在屏幕或文件中渲染的视频上没有覆盖 在Windows7(x64)上使用libvlc2.06。但是这个问题在32位版本中没有改变 Visual Studio中控制台项目的源代码: // Vlc_ConsoleApp.cpp : Defines the entry point for the c
这意味着,如果我注释掉复制流的代码以将其保存到文件中,那么覆盖就可以工作了。 但是如果我将代码保留在中,则会录制视频,但在屏幕或文件中渲染的视频上没有覆盖 在Windows7(x64)上使用libvlc2.06。但是这个问题在32位版本中没有改变 Visual Studio中控制台项目的源代码:
// Vlc_ConsoleApp.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <vlc/vlc.h>
#include <windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
libvlc_instance_t * inst;
libvlc_media_player_t *mp;
libvlc_media_t *m;
char* arguments[] = { "-I",
"dummy",
"--ignore-config",
"--no-video-title",
"--sub-filter=marq",
"--plugin-path=C:/Software_Development/Software_Libraries/VLC/vlc-2.0.6_x64/plugins"};
char* duplicateStreamOption = ":sout=#stream_out_duplicate{dst=display,dst=std{access=file,sub-filter=marq,mux=ts,dst=c:/temp/test_go.mpg}}";
/* Load the VLC engine */
inst = libvlc_new (6, arguments);
/* Create a new item */
m = libvlc_media_new_location (inst, "rtsp://@192.168.2.168");
/* add option to record duplicate stream to file */
/* if I comment this out - then marquee works */
//libvlc_media_add_option(m, duplicateStreamOption);
/* 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);
Sleep (10000); /* Let it play for 10 seconds */
/* throw up a marquee */
libvlc_video_set_marquee_int(mp, libvlc_marquee_Enable, 1);
libvlc_video_set_marquee_string(mp, libvlc_marquee_Text, "Hello- Marquee");
libvlc_video_set_marquee_int(mp, libvlc_marquee_Opacity, 50);
libvlc_video_set_marquee_int(mp, libvlc_marquee_X, 10);
libvlc_video_set_marquee_int(mp, libvlc_marquee_Y, 10);
libvlc_video_set_marquee_int(mp, libvlc_marquee_Timeout, 4000); // 4 secs
libvlc_video_set_marquee_int(mp, libvlc_marquee_Size, 40);
libvlc_video_set_marquee_int(mp, libvlc_marquee_Color, 0xFF0000);
Sleep (10000); /* play some more */
/* Stop playing */
libvlc_media_player_stop (mp);
/* Free the media_player */
libvlc_media_player_release (mp);
libvlc_release (inst);
return 0;
}
//Vlc_ConsoleApp.cpp:定义控制台应用程序的入口点。
//
#包括“stdafx.h”
#包括
#包括
#包括
#包括
int _tmain(int argc,_TCHAR*argv[]
{
libvlc_实例_t*inst;
libvlc_media_player_t*mp;
libvlc_media_t*m;
字符*参数[]={“-I”,
“哑巴”,
“--忽略配置”,
“--没有视频标题”,
“--子过滤器=marq”,
“--plugin path=C:/Software_Development/Software_Libraries/VLC/VLC-2.0.6_x64/plugins”};
char*duplicateStreamOption=“:sout=#stream_out_duplicate{dst=display,dst=std{access=file,sub-filter=marq,mux=ts,dst=c:/temp/test_go.mpg}”;
/*加载VLC发动机*/
inst=libvlc_new(6,参数);
/*创建一个新项目*/
m=libvlc_media_new_location(说明,“rtsp://@192.168.2.168”);
/*添加将重复流记录到文件的选项*/
/*如果我把这个注释掉,那么选框就行了*/
//libvlc_media_add_选项(m,duplicateStreamOption);
/*创建媒体播放器播放环境*/
mp=libvlc_media_player_new_from_media(m);
/*现在没有必要保留媒体*/
libvlc_媒体发布(m);
/*播放媒体播放器*/
媒体播放器播放(mp);
睡眠(10000);/*让它播放10秒钟*/
/*竖起帐篷*/
libvlc_video_set_marquee_int(mp,libvlc_marquee_Enable,1);
libvlc_video_set_marquee_string(mp,libvlc_marquee_文本,“Hello-marquee”);
libvlc_video_set_marquee_int(mp,libvlc_marquee_不透明度,50);
libvlc_video_set_marquee_int(mp,libvlc_marquee_X,10);
libvlc_video_set_marquee_int(mp,libvlc_marquee_Y,10);
libvlc_video_set_marquee_int(mp,libvlc_marquee_Timeout,4000);//4秒
libvlc_video_set_marquee_int(mp,libvlc_marquee_大小,40);
libvlc_video_set_marquee_int(mp,libvlc_marquee_Color,0xFF0000);
睡眠(10000);/*多玩一些*/
/*别玩了*/
媒体播放器停止(mp);
/*释放媒体播放器*/
媒体播放器发行版(mp);
libvlc_发布(inst);
返回0;
}
在您的选项中尝试使用--sub-source=marq“而不是--sub-filter=marq”当文件扩展名为.mpg时,为什么要使用mux=ts选项?
在这个链接中,您可以看到一些muxer选项。
对于您的问题,我建议您创建不同的媒体播放器。创建一个仅包含rtsp链接和覆盖的媒体播放器,然后创建另一个媒体播放器,再次提供rtsp链接,但添加“保存到文件”选项。然后在第二个媒体播放器中,您不必复制。使用链接中的示例