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");
Другие вопросы по тегам