·您当前的位置:主页 > 技术教程 > live555技术 >

[Live555]live555与RTSP server调试

时间:2015-06-29 11:44酷播
[Live555]live555与RTSP server调试

在基于TI DM8168 平台上移植live555 进行视频直播,DM8168采集的后的图像,经M3_video编码为H264视频流(编码后也是一帧一帧的数据),碰到以下问题:
(1): 问题:
用VLC作为RTSP客户端连接DM8168, 只能播放开始几帧,之后画面变乱,并无法播放;
(2): 原因:
H264编码后的帧只有第一帧是IDR帧,之后没有IDR帧.
(3): 解决办法:
修改DM8168建立encode link时的参数,以便周期的产生IDR帧:
encPrm.chCreateParams[i].defaultDynamicParams.intraFrameInterval = 25;
encPrm.chCreateParams[i].encodingPreset = XDM_USER_DEFINED;

(1): 问题
用科达NVR作为客户端连接DM8168,发现NVR的视频画面和录像会出现停止,并且提示“前端
掉线”的告警,过了1分钟后又开始正常显示和录像.
(2): 原因
在liveMedia/RTSPServer.cpp中将DEBUG宏打开,跟踪NVR整个连接过程,结果发现如下信息:
RTSP client session (id "555C5F62", stream name "id1") has timed out (due to inactivity)
而正常的连接打印为:
RTSP client session (id "023C11D5", stream name "id1"): Liveness indication
RTSP client session (id "023C11D5", stream name "id1"): Liveness indication
意思就是一旦RTSP的客户端连接成功后,需要周期的想服务端发送心跳包,如果超过某个设定的时间,
RTSP 服务端则会主动关闭这个客户端的连接,因此导致科达的NVR被关闭,之后又重新连接,因此导致
视频显示和画面中断又继续。
(3): 解决办法:
调整RTSP服务端的超时时间值:fReclamationTestSeconds,而这个值在
liveMedia/include/RTSPServer.hh有初始值:
static RTSPServer* createNew(UsageEnvironment& env, Port ourPort = 554,
UserAuthenticationDatabase* authDatabase = NULL,
unsigned reclamationTestSeconds = 65);
在构造函数createNew的实现中,在初始化参数列表亦可以进行修改,
RTSPServer::RTSPServer(UsageEnvironment& env,
int ourSocket, Port ourPort,
UserAuthenticationDatabase* authDatabase,
unsigned reclamationTestSeconds): Medium(env), ............... fReclamationTestSeconds(reclamationTestSeconds)

因此,在自己的应用程序创建 RTSPServer的时候,修改这个值:
// Create the RTSP server:
RTSPServer* rtspServer = RTSPServer::createNew(*env, 8554, authDB, 100);

热门文章推荐

请稍候...