如何在服务器中设置RTSP Uri,期望从客户端匹配精确的uri

时间:2018-02-12 09:28:38

标签: c server rtsp

我正在尝试开发RTSP服务器,因为我是初学者,所以我不知道如何在服务器端设置RTSP URI。我找到了下面的代码,但我并不完全了解如何设置RTSP URI。

这是设置URI的功能。任何人都可以解释它是如何工作的,如果可能的话,请给我一些指示,以便更容易理解。

提前致谢!

uint16_t app_rtsp_string_cb(char *pc, int iAction, int iMaxChar)
 {
    uint16_t len = 0;
    uint16_t len_sdp;
    uint16_t len_uri;
    ip_addr_t ia;
    char uri[36];
    char *dstring;
    char *pend;

    const char *uri_str = "rtsp://%s:%d/";
    const char *sdp_description =
            "Content-Base: %s\r\n"
            "Content-Type: application/sdp\r\n"
            "Content-Length: %d\r\n"
            "\r\n";
 #define TEXTIFY(A) #A
 #if PAYLOAD_TYPE == CAMERA_FORMAT_UNCOMPRESSED
 #define VIDEO_DESCRIBE(A,B,C) \
        "m=video 0 RTP/AVP " TEXTIFY(C) "\r\n" \
        "a=control:%s\r\n" \
        "a=rtpmap:" TEXTIFY(C) " raw/90000\r\n" \
        "a=fmtp:" TEXTIFY(C) " sampling=YCbCr-4:2:2;" \
        "width=" TEXTIFY(A) ";height=" TEXTIFY(B) ";depth=16;" \
        "rate=90000;colorimetry=BT709-2\r\n"
 #elif PAYLOAD_TYPE == CAMERA_FORMAT_MJPEG
 #define VIDEO_DESCRIBE(A,B,C) \
        "m=video 0 RTP/AVP " TEXTIFY(C) "\r\n" \
        "a=control:%s\r\n" \
        "a=rtpmap:" TEXTIFY(C) " JPEG/90000\r\n" \
        /*"width=" TEXTIFY(A) ";height=" TEXTIFY(B) ";depth=16;" */ \
        /*"rate=90000;colorimetry=BT709-2\r\n"*/
 #endif

    const char *sdp_video = VIDEO_DESCRIBE(FRAME_WIDTH, FRAME_HEIGHT, FRAME_PT);

    ia = net_get_ip();
    dstring = ipaddr_ntoa(&ia);

    // Space for terminating character.
    iMaxChar--;

    switch (iAction)
    {
    case RTSP_HANDLER_ACTION_DESCRIBE:
        len_uri = sprintf(uri, uri_str, dstring, RTSP_SERVER_PORT);
        // Work out length of content - the sdp_uncompressed_video part.
        len_sdp = strlen(sdp_video);
        // remove %s from a=control:%s\r\n
        len_sdp -= 2;
        // add in control URI
        len_sdp += len_uri;
        len = snprintf(pc, iMaxChar, sdp_description, uri, len_sdp);
        if (len + len_sdp < iMaxChar)
        {
            pend = &pc[len];
            snprintf(pend, iMaxChar - len, sdp_video, uri);
        }
        break;
    case RTSP_HANDLER_ACTION_URI:
        len = snprintf(pc, iMaxChar, uri_str, dstring, RTSP_SERVER_PORT);
        break;
    default:
        *pc = '\0';
    }
    pc[iMaxChar] = '\0';

    len = strlen(pc);

    return len;
 }

0 个答案:

没有答案