PHP检查RTSP是否正常工作

问题描述 投票:1回答:2

我想检查RTSP网址是否正常工作,或者不使用PHP。

$url = "rtsp://somedomain.com/streamingdir";
if(is_working($url)){
echo "works!";
}else{
echo "fallen...";
}

is_working不存在,我要这个功能,谢谢

php rtsp
2个回答
1
投票

我认为您可以使用php套接字客户端连接到RTSP服务器,然后调用rtsp describe方法。如果收到类似“ RTSP / 1.0 200 OK”的响应,则一切运行正常。

function is_working($url){
    $urlparsed = parse_url($url);
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    if($socket == FALSE) return false;
    if(@socket_connect($socket, $urlparsed['host'], $urlparsed['port'])){
        $headers = array();
        $headers[] = "DESCRIBE {$url} RTSP/1.0";
        $headers[] = "User-Agent: WMPlayer/12.00.7600.16385 guid/3300AD50-2C39-46C0-AE0A-39E48EB3C868";
        $headers[] = "Accept: application/sdp";
        $headers[] = "Accept-Charset: UTF-8, *;q=0.1";
        $headers[] = "X-Accept-Authentication: Negotiate, NTLM, Digest";
        $headers[] = "Accept-Language: en-US, *;q=0.1";
        $headers[] = "CSeq: 1";
        $headerString = implode("\r\n", $headers) . "\r\n\r\n";
        if(false === socket_write($socket, $headerString, strlen($headerString))){
            socket_close($socket);
            return false;
        }else{
            $response = '';
            if(false === socket_recv($socket, $response, 2048,MSG_PEEK)){
                socket_close($socket);
                return false;
            }else{
                //var_dump($response);
                if(strpos($response,"RTSP/1.0 200 OK") !== FALSE){
                    return true;
                }else{
                    return false;
                }
                socket_close($socket);
            }
        }

    }else{
        return false;
    }
}

is_working("rtsp://your-url.com:1935/test.sdp");

使用行“ var_dump($ response);”可视化RTSP响应。希望对您有所帮助。


0
投票

我从相机上得到的

RTSP / 1.0 401未经授权的CSeq:1 WWW-Authenticate:Digest realm =“登录到3E072F5PAL00180”,nonce =“ bf2693784e774fb41b569ca02d8abe54”

每次刷新时,随机数都会改变,我想这正是它应该做的。

我读到我必须将用户名和密码以及其他一些数据与MD5一起创建,并创建一个字符串返回给摄像机以对$ answer进行身份验证,直到摄像机答复RTSP / 1.0 200 OK为止

有人编写一些代码来创建所需的答案?

我想到了使用现有套接字发送命令的想法。 socket_write($ socket,$ answer);

然后阅读以了解相机是否接受。

© www.soinside.com 2019 - 2024. All rights reserved.