Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 通过代理将数据流式传输到VideoPlayerController_Flutter_Dart_Networking_Video_Proxy - Fatal编程技术网

Flutter 通过代理将数据流式传输到VideoPlayerController

Flutter 通过代理将数据流式传输到VideoPlayerController,flutter,dart,networking,video,proxy,Flutter,Dart,Networking,Video,Proxy,我正在尝试在我的应用程序中创建代理服务器,以便缓存视频。打开视频时,我使用带有 VideoPlayerController.network(“127.0.0.1:8080/http://127.0.0.1:8080/99e61720-935c-494e-aaab-0c2529716311.mp4”)由我们的代理服务器在应用程序中接收,并将请求重定向到主服务器 i、 e.视频播放器控制器发送观看视频的请求 代理服务器将请求从VideoPlayerController重定向到主服务器 代理服务器接收

我正在尝试在我的应用程序中创建代理服务器,以便缓存视频。打开视频时,我使用带有

VideoPlayerController.network(“127.0.0.1:8080/http://127.0.0.1:8080/99e61720-935c-494e-aaab-0c2529716311.mp4”)
由我们的代理服务器在应用程序中接收,并将请求重定向到主服务器

i、 e.视频播放器控制器发送观看视频的请求

  • 代理服务器将请求从VideoPlayerController重定向到主服务器
  • 代理服务器接收响应
  • 代理服务器将响应流传输到VideoPlayerController
  • 现在的问题是,将视频从代理服务器传输到视频播放器不起作用。我们已经尝试从代理响应中保存视频文件,它可以正常工作,但流式传输到视频播放器却不能。 这是完整的代码:

    import 'dart:io';
    import 'dart:async';
    import 'package:http/http.dart' as http;
    import 'package:path_provider/path_provider.dart';
    
    class ProxyServer {
    
    HttpServer server;
    var client = 0;
    
    static File file;
    static bool hasFile = false;
    
    Future<void> init() async {
    
        try{
          server = await HttpServer.bind("127.0.0.1", 8080, shared: true);
          print("Server running on IP : " + server.address.toString() + " On Port : " + server.port.toString());
    
        }catch(e){
          print("Something went wrong while creating a server...");
          return;
        }
    
        print("Listening...");
        listen();
    }
    
     Future<void> listen() async {
    
         await for (HttpRequest request in server) {
    
             List<int> _bytes = [];
             var _received = 0;
             var _total = 0;
    
             http.Request baseRequest = new http.Request('GET', Uri.parse("http://d9txtuxofddt9.cloudfront.net${request.uri}"));
             Map<String, String> headers = new Map<String, String>();
    
             request.headers.forEach((key, value) {
                 print(key + ", " + value.first);
                 if(key != "host")
                     headers[key] = value.toString();
                 else
                     headers["host"] = "d9txtuxofddt9.cloudfront.net";
             });
    
             baseRequest.headers.addAll(headers);
             print("Base Request: " + baseRequest.headers.toString());
    
             http.StreamedResponse proxyResponse = await http.Client().send(baseRequest);
             _total = proxyResponse.contentLength;
    
             String destFilePath = "${(await getApplicationDocumentsDirectory()).path}${request.uri}";
             file = File(destFilePath);
    
             proxyResponse.headers.forEach((key, value) {
                 request.response.headers.add(key, value);
             });
    
             proxyResponse.stream.listen((value) {
                 _bytes.addAll(value);
                 _received += value.length;
                 print("${_received ~/ 1024} / ${_total ~/ 1024} KB");
    
                 request.response.add(value);
                 file.writeAsBytesSync(_bytes);
    
             }).onDone(() async {
                 print("File saved at : ${file.path}");
                 request.response.close();
             });
            }
        }
    }
    
    导入'dart:io';
    导入“dart:async”;
    将“package:http/http.dart”导入为http;
    导入“package:path_provider/path_provider.dart”;
    类代理服务器{
    HttpServer服务器;
    var客户端=0;
    静态文件;
    静态bool hasFile=false;
    Future init()异步{
    试一试{
    server=wait-HttpServer.bind(“127.0.0.1”,8080,shared:true);
    打印(“在IP上运行的服务器:”+Server.address.toString()+”,端口:“+Server.Port.toString()”);
    }捕获(e){
    打印(“创建服务器时出错…”);
    返回;
    }
    打印(“倾听…”);
    听();
    }
    Future listen()异步{
    等待(服务器中的HttpRequest请求){
    列表_字节=[];
    收到的var _=0;
    var _total=0;
    http.Request baseRequest=newhttp.Request('GET',Uri.parse('http://d9txtuxofddt9.cloudfront.net${request.uri}”);
    映射头=新映射();
    request.headers.forEach((键,值){
    打印(键+“,”+值。第一);
    如果(键!=“主机”)
    headers[key]=value.toString();
    其他的
    头文件[“主机”]=“d9txtexofddt9.cloudfront.net”;
    });
    baseRequest.headers.addAll(headers);
    打印(“基本请求:+baseRequest.headers.toString());
    http.StreamedResponse proxyResponse=等待http.Client().send(baseRequest);
    _总计=proxyResponse.contentLength;
    字符串destFilePath=“${(等待getApplicationDocumentsDirectory()).path}${request.uri}”;
    文件=文件(destFilePath);
    proxyResponse.headers.forEach((键,值){
    request.response.headers.add(键、值);
    });
    proxyResponse.stream.listen((值){
    _字节。addAll(值);
    _接收+=值.length;
    打印(${u已接收~/1024}/${u总计~/1024}KB);
    请求.响应.添加(值);
    writeAsBytesSync(_字节);
    }).onDone(()异步{
    打印(“文件保存在:${File.path}”);
    request.response.close();
    });
    }
    }
    }
    
    我的问题是,如何将服务器的响应流回到Flatter的VideoPlayerController