Здравствуйте. Я уже замучился организовывать вещание. Решил обратиться за помощью к вам.
Есть железка. Которая принимает mp3-поток по UDP (44100Hz, 128kb/s, mono). Захватываю звук с аудиокарты и отправляю мультикаст в сеть. Железка его ловит.
Пробовал разными способами.
VLC:
cvlc -vvv --ttl 220 --sout-keep --sout '#transcode{acodec=mp3, ab=128, samplerate=44100, channels=1}:std{access=udp{caching=0}, dst=233.21.215.101:6001, mux=ts{pcr=100}}' alsa://plughw:0,0
Играет отлично, но недолго. Потом он почему-то ловит ошибку чтения с alsa-устройства и перестает что-либо вещать. Но в памяти процесс висит. Какие я ни пробовал ключи - бестолку. Все бы хорошо, если бы он не отваливался.
GStreamer:
gst-launch alsasrc device="hw:0,0" ! audio/x-raw-int,rate=44100 ! audioconvert ! lamemp3enc cbr=true bitrate=128 mono=true ! ffmux_mpegts name=mux ! udpsink host="233.21.215.101" port="6001"
Вещает бесперебойно. Но звук не чистый. Создается впечатление, что он ускорен. Присутствует постоянный клиппинг. Подозреваю, что из-за дополнительной информации, которую он вещает (метаданные). Экспериментировал мало.
FFmpeg:
ffmpeg -f alsa -ar 44100 -i hw:0,0 -acodec libmp3lame -ar 44100 -b:a 128k -ac 1 -f mpegts udp://233.21.215.101:6001?pkt_size=1316
Та же самая история, что и с GStreamer. Вещает бесперебойно, но поток ужасен. Ускорен и с клиппингом. Точно также как и с GStreamer, к потоку добавляются метаданные. Есть секция Metadata. В которой прописаны service_name="Service01" и service_provider="FFmpeg" (в Gstreamer service_provider = "Libav")
С ним экспериментировал больше всего. Перепробовал почти все ключи из хелпа. Бесполезно.
У VLC размер пакетов всегда одинаковый. GStreamer и FFmpeg постоянно меняют размер пакета в сети. Два пакета по 1316, один - 900 или 560...
Я уже месяц пытаюсь завести бесперебойное вещание с аудиокарты. Замучился. Может, подскажете что-нибудь?