Перейти к содержимому
Калькуляторы

Вещание в YouTube с помощью VLC

Что-то не выходит каменный цветок.

Запускаю VLC с конфигурационным файлом (опция --vlm-conf), в файле указано следующее:

new C313 broadcast enabled loop
setup C313 input rtsp://usr:pwd@10.102.3.13
setup C313 output #transcode{vcodec=h264,scale=Auto,width=1280,height=720}:std{access=rtmp,mux=ffmpeg{mux=flv},dst=rtmp://a.rtmp.youtube.com/live2/key}
control C313 play

Без transcode не работает, ругается на размеры и еще что-то.

С transcode как-то непонятно.

Запускается, открывает входной поток, буферизует его. tcpdump в этом момент фиксирует обмен трафиком с YouTube.

Затем буфер наполняется:

[0xab5948] [Media: C313] main input debug: Buffering 100%
[0xab5948] [Media: C313] main input debug: Stream buffering done (1038 ms in 1000 ms)
[0xab5948] [Media: C313] main input debug: Decoder buffering done in 0 ms

и более ничего не происходит, в таком состоянии VLC висит, пока не остановишь, трафик на YouTube не ходит.

На самом YouTube трансляция не ведется.

Если перезапускать VLC несколько раз, добившись от IP-камеры отказов в подключении, то VLC начинает проводить повторные попытки подключения и в этот момент трафик между сервером и YouTube активно ходит и на YouTube появляется сообщение, что вещание вот-вот начнется.

Но как только подключение к камере осуществляется успешно и потом буферизуется, снова ничего не происходит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Попробовал сделать так:

ffmpeg \
  -i rtsp://usr:pwd@10.102.3.13 \
  -vcodec libx264 -pix_fmt yuv420p -preset feryfast -r 30 -g 2000k -b:v 1000k \
  -f flv "rtmp://a.rtmp.youtube.com/live2/key"

Теперь трафик на YouTube вроде бы уходит. На YouTube трансляция в статусе "Запуск", но картинки нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

есть подозрения что ютуб хочет полноценный стрим видео+аудио

если чего то одного нет, то не пропускает

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

feryfast - а такой профиль кодирования точно существует?)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Добавил аудиодорожку (-acodec libmp3lame -ar 44100 -threads 6 -qscale 3 -b:a 712000 -bufsize 512k), не помогло.

Либо YT хочет настоящий звук, либо дело в чем-то другом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Видел кучу инструкций, как вещать на Youtube комбинацией VLC и OBS Studio.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Хотелось бы обойтись минимумом.

Я в интернете видел, что у людей и на голом vlc или ffmpeg получается вещать.

И я вроде бы делаю также, но почему-то не работает.

И в YT нет никакой информации, что именно ему не нравится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сделал так:

ffmpeg -re -rtsp_transport tcp \
  -i "$SRC" \
  -acodec libmp3lame -ab 128k -ar 44100 \
  -vcodec copy -threads 2 -bufsize 512k \
  -f flv "$DST/$KEY"

При запуске индикатор трансляции на YouTube на несколько секунд становится зеленым.

Но картинка так и не появляется, а еще через несколько секунд индикатор снова становится серым.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

сначала у вас было правильное видео но не было аудио

теперь есть аудио но неправильное видео

остается третья попытка

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не совсем, аудиодорожки на самом деле нет (если судить по отладочному выводу ffmpeg).

Если делаю так:

ffmpeg -re -rtsp_transport tcp \
  -i "$SRC" \
  -f lavfi -i anullsrc \
  -acodec libmp3lame -ab 128k -ar 44100 \
  -vcodec libx264 -pix_fmt yuv420p -preset veryfast -threads 2 -bufsize 512k -r 30 -g 2000k -b:v 1000k \
  -f flv "$DST/$KEY"

то получаю ошибку

Input #0, rtsp, from 'rtsp://***@10.102.3.13/live/main':
  Metadata:
    title           : IPCAM
  Duration: N/A, start: 0.041000, bitrate: N/A
    Stream #0:0: Video: h264 (Main), yuvj420p, 1280x720, 24.92 tbr, 90k tbn, 180k tbc
[Parsed_anullsrc_0 @ 0x1e8dd20] Cannot select sample rate for the link between filters Parsed_anullsrc_0 and out.
anullsrc: Invalid argument

(указывать параметры для anullsrc я пробовал, anullsrc=channel_layout=stereo:sample_rate=44100 дает такую же ошибку)

 

Если строку с lavfi вообще убрать (как в предыдущем сообщении), то ошибки нет и ffmpeg запускается, но аудиодорожки в выводе нет:

Input #0, rtsp, from 'rtsp://***@10.102.3.13/live/main':
  Metadata:
    title           : IPCAM
  Duration: N/A, start: 0.042000, bitrate: N/A
    Stream #0:0: Video: h264 (Main), yuvj420p, 1280x720, 24.92 tbr, 90k tbn, 180k tbc
Output #0, flv, to 'rtmp://a.rtmp.youtube.com/live2/***':
  Metadata:
    title           : IPCAM
    encoder         : Lavf54.29.104
    Stream #0:0: Video: h264 ([7][0][0][0] / 0x0007), yuv420p, 1280x720, q=-1--1, 1000 kb/s, 1k tbn, 30 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (h264 -> libx264)

Как правильно "приделать" аудиодорожку к видеопотоку (если причина в том, что YouTube хочет видео+аудио)?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

стянуть последнюю версию исходников и скомпилить с нужными ключами

очевидно нет 

--enable-filter=anullsrc

