Ответ 1
Краткий ответ
Убедитесь, что вы используете последний ffmpeg
, и используйте параметр -user-agent
.
Более длинный ответ
Для отладки я устанавливаю BaseHTTPSever
, работающий в 127.0.0.1:8080
с do_GET()
как:
def do_GET(self):
try:
f = open(curdir + sep + self.path, 'rb')
self.send_response(200)
self.end_headers()
print("GET: "+ str(self.headers))
self.wfile.write(f.read())
f.close()
return
except IOError:
self.send_error(404,'File Not Found: %s' % self.path)
При таком запуске это позволило мне запустить вашу команду, например:
ffmpeg \
-y \
-timeout 5000000 \
-map 0:0 \
-an \
-sn \
-f md5 - \
-headers "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36" \
-headers "X-Forwarded-For: 13.14.15.66" \
-i "http://127.0.0.1:8080/some_video_file.mp4" \
-v trace
Когда я это делаю, я вижу следующий соответствующий вывод из ffmpeg
:
Reading option '-headers' ... matched as AVOption 'headers' with argument 'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36'.
Reading option '-headers' ... matched as AVOption 'headers' with argument 'X-Forwarded-For: 13.14.15.66'.
На сервере я увидел:
User-Agent: Lavf/56.40.101
X-Forwarded-For: 13.14.15.66
Итак, похоже, что ffmpeg
устанавливает его собственный. Но есть опция -user-agent
to ffmpeg
, и когда я заменил -headers "User-Agent: <foo>"
на -user-agent "<foo>"
, я также видел это на сервере вместе с заголовком X-Forwarded-For
:
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36
Последняя записка. Существует много обсуждений ошибок заголовков в trac для ffmpeg
. То, что я наблюдал выше (что, по сути, он работает, возможно, с небольшим изменением команды) был с довольно недавней версией:
ffmpeg version 2.8.1 Copyright (c) 2000-2015 the FFmpeg developers
built with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04)
configuration: --enable-libx264 --enable-gpl --prefix=/usr/local --enable-shared --cc='gcc -fPIC'
libavutil 54. 31.100 / 54. 31.100
libavcodec 56. 60.100 / 56. 60.100
libavformat 56. 40.101 / 56. 40.101
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 40.101 / 5. 40.101
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 2.101 / 1. 2.101
libpostproc 53. 3.100 / 53. 3.100
Итак, ваш следующий шаг может заключаться в том, что у вас есть последняя версия ffmpeg
.