Вопрос или проблема
Я пытаюсь воспроизвести поток TTS/PS
RTP
с помощью FFmpeg
, но постоянно сталкиваюсь со следующей ошибкой:
[rtp @ 0x55bae8fad5c0] Невозможно получить RTP полезную нагрузку типа 103 без файла SDP, описывающего его rtp://<multicast-address>:<port>?buffer-size=1000000: Обнаружены недопустимые данные при обработке входных данных
Чтобы дать некоторый контекст, моя главная цель — в конечном итоге стримить в формате DASH с низкой задержкой через FFmpeg
. Для этого я экспериментирую, сначала захватывая RTP поток и конвертируя его в формат MP4. Вот мои конкретные вопросы:
Вот мои вопросы:
Способен ли FFmpeg
воспроизводить TTS/PS
по RTP? Поскольку мультикаст-адрес и порт назначаются динамически во время выполнения, нужно ли мне по-прежнему иметь
SDP` файл для описания потока?
Существует ли способ работы с RTP потоками без файла SDP, или какие-либо альтернативные методы для решения проблемы с типом полезной нагрузки?
Команда, которую я использую, выглядит так:
ffmpeg -protocol_whitelist "rtp,udp" -i rtp://<multicast-address>:<port>?buffer-size=1000000 -c:v copy -f mpegts output.ts
Любые советы или предложения будут очень полезны. Заранее спасибо!
Ответ или решение
Проблемы с воспроизведением TTS/PS потока через RTP в FFmpeg: Подробный анализ
Введение
Работа с потоковым видео и аудио в реальном времени может представлять собой множество технических вызовов, особенно когда речь идет о передаче RTP (Real-time Transport Protocol). Ваша задача — воспроизведение TTS (Text-to-Speech) или PS (Packetized Stream) потока через RTP с использованием FFmpeg. Однако вы столкнулись с ошибкой:
[rtp @ 0x55bae8fad5c0] Unable to receive RTP payload type 103 without an SDP file describing it
Основные проблемы
Ваша проблема заключается в том, что FFmpeg не может найти описание для RTP payload type 103, которое обычно предоставляется через SDP (Session Description Protocol) файл. Для начала разберем, что это означает.
Возможности FFmpeg при работе с RTP
1. Поддержка TTS/PS через RTP
FFmpeg поддерживает различные форматы и протоколы, включая RTP. Однако наличие описания SDP является критически важным, так как оно содержит метаданные о формате потока, кодеках, портах и мощности потока.
2. Нужен ли SDP файл?
Когда вы работаете с динамически назначенными адресами и портами, наличие SDP файла существенно упрощает задачу определения параметров потока. Если SDP файл недоступен, FFmpeg не сможет правильно интерпретировать данные, так как не будет знать, как обрабатывать определённые типы полезной нагрузки.
Альтернативные методы
1. Указание параметров напрямую
Если у вас нет возможности использовать SDP файл, можно попробовать передать параметры потока напрямую в командной строке. Рассмотрите возможность использования флага -sdp_file
с временным SDP файлом, который вы можете создать вручную и который будет содержать необходимый payload type.
Пример временного SDP файла:
v=0
o=- 0 0 IN IP4 127.0.0.1
s=Session
c=IN IP4 <multicast-address>
t=0 0
m=audio <port> RTP/AVP 103
2. Изменение кодека
Если возможно, попробуйте использовать другой кодек или payload type, который поддерживается вашим клиентом и соответствует спецификации FFmpeg.
3. Обработка RTP потоков без SDP файла
FFmpeg может иногда обрабатывать потоки RTP без использования SDP файла, если вы явно зададите кодек и дополнительные параметры обработки. Но это требует точного знания формата потока.
Заключение
Чтобы успешно воспроизвести TTS/PS RTP поток через FFmpeg, вам необходимо как минимум SDP файл, который точно описывает используемый поток. Если этот файл недоступен, рассмотрите возможность создания временного SDP файла, указания параметров через командную строку или смены кодека на один из поддерживаемых FFmpeg. Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться за помощью или консультацией к специализированным ресурсам сообщества FFmpeg. Это обеспечит вам успешное выполнение задачи по стримингу в формате DASH с минимальной задержкой.