VLC录屏并做RTSP服务器,让RTP以TCP协议通信

neicole 2014-03-14 09:47:17
现在是要做VLC录屏,VLC作为RTSP服务器,让RTP以TCP协议通信。
现在成功开启了RTSP服务器,但是在设置RTP的通信协议的时候失败。

在官网上有这么一个参数,但是在设置了以后,跟没有设置时是一模一样,都是UDP的包。
--sout-rtp-proto={dccp,sctp,tcp,udp,udplite}
Transport protocol
This selects which transport protocol to use for RTP.

我是以代码形式写这个程序,关键代码如下:
首先是使用VLC库的初始化的
const char * const vlc_args[] =
{
"-I", "dummy", /// Don't use any interface
// "-I", "rc",
"--ignore-config", /// Don't use VLC's config
"--no-drop-late-frames", /// arrive to the video output after their intended display date
"--no-video-title-show",
// "--rtsp-host", "0.0.0.0",
// "--rtsp-port", "8554",
"--rtsp-tcp",
};
m_pInst = libvlc_new(sizeof(vlc_args) / sizeof(vlc_args[0]), vlc_args);

然后是屏幕参数的:

strTransCode:
#transcode{vcodec=h264,fps=8, venc=x264{keyint=8,min-keyint=6,preset=faster,profile=baseline,tune=zerolatency}}:rtp{proto=tcp, sdp=rtsp://:8554/screen_grab }

strScreenParam:
:live-caching=20 :no-sout-audio :no-sout-standard-sap :rtsp-caching=20 :screen-fps=8 :screen-height=768 :screen-mouse-image=mouse/mouse_arrow_16.png :screen-width=1360 :sout-keep :sout-rtp-caching=20 :udp-caching=20


最后是屏幕录制的:

libvlc_vlm_add_broadcast(m_pInst,
m_pBroadcastName,
"screen://",
strTransCode.c_str(),
1,
strScreenParam.c_str(),
1,
0);

其实我想关键起作用的就是 rtp{proto=tcp...},为什么它就是一直只是UDP呢?
上网找资料从google的第一页每个链接打开到最后一页。。。 仍然未找到问题所在。

VLC版本:2.1
开发环境:Win7 64bit + Qt 4.8
...全文
3067 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
努力加载中 2016-01-07
  • 打赏
  • 举报
回复
我也想知道 是怎么录屏的= =·······
  • 打赏
  • 举报
回复
Lz的录屏是指播放还是录像功能啊,libvlc里好像没有录像的API接口啊。
纯唇Yu弄 2015-02-04
  • 打赏
  • 举报
回复
楼主的 录屏 有声音和鼠标指针吗?
forever_44944 2014-03-14
  • 打赏
  • 举报
回复
vlc没有实现rtp的tcp协议传输,我用vlc2.0.7,在图形界面中设置只有rtp over udp输出,源码中,modules/stream_out/rtp.c的open函数中有如下一段:
if ((psz == NULL) || !strcasecmp (psz, "udp"))
        (void)0; /* default */
    else
    if (!strcasecmp (psz, "dccp"))
    {
        p_sys->proto = IPPROTO_DCCP;
        p_sys->rtcp_mux = true; /* Force RTP/RTCP mux */
    }
#if 0
    else
    if (!strcasecmp (psz, "sctp"))
    {
        p_sys->proto = IPPROTO_TCP;
        p_sys->rtcp_mux = true; /* Force RTP/RTCP mux */
    }
#endif
#if 0
    else
    if (!strcasecmp (psz, "tcp"))
    {
        p_sys->proto = IPPROTO_TCP;
        p_sys->rtcp_mux = true; /* Force RTP/RTCP mux */
    }
#endif
    else
    if (!strcasecmp (psz, "udplite") || !strcasecmp (psz, "udp-lite"))
        p_sys->proto = IPPROTO_UDPLITE;
    else
        msg_Warn (p_this, "unknown or unsupported transport protocol \"%s\"",
                  psz);
也就是只支持udp,dccp,udplite这三个参数,tcp和sctp都被注释掉了 可以考虑自己实现一下
neicole 2014-03-14
  • 打赏
  • 举报
回复
引用 1 楼 forever_44944 的回复:
vlc没有实现rtp的tcp协议传输,我用vlc2.0.7,在图形界面中设置只有rtp over udp输出,源码中,modules/stream_out/rtp.c的open函数中有如下一段:
if ((psz == NULL) || !strcasecmp (psz, "udp"))
        (void)0; /* default */
    else
    if (!strcasecmp (psz, "dccp"))
    {
        p_sys->proto = IPPROTO_DCCP;
        p_sys->rtcp_mux = true; /* Force RTP/RTCP mux */
    }
#if 0
    else
    if (!strcasecmp (psz, "sctp"))
    {
        p_sys->proto = IPPROTO_TCP;
        p_sys->rtcp_mux = true; /* Force RTP/RTCP mux */
    }
#endif
#if 0
    else
    if (!strcasecmp (psz, "tcp"))
    {
        p_sys->proto = IPPROTO_TCP;
        p_sys->rtcp_mux = true; /* Force RTP/RTCP mux */
    }
#endif
    else
    if (!strcasecmp (psz, "udplite") || !strcasecmp (psz, "udp-lite"))
        p_sys->proto = IPPROTO_UDPLITE;
    else
        msg_Warn (p_this, "unknown or unsupported transport protocol \"%s\"",
                  psz);
也就是只支持udp,dccp,udplite这三个参数,tcp和sctp都被注释掉了 可以考虑自己实现一下
谢谢~ 经这么一提醒,我也钻进了2.1.4的源码上面看了,原来还真是如此,现在还未能支持tcp协议~

2,553

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