RTMP-аутентификация не работает с использованием libav
Я пытаюсь реализовать RTSP для RTMP Restreamer с помощью libav. Команда "ffmpeg" работает нормально:
ffmpeg -i "rtsp://localhost:8884/live" -vcodec copy -f rtsp "rtmp://user:password@localhost:1935/live/stream"
Но я получаю ошибки аутентификации RTMP, когда я делаю это, используя libav. Вот способы, которые я попробовал:
avformat_alloc_output_context2(&m_outformat, NULL, "rtsp", "rtmp://user:password@localhost:1935/live/stream");
avformat_alloc_output_context2(&m_outformat, NULL, "rtsp", "rtmp://localhost:1935/live/stream?user&password");
avformat_alloc_output_context2(&m_outformat, NULL, "rtsp", "rtmp://localhost:1935/live?user&password/stream");
avformat_alloc_output_context2(&m_outformat, NULL, "rtsp", "rtmp://localhost:1935/live/stream?username=user&password=password");
avformat_alloc_output_context2(&m_outformat, NULL, "rtsp", "rtmp://localhost:1935/live?username=user&password=password/stream");
avformat_alloc_output_context2(&m_outformat, NULL, "rtsp", "rtsp://user:password@localhost:1935/live/stream")
Может кто-нибудь, пожалуйста, дайте мне знать, как я могу включить аутентификацию RTMP.
Как вы могли видеть выше, мы используем "rtsp" в качестве "format_name", а URL начинается с "rtmp://". Это потому, что когда мы сохранили "rtsp" в обоих, "m_outformat->pb" приходит как NULL и последующий вызов "avio_open" дает ошибку.
1 ответ
Поскольку вы пытаетесь транслировать в RTMP, ваше имя_формата должно быть "flv" вместо "rtsp". Схема аутентификации в потоке RTMP отличается от потока RTSP, и вам необходимо указать это.
Следующая команда ffmpeg должна работать со схемой аутентификации RTMP (протестировано на платформе Windows):
ffmpeg -re -i "rtsp://localhost:8884/live/myStream" -c:v copy -c:a copy -f flv "rtmp://localhost/live/myStream flashver=FMLE/3.0\20(compatible;\20FMSc/1.0) live=true pubUser=user pubPasswd=password"
Если вы используете платформу Linux, протестируйте следующее:
avformat_alloc_output_context2(&m_outformat, NULL, "flv", "rtmp://user:password@localhost:1935/live/stream");