def make_response(self): """读取远程的视频流,并伪装成本地的响应返回""" header, data_iter = self.get_stream() if not data_iter: return Response('error', status=500) if self.video_type == "mp4": resp = Response(data_iter, status=206) # 状态码需设置为 206,否则无法拖动进度条 resp.content_range = header.get('Content-Range', None) elif self.video_type == "hls": raw_data = next(data_iter).decode( 'utf-8') # next 读取一块数据,一般 m3u8 文件不会超过 512k fixed_data = self.fix_m3u8(raw_data) resp = Response(fixed_data, status=200) else: resp = Response(data_iter, status=200) resp.content_range = header.get('Content-Range', None) resp.content_type = header.get('Content-Type', None) # 设置其它响应头的信息 # resp.content_length = header.get('Content-Length', 0) return resp
def make_response(self) -> requests.Response: """读取远程的视频流,并伪装成本地的响应返回给客户端""" header, data_iter = self._get_stream_with_range() if not data_iter: return Response("error", status=500) if not self._video_format: self._video_format = self.detect_video_format() if self._video_format == "hls": resp = Response("M3U8 Video is no need to use proxy", status=200) # m3u8 无需代理 elif self._video_format == "mp4": resp = Response(data_iter, status=206) # 状态码需设置为 206, 否则无法拖动进度条 resp.content_range = header.get("Content-Range", None) # 将服务器的响应头的信息作为代理的响应头 resp.content_type = header.get("Content-Type", None) else: resp = Response(data_iter, status=200) resp.content_range = header.get("Content-Range", None) resp.content_type = header.get("Content-Type", None) # 返回响应给客户端 return resp
def make_response(self): """读取远程的视频流,并伪装成本地的响应返回""" header, data_iter = self.get_stream() if self.type == "hls": resp = Response(data_iter, status=200) elif self.type == "mp4": resp = Response(data_iter, status=206) # 状态码需设置为 206,否则无法拖动进度条 resp.content_range = header.get('Content-Range', None) else: resp = Response(data_iter, status=200) resp.content_type = header.get('Content-Type', None) # 设置其它响应头的信息 resp.content_length = header.get('Content-Length', None) return resp
def return_video(self): with open(self.item.path) as file: file.seek(self.offset) data = file.read(self.count) byte_array = bytearray(data) response = Response('Partial Content') response.status_code = 206 response.content_length = self.count response.content_range = 'bytes ' + self.content_range + '/' + self.file_size_in_str response.content_type = self.video_condition.mime response.data = byte_array return response
def bad_range(self): response = Response('Range Not Satisfiable') response.status_code = 416 response.content_range = 'bytes: */' + self.file_size_in_str response.content_length = 0 return response