vlc duplicate模块

官方code doc

vlc 的duplicate 复制流模块,归属于 stream_out 功能下的一个模块,它的作用,是将输入的stream copy多份,再输出到不同的stream_out. 类似于一个分流器,内部会申请新的 block缓冲区并复制多分,每一份但对给分支。接口完全遵守 stream_out模块的接口。文件  stream_out/duplicate.c

使用方法:

vlc = libvlc_new(0, NULL);    
media_player = libvlc_media_player_new(vlc);
//libvlc_media_add_option(media, ":sout=#duplicate{dst=display,dst=rtp{sdp=rtsp://:10086/stream}}");
libvlc_media_add_option(media, ":sout=#display");//输出到display模块
//libvlc_media_add_option(media, ":sout=#rtp{sdp=rtsp://:10086/stream}");//输出到rtsp模块
 libvlc_media_player_set_media(media_player,media);
 libvlc_media_player_play(media_player);

vlc = libvlc_new(0, NULL);	
media_player = libvlc_media_player_new(vlc);

//media =  libvlc_media_new_location(vlc,"rtsp://192.168.43.233:8989/stream");
media =  libvlc_media_new_path(vlc,"bydtest.mp4");

//libvlc_media_add_option(media, ":sout=#duplicate{dst=display,dst=rtp{sdp=rtsp://:10086/stream}}");//输出到duplicate
//libvlc_media_add_option(media, ":sout=#display");//输出到display模块
//libvlc_media_add_option(media, ":sout=#rtp{sdp=rtsp://:10086/stream}");//输出到rtsp模块

 libvlc_media_player_set_media(media_player,media);
 libvlc_media_player_play(media_player);

比如上面用 media_player 播放的时候,给media设置附件选项,":sout=#duplicate{dst=display,dst=rtp{sdp=rtsp://:10086/stream}}

表述输出 sout为 duplicate模块,duplicate模块的配置为大括号中的内容,他的下一级 输出dst=display, dst=rtp 则duplicate会再创建两个strem_out,一个为display模块,一个为rtp模块,用逗号隔开。当有输入数据给到duplicate模块,duplicate模块会copy出bloc数据,分别给到他的下一级 display 和 rtp. rtp模块的参数,由rtp后面大括号里面定. 上面演示的功能,就是给display播放的同时,复制一份数据给到rtp输出。

涉及到的代码,在 strem_out/duplicate.c.  open 的时候回根据参数创建多个dst, 被上级调用到 send 输入数据的时候回遍历下一级输出,复制block,给每一个子模块send数据。

猜你喜欢

转载自blog.csdn.net/u012459903/article/details/89402843
今日推荐