how to store that bitstream as video file .if i want to display that bitstream as video what are the ways you can suggest ?
On Fri, 14 Feb 2020 at 15:50, <curl-library-requ...@cool.haxx.se> wrote: > Send curl-library mailing list submissions to > curl-library@cool.haxx.se > > To subscribe or unsubscribe via the World Wide Web, visit > https://cool.haxx.se/cgi-bin/mailman/listinfo/curl-library > or, via email, send a message with subject or body 'help' to > curl-library-requ...@cool.haxx.se > > You can reach the person managing the list at > curl-library-ow...@cool.haxx.se > > When replying, please edit your Subject line so it is more specific > than "Re: Contents of curl-library digest..." > > > Today's Topics: > > 1. rtsp curl code not playing video (Nishad DESHMUKH) > 2. Re: rtsp curl code not playing video (Dan Fandrich) > > > ---------------------------------------------------------------------- > > Message: 1 > Date: Fri, 14 Feb 2020 14:39:16 +0530 > From: Nishad DESHMUKH <nishaddeshmuk...@gmail.com> > To: curl-library@cool.haxx.se > Subject: rtsp curl code not playing video > Message-ID: > <CANU4-RTOr6oqk7h3KbsMwiwFHcc057= > zmtpczhbkft+gjuw...@mail.gmail.com> > Content-Type: text/plain; charset="utf-8" > > after compilation and run the link video not played . my input was > > INPUT TO PROGRAM: > ./a.out rtsp://freja.hiof.no:1935/rtplive/definst/hessdalen03.stream/ > > OUTPUT : > > RTSP request V1.0 > Project web site: https://github.com/BackupGGCode/rtsprequest > Requires curl V7.20 or greater > > curl V7.54.0 loaded > > RTSP: OPTIONS rtsp:// > freja.hiof.no:1935/rtplive/definst/hessdalen03.stream/ > RTSP/1.0 > <http://freja.hiof.no:1935/rtplive/definst/hessdalen03.stream/RTSP/1.0> > 200 OK > Server: Wowza Media Server 3.1.1 build1479 > Cache-Control: no-cache > Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, OPTIONS, ANNOUNCE, RECORD, > GET_PARAMETER > Cseq: 1 > Supported: play.basic, con.persistent > > > RTSP: DESCRIBE rtsp:// > freja.hiof.no:1935/rtplive/definst/hessdalen03.stream/ > Writing SDP to 'video.sdp' > RTSP/1.0 200 OK > Server: Wowza Media Server 3.1.1 build1479 > Cache-Control: no-cache > Expires: Fri, 14 Feb 2020 09:57:51 CET > Cseq: 2 > Content-Length: 812 > Content-Base: rtsp:// > freja.hiof.no:1935/rtplive/definst/hessdalen03.stream/ > Date: Fri, 14 Feb 2020 09:57:51 CET > Content-Type: application/sdp > Session: 1675774146;timeout=60 > > > RTSP: SETUP rtsp:// > freja.hiof.no:1935/rtplive/definst/hessdalen03.stream//trackID=2 > TRANSPORT RTP/AVP;unicast;client_port=1234-1235 > RTSP/1.0 200 OK > Server: Wowza Media Server 3.1.1 build1479 > Cache-Control: no-cache > Expires: Fri, 14 Feb 2020 09:57:51 CET > Cseq: 3 > Transport: RTP/AVP;unicast;client_port=1234-1235;source=freja.hiof.no > ;server_port=7174-7175;ssrc=6CC88579 > Date: Fri, 14 Feb 2020 09:57:51 CET > Session: 1675774146;timeout=60 > > > RTSP: PLAY rtsp://freja.hiof.no:1935/rtplive/definst/hessdalen03.stream// > RTSP/1.0 > <http://freja.hiof.no:1935/rtplive/definst/hessdalen03.stream//RTSP/1.0> > 200 OK > RTP-Info: url=trackID=1;seq=1;rtptime=3861933024,url=rtsp:// > > freja.hiof.no:1935/rtplive/definst/hessdalen03.stream//trackID=2;seq=1;rtptime=1335544388 > Server: Wowza Media Server 3.1.1 build1479 > Cache-Control: no-cache > Cseq: 4 > Range: npt=now- > Session: 1675774146;timeout=60 > > Playing video, press any key to stop ... > > RTSP: TEARDOWN rtsp:// > freja.hiof.no:1935/rtplive/definst/hessdalen03.stream// > RTSP/1.0 403 Forbidden > Server: Wowza Media Server 3.1.1 build1479 > Cseq: 5 > > SOURCE CODE : > > #include <stdio.h> > #include <stdlib.h> > #include <string.h> > > #if defined (WIN32) > # include <conio.h> /* _getch() */ > #else > # include <termios.h> > # include <unistd.h> > > static int _getch(void) > { > struct termios oldt, newt; > int ch; > tcgetattr(STDIN_FILENO, &oldt); > newt = oldt; > newt.c_lflag &= ~( ICANON | ECHO); > tcsetattr(STDIN_FILENO, TCSANOW, &newt); > ch = getchar(); > tcsetattr(STDIN_FILENO, TCSANOW, &oldt); > return ch; > } > #endif > > #include <curl/curl.h> > > #define VERSION_STR "V1.0" > > /* error handling macros */ > #define my_curl_easy_setopt(A, B, C) \ > res = curl_easy_setopt((A), (B), (C)); \ > if(res != CURLE_OK) \ > fprintf(stderr, "curl_easy_setopt(%s, %s, %s) failed: %d\n", \ > #A, #B, #C, res); > > #define my_curl_easy_perform(A) \ > res = curl_easy_perform(A); \ > if(res != CURLE_OK) \ > fprintf(stderr, "curl_easy_perform(%s) failed: %d\n", #A, res); > > > /* 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); > } > > > /* 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); > } > } > > /* 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); > } > > > /* 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); > > /* switch off using range again */ > my_curl_easy_setopt(curl, CURLOPT_RANGE, NULL); > } > > > /* 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); > } > > > /* convert url into an sdp filename */ > static void get_sdp_filename(const char *url, char *sdp_filename, > size_t namelen) > { > const char *s = strrchr(url, '/'); > strcpy(sdp_filename, "video.sdp"); > if(s != NULL) { > s++; > if(s[0] != '\0') { > snprintf(sdp_filename, namelen, "%s.sdp", s); > } > } > } > > > /* scan sdp file for media control attribute */ > static void get_media_control_attribute(const char *sdp_filename, > char *control) > { > int max_len = 256; > char *s = malloc(max_len); > FILE *sdp_fp = fopen(sdp_filename, "rb"); > control[0] = '\0'; > if(sdp_fp != NULL) { > while(fgets(s, max_len - 2, sdp_fp) != NULL) { > sscanf(s, " a = control: %s", control); > } > fclose(sdp_fp); > } > free(s); > } > > > /* main app */ > int main(int argc, char * const argv[]) > { > #if 1 > const char *transport = "RTP/AVP;unicast;client_port=1234-1235"; /* UDP > */ > #else > /* TCP */ > const char *transport = "RTP/AVP/TCP;unicast;client_port=1234-1235"; > #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: " > "https://github.com/BackupGGCode/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 > <http://192.168.0.2/media/video1%5Cn%5Cn>", 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, strlen(url) + 32); > 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 */ > snprintf(uri, strlen(url) + 32, "%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 */ > snprintf(uri, strlen(url) + 32, "%s/%s", url, control); > rtsp_setup(curl, uri, transport); > > /* start playing media stream */ > snprintf(uri, strlen(url) + 32, "%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; > } > -------------- next part -------------- > An HTML attachment was scrubbed... > URL: < > http://cool.haxx.se/pipermail/curl-library/attachments/20200214/2b395073/attachment-0001.html > > > > ------------------------------ > > Message: 2 > Date: Fri, 14 Feb 2020 11:14:48 +0100 > From: Dan Fandrich <d...@coneharvesters.com> > To: curl-library@cool.haxx.se > Subject: Re: rtsp curl code not playing video > Message-ID: <20200214101448.ga6...@coneharvesters.com> > Content-Type: text/plain; charset=iso-8859-1 > > On Fri, Feb 14, 2020 at 02:39:16PM +0530, Nishad DESHMUKH via curl-library > wrote: > > after compilation and run the link video not played . my input was > > libcurl doesn't play video. It will happily download a bitstream containing > video content and supply it to your application, but what that application > does > with that bitstream is up to it. If you want to show a video stream on an > X11 > display, you probably want to look at something like gstreamer or another > video > decoding framework. > > Dan > > > ------------------------------ > > Subject: Digest Footer > > _______________________________________________ > curl-library mailing list > curl-library@cool.haxx.se > https://cool.haxx.se/cgi-bin/mailman/listinfo/curl-library > > > ------------------------------ > > End of curl-library Digest, Vol 174, Issue 10 > ********************************************* >
------------------------------------------------------------------- Unsubscribe: https://cool.haxx.se/list/listinfo/curl-library Etiquette: https://curl.haxx.se/mail/etiquette.html