Пример #1
0
/* send RTSP OPTIONS request */
static void rtsp_options(CURL *curl, const char *uri)
{
  CURLcode res = CURLE_OK;
  printf("\nRTSP: OPTIONS %s\n", uri);
  my_curl_easy_setopt(curl, CURLOPT_RTSP_STREAM_URI, uri);
  my_curl_easy_setopt(curl, CURLOPT_RTSP_REQUEST, (long)CURL_RTSPREQ_OPTIONS);
  my_curl_easy_perform(curl);
}
Пример #2
0
/* send RTSP PLAY request */
static void rtsp_play(CURL *curl, const char *uri, const char *range)
{
  CURLcode res = CURLE_OK;
  printf("\nRTSP: PLAY %s\n", uri);
  my_curl_easy_setopt(curl, CURLOPT_RTSP_STREAM_URI, uri);
  my_curl_easy_setopt(curl, CURLOPT_RANGE, range);
  my_curl_easy_setopt(curl, CURLOPT_RTSP_REQUEST, (long)CURL_RTSPREQ_PLAY);
  my_curl_easy_perform(curl);
}
Пример #3
0
/* send RTSP SETUP request */
static void rtsp_setup(CURL *curl, const char *uri, const char *transport)
{
  CURLcode res = CURLE_OK;
  printf("\nRTSP: SETUP %s\n", uri);
  printf("      TRANSPORT %s\n", transport);
  my_curl_easy_setopt(curl, CURLOPT_RTSP_STREAM_URI, uri);
  my_curl_easy_setopt(curl, CURLOPT_RTSP_TRANSPORT, transport);
  my_curl_easy_setopt(curl, CURLOPT_RTSP_REQUEST, (long)CURL_RTSPREQ_SETUP);
  my_curl_easy_perform(curl);
}
Пример #4
0
/* send RTSP TEARDOWN request */
static void rtsp_teardown(CURL *curl, const char *uri)
{
  CURLcode res = CURLE_OK;
  printf("\nRTSP: TEARDOWN %s\n", uri);
  my_curl_easy_setopt(curl, CURLOPT_RTSP_REQUEST, (long)CURL_RTSPREQ_TEARDOWN);
  my_curl_easy_perform(curl);
}
Пример #5
0
/* send RTSP DESCRIBE request and write sdp response to a file */
static void rtsp_describe(CURL *curl, const char *uri,
                          const char *sdp_filename)
{
  CURLcode res = CURLE_OK;
  FILE *sdp_fp = fopen(sdp_filename, "wb");
  printf("\nRTSP: DESCRIBE %s\n", uri);
  if(sdp_fp == NULL) {
    fprintf(stderr, "Could not open '%s' for writing\n", sdp_filename);
    sdp_fp = stdout;
  }
  else {
    printf("Writing SDP to '%s'\n", sdp_filename);
  }
  my_curl_easy_setopt(curl, CURLOPT_WRITEDATA, sdp_fp);
  my_curl_easy_setopt(curl, CURLOPT_RTSP_REQUEST, (long)CURL_RTSPREQ_DESCRIBE);
  my_curl_easy_perform(curl);
  my_curl_easy_setopt(curl, CURLOPT_WRITEDATA, stdout);
  if(sdp_fp != stdout) {
    fclose(sdp_fp);
  }
}
Пример #6
0
/* main app */
int main(int argc, char *const argv[])
{
#if 1
	const char *transport = "RTP/AVP;unicast;client_port=1234-1235";	/* UDP */
#else
	const char *transport = "RTP/AVP/TCP;unicast;client_port=1234-1235";	/* TCP */
#endif
	const char *range = "0.000-";
	int rc = EXIT_SUCCESS;
	char *base_name = NULL;

	printf("\nRTSP request %s\n", VERSION_STR);
	printf("    Project web site: http://code.google.com/p/rtsprequest/\n");
	printf("    Requires cURL V7.20 or greater\n\n");

	/* check command line */
	if ((argc != 2) && (argc != 3)) {
		base_name = strrchr(argv[0], '/');
		if (base_name == NULL) {
			base_name = strrchr(argv[0], '\\');
		}
		if (base_name == NULL) {
			base_name = argv[0];
		} else {
			base_name++;
		}
		printf("Usage:   %s url [transport]\n", base_name);
		printf("         url of video server\n");
		printf
		    ("         transport (optional) specifier for media stream protocol\n");
		printf("         default transport: %s\n", transport);
		printf("Example: %s rtsp://192.168.0.2/media/video1\n\n",
		       base_name);
		rc = EXIT_FAILURE;
	} else {
		const char *url = argv[1];
		char *uri = malloc(strlen(url) + 32);
		char *sdp_filename = malloc(strlen(url) + 32);
		char *control = malloc(strlen(url) + 32);
		CURLcode res;
		get_sdp_filename(url, sdp_filename);
		if (argc == 3) {
			transport = argv[2];
		}

		/* initialize curl */
		res = curl_global_init(CURL_GLOBAL_ALL);
		if (res == CURLE_OK) {
			curl_version_info_data *data =
			    curl_version_info(CURLVERSION_NOW);
			CURL *curl;
			fprintf(stderr, "    cURL V%s loaded\n", data->version);

			/* initialize this curl session */
			curl = curl_easy_init();
			if (curl != NULL) {
				my_curl_easy_setopt(curl, CURLOPT_VERBOSE, 0L);
				my_curl_easy_setopt(curl, CURLOPT_NOPROGRESS,
						    1L);
				my_curl_easy_setopt(curl, CURLOPT_HEADERDATA,
						    stdout);
				my_curl_easy_setopt(curl, CURLOPT_URL, url);

				/* request server options */
				sprintf(uri, "%s", url);
				rtsp_options(curl, uri);

				/* request session description and write response to sdp file */
				rtsp_describe(curl, uri, sdp_filename);

				/* get media control attribute from sdp file */
				get_media_control_attribute(sdp_filename,
							    control);

				/* setup media stream */
				sprintf(uri, "%s/%s", url, control);
				rtsp_setup(curl, uri, transport);

				/* start playing media stream */
				sprintf(uri, "%s/", url);
				rtsp_play(curl, uri, range);
				printf
				    ("Playing video, press any key to stop ...");
				_getch();
				printf("\n");

				/* teardown session */
				rtsp_teardown(curl, uri);

				/* cleanup */
				curl_easy_cleanup(curl);
				curl = NULL;
			} else {
				fprintf(stderr, "curl_easy_init() failed\n");
			}
			curl_global_cleanup();
		} else {
			fprintf(stderr, "curl_global_init(%s) failed: %d\n",
				"CURL_GLOBAL_ALL", res);
		}
		free(control);
		free(sdp_filename);
		free(uri);
	}

	return rc;
}