libVLC不能叠加并一起录制视频流

时间:2015-03-17 22:33:39

标签: c libvlc

我使用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;
}

2 个答案:

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