java - aws cloudfront 使用私有(private)流设置并使用 Java 生成过期链接

标签 java amazon-web-services video-streaming jwplayer amazon-cloudfront

我正在尝试使用 amazon s3 和 cloudfront 设置安全流。我已完成以下步骤,但总是收到错误消息

"stream not found".

  1. 设置 s3 存储桶并上传 mp3 文件(file.mp3)进行测试。
  2. 在 cloudfront 中创建源访问策略,获取 Id 和 S3 canonicle 使用的 Id。
  3. 赋予 S3 canonicle 用户 ID 对 s3 存储桶的读取权限。 (为了测试,我也向每个人授予了读取权限。)
  4. 为 Cloudfront 创建了 RSA 公钥/私钥。
  5. 在 Cloudfront 中创建流分配,以之前的 s3 存储桶为源,以可信签名者为自身。此请求的结果显示具有公钥 ID 的自信任签名者。
  6. 使用私钥生成签名网址。
  7. 创建了 html 文件以使用 jwplayer 显示此 mp3。

下面是我用来创建原始签名网址的代码

    Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
    String distributionDomain = "sbngg4fbfkiq2.cloudfront.net";
    String privateKeyFilePath = "src/s3access/pk-APKAJRHSQBGT5CW7P2CA.der";
    String s3ObjectKey = "file.mp3";
    // Convert your DER file into a byte array.
    byte[] derPrivateKey = ServiceUtils.readInputStreamToBytes(new
            FileInputStream(privateKeyFilePath));
    String signedUrlCanned = CloudFrontService.signUrlCanned(
       s3ObjectKey, // Resource URL or Path
        "APKAJRHSQBGT5CW7P2CA.",     // Certificate identifier, 
                       // an active trusted signer for the distribution
        derPrivateKey, // DER Private key data
        new Date(112,3,29) // DateLessThan
        );
    System.out.println(signedUrlCanned);

这给出了签名的网址。然后我使用了以下html文件。

<html><head>
<script type='text/javascript' src='jwplayer.js'></script>
</head><body>
<div id="container">Loading the player ...</div>

<script type="text/javascript">

  jwplayer('container').setup({
    'id': 'playerID',
    'width': '352',
    'height': '240',
'provider': 'rtmp',
    'streamer': 'rtmp://sbngg4fbfkiq2.cloudfront.net/cfx/st',
    'file': 
    'file.mp3?Expires=1335637800&Signature=asSUSIbGYZP9IXnmjWIKgXMP2DCCA1B-x0mQtsQbUBFWdbKzlU~NnId8VH8T5ww8I1nbZKHWoLpGr679~QoDSMScKpVxVbyYVjQ0kn-JejzSkM6~ZEC6r8nArEdrT9R-M6EjR~IBkuPD-0qW2OUk1MBC4oiNeytIolG6IrSTGOU_&Key-Pair-Id=APKAJRHSQBGT5CW7P2CA',
'modes': [
    {
        type: 'flash', src: 'player.swf'
    } 
]
 });

</script>

</body>
</html>

它显示视频帧。单击播放按钮尝试加载流,但几秒钟后它显示

 Stream not foundfile.mp3?Expires=1335637800&Signature=asSUSIbGYZP9IXnmjWIKgXMP2DCCA1B-x0mQtsQbUBFWdbKzlU~NnId8VH8T5ww8I1nbZKHWoLpGr679~QoDSMScKpVxVbyYVjQ0kn-JejzSkM6~ZEC6r8nArEdrT9R-M6EjR~IBkuPD-0qW2OUk1MBC4oiNeytIolG6IrSTGOU_&Key-Pair-Id=APKAJRHSQBGT5CW7P2CA

请帮我设置一下。如果我遗漏了什么,请告诉我。

最佳答案

我使用上面提到的相同设置,但很少有情况

  1. 它不适用于 mp3 文件(已通过我上传的一个文件进行检查),但适用于 mp4 视频。
  2. 假设我为不存在的文件生成了签名链接并尝试加载视频。当然我会得到错误。此后,即使我上传同名文件,我仍然继续收到错误。

关于java - aws cloudfront 使用私有(private)流设置并使用 Java 生成过期链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9873273/

相关文章:

amazon-ec2 - 亚马逊 ec2 的 SPF 记录

amazon-web-services - 如何使用 SAM 通过 API Gateway 配置异步 lambda 调用?

ios - Whatsapp、Messenger、Facebook、Skype 在 ios 中使用 webrtc 进行音频视频流(用于视频 session )

android - Android Nexus 7 上的 StageVideo 显示黑色方 block

java - 无法调用函数的返回值

java.lang.NoClassDefFoundError : com/sun/istack/Pool

java - 优雅地杀死 Java 在 Android 中打开的进程

java - Switch 语句默认情况失败

amazon-web-services - AWS Cloudformation 用于从 ECR 构建和部署镜像。未找到工件的 CodePipeline 问题

ios - 如何使用 phonegap-videoplayer-plugin 播放 Youtube 视频?