是否可以使用 libvlcsharp 将动态 marq 文本和徽标设置为视频流录制?

问题描述

大家好, 我有一个问题,也许有人可以提供一些关于如何实施或什至可能的有用想法:
我想从 IP 摄像头录制 RTSP 流,我想在录制中添加一些文本信息和徽标,以便在播放时可以查看。
为此,我首先创建了一个 MediaPlayer 元素来连接到 IP 摄像头,复制到显示器上,然后通过 UDP 重播。

using (var stream01_view = new Media(libVLC,"rtsp://192.168.10.214:5554",FromType.FromLocation))
{
    stream01_view.AddOption(
            ":sout=#duplicate{" +
            "dst=display{noaudio}," +
            "dst=std{access=udp,mux=ts,dst=:1234}");
    stream01_view.AddOption(":sout-keep");
    player.Play(stream01_view);
}

第二个流连接到本地 UDP 转换并输出文件

using (var stream01_record = new Media(libVLC,"udp://@:1234",FromType.FromLocation))
{
    stream01_record.AddOption(":sout=#transcode{sfilter=marq}:file{mux=ts,dst=VideoMarqlogo.mp4}");
    stream01_record.AddOption(":sout-keep");
    recorder.Play(stream01_record); 
}

调用MediaPlayer 方法 SetMarqueeIntSetMarqueeString 没有给出预期的结果。

解决方法

感谢 mfkl 指出正确的方向。 所以,诀窍是:

stream01_record.AddOption(":sout=#transcode{ vcodec=h264,scale=0.75," +
                    "sfilter=marq{file='marq.txt',position=9}," +
                    "vfilter=logo{file='logo.png',position=6}}" +
                   ":file{mux=ts,dst=VideoMarqLogo.mp4}");

虽然有点警告,这段代码是 CPU 密集型的。
我想知道是否有办法使用 GPU 编码来做到这一点。