示例#1
0
    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
示例#2
0
    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
示例#3
0
 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
示例#4
0
    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
示例#5
0
 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