Mediainfo не обрабатывает URL-адрес AWS S3 со специальными символами в ключах S3.

Я использую последние медиаинформации. mediainfo --version показывает MediaInfoLib — 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                           : [email protected]
    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:[email protected]/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 кажется, что обрабатывается только пробел, а другие специальные символы не обрабатываются для ключа 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, который, похоже, теперь решен. https://sourceforge.net/p/mediainfo/bugs/960/

Итак, мои вопросы:

  1. почему mediainfo не обрабатывает специальные символы в ключах AWS?
  2. В зависимости от кода параметры --urlencode задают кодировку URL. Как использовать эту опцию, будет ли эта опция принудительно использовать кодировку URL и ключи aws со специальными символами?
  3. Есть ли обходной путь, чтобы получить результат mediainfo на URL-адресе s3 со специальными символами?
  4. как это исправить?

person Swati    schedule 26.03.2018    source источник
comment
Этот вопрос, хотя и хороший, вероятно, не подходит для StackOverflow, поскольку он требует диагностики существующей библиотеки программного обеспечения, а не прямого вопроса о программировании. Я бы посоветовал создать задачу на странице mediainfo Github, так как вам, вероятно, повезет больше.   -  person Derek Brown    schedule 26.03.2018
comment
Спасибо, Дерек. Я думал добавить проблему на страницу github. Перед этим я надеюсь получить обходной путь или некоторые идеи для решения моей проблемы на этом форуме. Отправлен новый запрос на выпуск: github.com/MediaArea/MediaInfoLib/issues/823   -  person Swati    schedule 26.03.2018


Ответы (1)


Я нашел обходной путь для своей проблемы, который заключается в использовании предварительно подписанного URL-адреса.

Ниже приведены команды, которые я использовал:

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

Надеюсь, поможет!!

person Swati    schedule 28.03.2018