EasyPlayer播放海康大华RTSP流时RTSPClient客户端连接兼容问题的解决

在之前的博客《EasyPlayer RTSP播放器对RTSP播放地址url的通用兼容修改意见》中,我描述了遇到的一个客户在播放大华某款摄像机时地址不兼容的问题,这不,团队刚刚参考我的这个意见修改了EasyPlayer播放器内核EasyRTSPClient中的url解析接口,果然,又有一家厂家的摄像机出现了url兼容的问题:

EasyPlayer RTSP播放器

EasyPlayer RTSP播放器

究其原因:包括大厂家海康的某些IPC型号都会有这个问题,程序兼容性的问题,如果没有严格按照他的正则来输入url地址,都会默认成主码流的播放地址,也就是上图中所示的无论播放什么,都会是播放成主码流,而vlc不会,那么就是我们说到的vlc对url的兼容了!

EasyPlayer修改方法

EasyPlayer的核心EasyRTSPClient修改了对url的解析,直接将携带用户名密码的url地址分别拆解成url,username,password三个参数,传入底层,这样就能做到完全的兼容了:

    char    szURL[512] = {0};
    char    szUsername[64] = {0};
    char    szPassword[64] = {0};
    string finalRTSPAddr;
    string user;
    string password;
    string address;
    int port;
    string path;
    int iRet = ParsingRTSPURL(_url, user, password, address, port, path);
    string strSourceUrl;
    if(iRet > 0 && (!user.empty() || !password.empty()))
    {
        sprintf(szURL, "rtsp://%s:%d/%s", address.c_str(), port, path.c_str());
        sprintf(szUsername, "%s", user.c_str());
        sprintf(szPassword, "%s", password.c_str());
    }
    else
    {
        strcpy(szURL, _url);
    }

    if( _username && strlen(_username) > 0 && _password && strlen(_password))
    {
        sprintf(szUsername, "%s", _username);
        sprintf(szPassword, "%s", _password);
    }

    printf("\n\nURL: %s\nUsername: %s\nPassword: %s\n\n\n", szURL, szUsername, szPassword);

EasyPlayer

EasyPlayer是由EasyDarwin开源团队开发和维护的一个流媒体播放器项目,目前有RTSP版和Pro版两个版本,RTSP支持Windows(支持多窗口、包含ActiveXnpAPI Web插件)、Android平台,iOS平台,视频支持H.264H.265MPEG4MJPEG,音频支持G711AG711UG726AAC,支持RTSP over TCP/UDP,支持硬解码,是一套极佳的RTSP流播放组件;

EasyPlayer Pro版支持RTSP、RTMP、HTTP、HLS等各种流媒体协议播放,稳定、高效、可靠,支持Windows、Android、iOS!

获取更多信息

邮件:support@easydarwin.org

WEB:www.EasyDarwin.org

Copyright © EasyDarwin.org 2012-2017

EasyDarwin

posted @ 2017-12-09 16:22  Babosa  阅读(523)  评论(0编辑  收藏  举报