mirror of
				https://git.ffmpeg.org/ffmpeg.git
				synced 2025-10-31 07:40:55 +00:00 
			
		
		
		
	avformat: Add the https protocol
Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
		
							parent
							
								
									558d192d23
								
							
						
					
					
						commit
						183baeadca
					
				
					 6 changed files with 30 additions and 5 deletions
				
			
		|  | @ -57,6 +57,7 @@ easier to use. The changes are: | ||||||
| - 4:2:2 H.264 decoding support | - 4:2:2 H.264 decoding support | ||||||
| - Pulseaudio input device | - Pulseaudio input device | ||||||
| - replacement Indeo 3 decoder | - replacement Indeo 3 decoder | ||||||
|  | - TLS/SSL and HTTPS protocol support | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| version 0.7: | version 0.7: | ||||||
|  |  | ||||||
							
								
								
									
										1
									
								
								configure
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								configure
									
										
									
									
										vendored
									
									
								
							|  | @ -1478,6 +1478,7 @@ x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes" | ||||||
| gopher_protocol_deps="network" | gopher_protocol_deps="network" | ||||||
| http_protocol_deps="network" | http_protocol_deps="network" | ||||||
| http_protocol_select="tcp_protocol" | http_protocol_select="tcp_protocol" | ||||||
|  | https_protocol_select="tls_protocol" | ||||||
| mmsh_protocol_select="http_protocol" | mmsh_protocol_select="http_protocol" | ||||||
| mmst_protocol_deps="network" | mmst_protocol_deps="network" | ||||||
| rtmp_protocol_select="tcp_protocol" | rtmp_protocol_select="tcp_protocol" | ||||||
|  |  | ||||||
|  | @ -322,6 +322,7 @@ OBJS-$(CONFIG_CRYPTO_PROTOCOL)           += crypto.o | ||||||
| OBJS-$(CONFIG_FILE_PROTOCOL)             += file.o | OBJS-$(CONFIG_FILE_PROTOCOL)             += file.o | ||||||
| OBJS-$(CONFIG_GOPHER_PROTOCOL)           += gopher.o | OBJS-$(CONFIG_GOPHER_PROTOCOL)           += gopher.o | ||||||
| OBJS-$(CONFIG_HTTP_PROTOCOL)             += http.o httpauth.o | OBJS-$(CONFIG_HTTP_PROTOCOL)             += http.o httpauth.o | ||||||
|  | OBJS-$(CONFIG_HTTPS_PROTOCOL)            += http.o httpauth.o | ||||||
| OBJS-$(CONFIG_MMSH_PROTOCOL)             += mmsh.o mms.o asf.o | OBJS-$(CONFIG_MMSH_PROTOCOL)             += mmsh.o mms.o asf.o | ||||||
| OBJS-$(CONFIG_MMST_PROTOCOL)             += mmst.o mms.o asf.o | OBJS-$(CONFIG_MMST_PROTOCOL)             += mmst.o mms.o asf.o | ||||||
| OBJS-$(CONFIG_MD5_PROTOCOL)              += md5proto.o | OBJS-$(CONFIG_MD5_PROTOCOL)              += md5proto.o | ||||||
|  |  | ||||||
|  | @ -241,6 +241,7 @@ void av_register_all(void) | ||||||
|     REGISTER_PROTOCOL (FILE, file); |     REGISTER_PROTOCOL (FILE, file); | ||||||
|     REGISTER_PROTOCOL (GOPHER, gopher); |     REGISTER_PROTOCOL (GOPHER, gopher); | ||||||
|     REGISTER_PROTOCOL (HTTP, http); |     REGISTER_PROTOCOL (HTTP, http); | ||||||
|  |     REGISTER_PROTOCOL (HTTPS, https); | ||||||
|     REGISTER_PROTOCOL (MMSH, mmsh); |     REGISTER_PROTOCOL (MMSH, mmsh); | ||||||
|     REGISTER_PROTOCOL (MMST, mmst); |     REGISTER_PROTOCOL (MMST, mmst); | ||||||
|     REGISTER_PROTOCOL (MD5,  md5); |     REGISTER_PROTOCOL (MD5,  md5); | ||||||
|  |  | ||||||
|  | @ -92,8 +92,8 @@ void ff_http_init_auth_state(URLContext *dest, const URLContext *src) | ||||||
| /* return non zero if error */ | /* return non zero if error */ | ||||||
| static int http_open_cnx(URLContext *h) | static int http_open_cnx(URLContext *h) | ||||||
| { | { | ||||||
|     const char *path, *proxy_path; |     const char *path, *proxy_path, *lower_proto = "tcp"; | ||||||
|     char hostname[1024], hoststr[1024]; |     char hostname[1024], hoststr[1024], proto[10]; | ||||||
|     char auth[1024]; |     char auth[1024]; | ||||||
|     char path1[1024]; |     char path1[1024]; | ||||||
|     char buf[1024]; |     char buf[1024]; | ||||||
|  | @ -109,7 +109,8 @@ static int http_open_cnx(URLContext *h) | ||||||
|     /* fill the dest addr */ |     /* fill the dest addr */ | ||||||
|  redo: |  redo: | ||||||
|     /* needed in any case to build the host string */ |     /* needed in any case to build the host string */ | ||||||
|     av_url_split(NULL, 0, auth, sizeof(auth), hostname, sizeof(hostname), &port, |     av_url_split(proto, sizeof(proto), auth, sizeof(auth), | ||||||
|  |                  hostname, sizeof(hostname), &port, | ||||||
|                  path1, sizeof(path1), s->location); |                  path1, sizeof(path1), s->location); | ||||||
|     ff_url_join(hoststr, sizeof(hoststr), NULL, NULL, hostname, port, NULL); |     ff_url_join(hoststr, sizeof(hoststr), NULL, NULL, hostname, port, NULL); | ||||||
| 
 | 
 | ||||||
|  | @ -123,10 +124,15 @@ static int http_open_cnx(URLContext *h) | ||||||
|         else |         else | ||||||
|             path = path1; |             path = path1; | ||||||
|     } |     } | ||||||
|  |     if (!strcmp(proto, "https")) { | ||||||
|  |         lower_proto = "tls"; | ||||||
|  |         if (port < 0) | ||||||
|  |             port = 443; | ||||||
|  |     } | ||||||
|     if (port < 0) |     if (port < 0) | ||||||
|         port = 80; |         port = 80; | ||||||
| 
 | 
 | ||||||
