Mediainfo 不处理 S3 密钥中具有特殊字符的 AWS S3 url

Mediainfo does not handle AWS S3 url with special characters in S3 keys

我正在使用最新的媒体信息。 mediainfo --version 显示 媒体信息库 - v17.12

在文件名中使用特殊字符时,显示有效输出。

>mediainfo 'mini & bar.mp4' 

    Complete name                            : mini & bar.mp4
    Format                                   : MPEG-4
    Format profile                           : Base Media / Version 2
    Codec ID                                 : mp42 (mp41/mp42/isom)
    File size                                : 380 KiB
    Duration                                 : 4 s 4 ms
    Overall bit rate mode                    : Variable
    Overall bit rate                         : 777 kb/s
    Movie name                               : mini
    Encoded date                             : UTC 2015-02-21 06:02:24
    Tagged date                              : UTC 2015-02-21 06:02:26

    Video
    ID                                       : 1
    Format                                   : AVC
    Format/Info                              : Advanced Video Codec
    Format profile                           : High@L3.1
    Format settings                          : CABAC / 2 Ref Frames
    Format settings, CABAC                   : Yes
    Format settings, ReFrames                : 2 frames
    Codec ID                                 : avc1
    Codec ID/Info                            : Advanced Video Coding
    Duration                                 : 4 s 4 ms
    Bit rate mode                            : Variable
    Bit rate                                 : 768 kb/s
    Width                                    : 854 pixels
    Height                                   : 480 pixels
    Display aspect ratio                     : 16:9
    Frame rate mode                          : Constant
    Frame rate                               : 29.970 (30000/1001) FPS
    Original frame rate                      : 25.000 FPS
    Color space                              : YUV
    Chroma subsampling                       : 4:2:0
    Bit depth                                : 8 bits
    Scan type                                : Progressive
    Bits/(Pixel*Frame)                       : 0.063
    Stream size                              : 378 KiB (99%)
    Title                                    : Core Media Video
    Encoded date                             : UTC 2015-02-21 06:02:24
    Tagged date                              : UTC 2015-02-21 06:02:26
    Color range                              : Limited
    Color primaries                          : BT.601 NTSC
    Transfer characteristics                 : BT.709
    Matrix coefficients                      : BT.601

虽然如果我使用带有特殊字符的文件名(有效的 s3 键),从 AWS S3,它不接受它作为有效输入。 我在下面使用 url,其中用户名、密码和存储桶名称特定于我的 aws 帐户。 'testing/mini & bar.mp4' 是关键。

https://username:secret@s3-ap-southeast-2.amazonaws.com/bucketname/testing/mini & bar.mp4

<Error><Code>NoSuchKey</Code><Message>The specified key does not exist.</Message><Key>testing/mini</Key><RequestId>157877D3B661D9A6</RequestId></Error>

如果与单引号或双引号一起使用,会显示签名不匹配错误。

<Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>

查看 MediaArea/MediaInfoLib 代码时,似乎只有 space 被处理,其他特殊字符没有为 aws 密钥处理。

来自Reader_libcurl.cpp

// URL encoding
MediaInfo_Config::urlencode ShouldUrlEncode=Config.URLEncode_Get();
if (ShouldUrlEncode==MediaInfo_Config::URLEncode_Guess)
{
    if (File_URL.Path.find(' '))
        ShouldUrlEncode=MediaInfo_Config::URLEncode_Yes;
}
if (ShouldUrlEncode==MediaInfo_Config::URLEncode_Yes)
    File_URL.Path=ZenLib::Format::Http::URL_Encoded_Encode(File_URL.Path);

当进一步搜索此类问题时,下面的问题讨论了 aws 密钥中的 space,现在似乎已解决。 https://sourceforge.net/p/mediainfo/bugs/960/

所以我的问题是:

  1. 为什么 mediainfo 不处理 AWS 密钥中的特殊字符?
  2. 基于代码,--urlencode 选项设置 url 编码。如何使用此选项,此选项是否强制 url 编码并接受具有特殊字符的 aws 密钥?
  3. 是否有任何解决方法来获取 s3 url 上具有特殊字符的 mediainfo 结果?
  4. 如何解决这个问题?

我找到了解决我的问题的方法,即使用 pre-signed url.

以下是我使用过的命令:

1. aws s3 presign 's3://bucketname/testing/mini & bar™©.mp4' 
   output is => "presignd url"
2. mediainfo 'presignd url'

希望对您有所帮助!!