libVLC可以';t叠加并一起录制视频流

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

我正在使用libVLC处理和录制来自IP摄像机的视频,但在录制时无法使覆盖层正常工作。
这意味着,如果我注释掉复制流的代码以将其保存到文件中,那么覆盖就可以工作了。 但是如果我将代码保留在中,则会录制视频,但在屏幕或文件中渲染的视频上没有覆盖

在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链接,但添加“保存到文件”选项。然后在第二个媒体播放器中,您不必复制。使用链接中的示例