скорее всего

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Буквально недавно читал про публикацию потоков на ютуб.

Может эти  две ссылки наведут на мысль.

 

Кстати есть ютубовский форум

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
22 часа назад, paradox_ сказал:

стянуть последнюю версию исходников и скомпилить с нужными ключами

Это как-бы непросто.

Сервер довольно старый (Debian 7), там кучу всего нужно обновлять, чтобы ffmpeg скомпилировать.

Пока что просто подсунул файл silent.wav с тишиной.

 

21 час назад, Brainiac сказал:

Может эти  две ссылки наведут на мысль.

Спасибо, поизучаю.

Пока что запустить не удается:

Input #0, wav, from './silent.wav':
  Duration: 00:00:02.00, bitrate: 352 kb/s
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 22050 Hz, mono, s16, 352 kb/s
[rtsp @ 0x2047be0] Estimating duration from bitrate, this may be inaccurate
Input #1, rtsp, from 'rtsp://***@10.102.3.13/live/main':
  Metadata:
    title           : IPCAM
  Duration: N/A, start: 0.051000, bitrate: N/A
    Stream #1:0: Video: h264 (Main), yuvj420p, 1280x720, 25.42 tbr, 90k tbn, 180k tbc
[libx264 @ 0x203c420] VBV maxrate unspecified, assuming CBR
[libx264 @ 0x203c420] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2
[libx264 @ 0x203c420] profile High, level 3.1
[libx264 @ 0x203c420] 264 - core 132 - H.264/MPEG-4 AVC codec - Copyleft 2003-2013 - http://www.videolan.org/x264.html - options:  cabac=1 ref=1 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=2 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=2 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=1 keyint=2000000 keyint_min=30 scenecut=40 intra_refresh=0 rc_lookahead=10 rc=cbr mbtree=1 bitrate=1500 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 vbv_maxrate=1500 vbv_bufsize=512 nal_hrd=none ip_ratio=1.40 aq=1:1.00
Output #0, flv, to 'rtmp://a.rtmp.youtube.com/live2/***':
  Metadata:
    encoder         : Lavf54.29.104
    Stream #0:0: Video: h264 ([7][0][0][0] / 0x0007), yuv420p, 1280x720, q=-1--1, 1500 kb/s, 1k tbn, 30 tbc
    Stream #0:1: Audio: mp3 ([2][0][0][0] / 0x0002), 44100 Hz, mono, s16, 128 kb/s
Stream mapping:
  Stream #1:0 -> #0:0 (h264 -> libx264)
  Stream #0:0 -> #0:1 (pcm_s16le -> libmp3lame)

Скорее всего из-за того, что аудиофайл маленькой продолжительности (2 секунды).

А зацикливать аудио ffmpeg не умеет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ура.

Подсунул файл с 30 минутами тишины (wav на 90 МБ) и наконец получил картинку на YT.

Правда на ней много артефактов, но это уже нужно будет подбирать параметры кодера.

И нужно будет найти способ обеспечить хотя бы часовую трансляцию (я тогда буду ее перезапускать каждый час).

В крайнем случае сделаю wav-файл на 200 МБ, но хотелось бы что-то более адекватное.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вот же блин.

Оказывается YouTube дает вещать только один канал.

Зря время потратил.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Решил использовать rtsp.me.

Прямой доступ к камерам давать не хочется, решил их запроксировать.

В VLC использую такую конфигурацию:

new C313 broadcast enabled loop
setup C313 input rtsp://usr:pwd@10.102.3.13/live/main
setup C313 output #rtp{sdp=rtsp://x.y.z.90:8554/c313.sdp}
control C313 play

Подключаюсь, соответственно, к rtsp://x.y.x.90:8554/c313.sdp.

Для проверки подключаюсь с помощью VLC на другой машине.

При попытке подключения что-то происходит, ресайзится окно плеера (то есть параметры видеопотока приходят), даже картинка появляется, но очень низкого качества (сплошные артефакты каждые несколько секунд).

Нет идей, из-за чего такое происходит?

Дело точно не на входе, так как на этом же сервере этот же VLC ретранслирует камеры в мультикастовый IPTV:

new CAM-313 broadcast enabled loop
setup CAM-313 input rtsp://usr:pwd@10.102.3.13/live/main
setup CAM-313 output #std{access=udp,dst=239.0.3.13:1234}
control CAM-313 play

И в IPTV трансляция идет гладко.

 

То есть проблема на выходе. Но на сервере гигабитный ненагруженный линк.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Судя по всему, нужно общаться с ТП сервиса.

Или параметры потока чем-то не устраивают, или нужно подбирать площадку (датацентр).

Для информации текущее состояние:

new CAM-313 broadcast enabled loop
setup CAM-313 input rtsp://usr:pwd@10.102.3.13/live/main
setup CAM-313 output #duplicate{dst=std{access=udp,dst=239.0.3.13:1234},dst=rtp{sdp=rtsp://x.y.z.90:8554/c313.sdp}}
control CAM-313 play

В IPTV воспроизводится хорошо.

На внешнем ПК (то есть не в одной сети с сервером, а подключенным через интернет) VLC по ссылке rtsp://x.y.z.90:8554/c313.sdp воспроизводит хорошо.

А вот на сервисе rtsp.me картинки пока нет.

 

 

(ДОБАВЛЕНО)

 

Все оказалось просто. Нужно было выбрать транспорт udp.

Если кому интересно:

https://rtsp.me/embed/6bDkF45T/

https://rtsp.me/embed/2etb85rK/

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас