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/
所以我的问题是:
- 为什么 mediainfo 不处理 AWS 密钥中的特殊字符?
- 基于代码,--urlencode 选项设置 url 编码。如何使用此选项,此选项是否强制 url 编码并接受具有特殊字符的 aws 密钥?
- 是否有任何解决方法来获取 s3 url 上具有特殊字符的 mediainfo 结果?
- 如何解决这个问题?
我找到了解决我的问题的方法,即使用 pre-signed url.
以下是我使用过的命令:
1. aws s3 presign 's3://bucketname/testing/mini & bar™©.mp4'
output is => "presignd url"
2. mediainfo 'presignd url'
希望对您有所帮助!!
我正在使用最新的媒体信息。 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/
所以我的问题是:
- 为什么 mediainfo 不处理 AWS 密钥中的特殊字符?
- 基于代码,--urlencode 选项设置 url 编码。如何使用此选项,此选项是否强制 url 编码并接受具有特殊字符的 aws 密钥?
- 是否有任何解决方法来获取 s3 url 上具有特殊字符的 mediainfo 结果?
- 如何解决这个问题?
我找到了解决我的问题的方法,即使用 pre-signed url.
以下是我使用过的命令:
1. aws s3 presign 's3://bucketname/testing/mini & bar™©.mp4'
output is => "presignd url"
2. mediainfo 'presignd url'
希望对您有所帮助!!