VLC录屏并干RTSP服务器,让RTP以TCP协议通信
VLC录屏并做RTSP服务器,让RTP以TCP协议通信
现在是要做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
------解决方案--------------------
vlc没有实现rtp的tcp协议传输,我用vlc2.0.7,在图形界面中设置只有rtp over udp输出,源码中,modules/stream_out/rtp.c的open函数中有如下一段:
现在是要做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
------解决方案--------------------
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