Не удается подключиться к удаленному серверу rtmp

Я пытаюсь создать частный потоковый сервер (RTMP / HLS) с Go. Основная концепция аналогична Twitch. Пользователь может транслировать видео в прямом эфире, используя OBS (и уникальный ключ).

Я наткнулся на фреймворк Go под названием Seal, который, кажется, делает именно то, что я хочу. https://github.com/calabashdad/seal

Однако OBS не может подключиться к удаленному серверу, хотя Seal-framework сообщает, что перечисляет потоковый порт (rtmp.myserver.com:1935).

Ссылка на потоковую передачу OBS:

rtmp://rtmp.myserver.com/live/test

Журнал работы уплотнения (./seal -c conf/seal.yaml):

2021/01/12 12:08:26.003814 seal.go:55: load conf file success, conf={System:{CPUNums:0} Rtmp:{Listen:1935 TimeOut:30 ChunkSize:60000 Atc:false AtcAuto:true TimeJitter:1 ConsumerQueueSize:5} Hls:{Enable:true HlsFragment:4 HlsWindow:20 HlsPath:/var/www/go_projects/src/seal/hls_files HttpListen:7001}}
2021/01/12 12:08:26.003961 seal.go:60: app run on auto cpu nums= 2
2021/01/12 12:08:26.004415 rtmp_server.go:29: rtmp server start liste at :1935
2021/01/12 12:08:26.004010 hls_server.go:34: start hls server, listen at : 7001

Конфигурация Apache VirtualHost:

<VirtualHost *:80>
ProxyPreserveHost On
    ProxyRequests Off

ServerName rtmp.myserver.com
ServerAlias rtmp.myserver.com
ServerAdmin [email protected]
DocumentRoot /var/www/go_projects/src/seal

<Proxy *>
    Order deny,allow
    Allow from all
</Proxy>

ProxyPass / rtmp://rtmp.myserver.com:1935/
ProxyPassReverse / rtmp://rtmp.myserver.com:1935/

<Directory /var/www/go_projects/src/seal>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
</Directory>

Ошибка OBS: не удалось подключиться к серверу. Время соединения истекло.

Я даже попытался заменить RTMP на HTTP в файле Apache Conf, и кажется, что соединение удалось установить, но возникла ошибка тайм-аута.

2021/01/12 13:36:23.221275 rtmp_server.go:36: one rtmp connection come in, remote= xx.xx.xx.105:44720
2021/01/12 13:36:53.222093 cycle.go:79: rtmp handshake failed.err= read tcp xx.xx.xx.105:1935->xx.xx.xx.105:44720: i/o timeout

В то время как xx.xx.xx.105 - мой удаленный сервер

Есть идеи, что я сделал не так?

Изменить (Ubuntu) правила брандмауэра

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
25/tcp (Postfix)           ALLOW IN    Anywhere                  
3306                       ALLOW IN    Anywhere                  
1935/tcp                   ALLOW IN    Anywhere                  
25/tcp (Postfix (v6))      ALLOW IN    Anywhere (v6)             
3306 (v6)                  ALLOW IN    Anywhere (v6)             
1935/tcp (v6)              ALLOW IN    Anywhere (v6)

результат rtmpdump [rtmpdump -v -r rtmp: //rtmp.myserver.com/live/test [-s swf auth] | vlc -]:

VLC media player 3.0.11.1 Vetinari (revision 3.0.11.1-0-g52483f3ca2)
RTMPDump v2.4
(c) 2010 Andrej Stepanchuk, Howard Chu, The Flvstreamer Team; license: GPL
WARNING: You haven't specified an output file (-o filename), using stdout
Connecting ...
[000055e60d2775b0] main libvlc: Running vlc with the default interface. Use 'cvlc' to use vlc without interface.
QFont::fromString: Invalid description '(empty)'
QFont::fromString: Invalid description '(empty)'
ERROR: RTMP_Connect0, failed to connect socket. 110 (Connection timed out)
[00007f6558001160] mjpeg demux error: cannot peek

person Odd    schedule 12.01.2021    source источник


Ответы (1)


Непонятно, почему возникает эта ошибка. Самая популярная проблема с тайм-аутом - это брандмауэр.

Еще одна проблема, но я не уверен, может ли требоваться проверка подлинности SWF.

Не могли бы вы еще немного отладить?

  1. Покажите нам свои правила брандмауэра на сервере xx.xx.xx.105?
  2. Не могли бы вы еще немного отладить программу rtmpdump? Он предоставит много полезной информации, необходимой для решения вашей проблемы.
rtmpdump -v -r  "rtmp://rtmp.myserver.com:1935/" [ -s swf auth ]  | vlc -
person Daniel Hornik    schedule 12.01.2021
comment
Цени твои старания, Даниэль! Я обновил вопрос правилами брандмауэра. Пожалуйста, посмотрите. Хотя я не знал, что именно делает rtmpdump, я выполнил команду соответственно. - person Odd; 12.01.2021
comment
Не могли бы вы открыть порты для apache, это 80 и 443. Или вы можете попробовать напрямую попасть на порт 1935 и посмотреть, есть ли тайм-аут. - person Daniel Hornik; 12.01.2021
comment
Порт 80 открыт, но прямой доступ к xx.xx.xx.xx: 1935 возвращает ошибку тайм-аута - person Odd; 12.01.2021