|     ff_url_join(buf, sizeof(buf), "tcp", NULL, hostname, port, NULL); |     ff_url_join(buf, sizeof(buf), lower_proto, NULL, hostname, port, NULL); | ||||||
|     err = ffurl_open(&hd, buf, AVIO_FLAG_READ_WRITE); |     err = ffurl_open(&hd, buf, AVIO_FLAG_READ_WRITE); | ||||||
|     if (err < 0) |     if (err < 0) | ||||||
|         goto fail; |         goto fail; | ||||||
|  | @ -509,6 +515,7 @@ http_get_file_handle(URLContext *h) | ||||||
|     return ffurl_get_file_handle(s->hd); |     return ffurl_get_file_handle(s->hd); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | #if CONFIG_HTTP_PROTOCOL | ||||||
| URLProtocol ff_http_protocol = { | URLProtocol ff_http_protocol = { | ||||||
|     .name                = "http", |     .name                = "http", | ||||||
|     .url_open            = http_open, |     .url_open            = http_open, | ||||||
|  | @ -520,3 +527,17 @@ URLProtocol ff_http_protocol = { | ||||||
|     .priv_data_size      = sizeof(HTTPContext), |     .priv_data_size      = sizeof(HTTPContext), | ||||||
|     .priv_data_class     = &httpcontext_class, |     .priv_data_class     = &httpcontext_class, | ||||||
| }; | }; | ||||||
|  | #endif | ||||||
|  | #if CONFIG_HTTPS_PROTOCOL | ||||||
|  | URLProtocol ff_https_protocol = { | ||||||
|  |     .name                = "https", | ||||||
|  |     .url_open            = http_open, | ||||||
|  |     .url_read            = http_read, | ||||||
|  |     .url_write           = http_write, | ||||||
|  |     .url_seek            = http_seek, | ||||||
|  |     .url_close           = http_close, | ||||||
|  |     .url_get_file_handle = http_get_file_handle, | ||||||
|  |     .priv_data_size      = sizeof(HTTPContext), | ||||||
|  |     .priv_data_class     = &httpcontext_class, | ||||||
|  | }; | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | @ -24,7 +24,7 @@ | ||||||
| #include "libavutil/avutil.h" | #include "libavutil/avutil.h" | ||||||
| 
 | 
 | ||||||
| #define LIBAVFORMAT_VERSION_MAJOR 53 | #define LIBAVFORMAT_VERSION_MAJOR 53 | ||||||
| #define LIBAVFORMAT_VERSION_MINOR 11 | #define LIBAVFORMAT_VERSION_MINOR 12 | ||||||
| #define LIBAVFORMAT_VERSION_MICRO  0 | #define LIBAVFORMAT_VERSION_MICRO  0 | ||||||
| 
 | 
 | ||||||
| #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ | #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Martin Storsjö
						Martin Storsjö