我使用libVLC处理和录制来自IP摄像机的视频,但在录制时无法使叠加层工作。
这意味着如果我注释掉复制流的代码以将其保存到文件 - 覆盖层可以工作。
但是,如果我保留代码 - 视频会被录制,但在屏幕上或文件中的渲染视频上都没有覆盖。
在Windows 7(x64)上使用libVLC 2.06。但是这个问题在32位版本中没有改变。
Visual Studio中的Console项目源:
// 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;
}
答案 0 :(得分:0)
在您的选项中尝试"--sub-source=marq"
,而不是"--sub-filter=marq"
答案 1 :(得分:0)
当文件扩展名为.mpg时,为什么使用mux = ts选项? 在此链接https://wiki.videolan.org/Documentation:Streaming_HowTo/Receive_and_Save_a_Stream/中,您可以看到一些muxer选项。 对于你的问题,我建议创建不同的媒体播放器。创建一个只有rtsp链接和叠加层的媒体播放器,然后创建另一个媒体播放器再次给出rtsp链接,但添加了保存到文件选项。然后在第二个媒体播放器,你不必复制。请使用链接中的示例。