Flutter 如何在expo视频播放器插件中设置云端cookie

Flutter 如何在expo视频播放器插件中设置云端cookie,flutter,dart,video-streaming,Flutter,Dart,Video Streaming,我在使用Flatter视频播放器插件在expo player中设置DefaultHttpDataSourceFactory时遇到问题 实际上,我正在播放CDN中的HLS视频,为了确保安全播放,我为该视频文件创建了CloudFront签名密钥 我已经将cloudfront cookie键和值的属性设置为expo player,但它没有播放 存档: android/src/main/java/io/flatter/plugins/videoplayer/videoplayer.java Defaul

我在使用Flatter视频播放器插件在expo player中设置DefaultHttpDataSourceFactory时遇到问题

实际上,我正在播放CDN中的HLS视频,为了确保安全播放,我为该视频文件创建了CloudFront签名密钥

我已经将cloudfront cookie键和值的属性设置为expo player,但它没有播放

存档: android/src/main/java/io/flatter/plugins/videoplayer/videoplayer.java

DefaultHttpDataSourceFactory httpDataSourceFactory = new DefaultHttpDataSourceFactory("ExoPlayer", null, DefaultHttpDataSource.DEFAULT_CONNECT_TIMEOUT_MILLIS, DefaultHttpDataSource.DEFAULT_READ_TIMEOUT_MILLIS, true);
httpDataSourceFactory.setDefaultRequestProperty("CloudFront-Policy","eyJTdGF0ZW1lbnQiOkZnJvbnQubmV0LyoiLCJDb2MjA3MDAxOTh9fX1dfQ__");
httpDataSourceFactory.setDefaultRequestProperty("CloudFront-Signature","j0c8xdJqLEeF9xCRd4C~-9-J3KLA6vsLMZf-wfvSXtKhDatr3hXDCZ4yjIedlRs-7qTFTeVzKeg9lG0D0VROjzx1aMUe3NsphOPBOZJduw7mULOwS-OeTvd3AtGeU7du0B4LFN-utVntooBwSFesthLQ__");
httpDataSourceFactory.setDefaultRequestProperty("CloudFront-Key-Pair-Id","AHJKAINYJDNGHTDX7V5BA");
dataSourceFactory = new DefaultDataSourceFactory(context, "ExoPlayer",httpDataSourceFactory);
在控制台中引发错误,如:

PlatformException(VideoError, Video player had error com.google.android.exoplayer2.ExoPlaybackException: com.google.android.exoplayer2.upstream.HttpDataSource$InvalidResponseCodeException: Response code: 403, null)
所以,请帮助我如何通过签名cookie设置和播放视频


提前谢谢

您好,我很久以前就得到了解决方案,但忘了发布答案

这是我解决这个问题的方法

当我们传递多个cookie头时,cloudfront将替换每个cookie头并获取最后一个cookie头

DefaultHttpDataSourceFactory httpDataSourceFactory = new DefaultHttpDataSourceFactory("ExoPlayer", null, DefaultHttpDataSource.DEFAULT_CONNECT_TIMEOUT_MILLIS, DefaultHttpDataSource.DEFAULT_READ_TIMEOUT_MILLIS, true);
httpDataSourceFactory.setDefaultRequestProperty("CloudFront-Policy","MDAxOTh9fX1dfQ__");
httpDataSourceFactory.setDefaultRequestProperty("CloudFront-Signature","LFN-utVntooBwSFesthLQ__");
httpDataSourceFactory.setDefaultRequestProperty("CloudFront-Key-Pair-Id","V5BA");
dataSourceFactory = new DefaultDataSourceFactory(context, "ExoPlayer",httpDataSourceFactory);
解决方案是通过在cookies后面添加分号来设置为单个值

String cookieValue = "";
if(CloudFrontPolicy != null && CloudFrontSignature !=null && CloudFrontKeyPairId != null){
    cookieValue +="CloudFront-Policy="+CloudFrontPolicy+";";
    cookieValue +="CloudFront-Signature="+CloudFrontSignature+";";
    cookieValue +="CloudFront-Key-Pair-Id="+CloudFrontKeyPairId+";";
}

DefaultHttpDataSourceFactory defaultHttpDataSourceFactory =
                new DefaultHttpDataSourceFactory(
                        "ExoPlayer",
                        null,
                        DefaultHttpDataSource.DEFAULT_CONNECT_TIMEOUT_MILLIS,
                        DefaultHttpDataSource.DEFAULT_READ_TIMEOUT_MILLIS,
                        true);
defaultHttpDataSourceFactory.setDefaultRequestProperty("Cookie",cookieValue);
dataSourceFactory = new DefaultDataSourceFactory(context, null, defaultHttpDataSourceFactory);
defaultHttpDataSourceFactory.createDataSource();

你找到解决办法了吗?