#!/usr/bin/python3
from socket import *
import sys
import base64
if (len(sys.argv)==3 and sys.argv[1]=='-l'):
try:
port=int(sys.argv[2])
except ValueError as verr:
print('Invalid port number')
sys.exit(1)
try:
s=socket(AF_INET, SOCK_DGRAM)
s.bind(('',port))
while True:
data,address=s.recvfrom(1500)
data = base64.b64encode(data)
print(data.decode('utf-8'))
s.close()
except (KeyboardInterrupt, SystemExit):
s.close()
print('Exit on Keyboard Interrupt')
else:
print('UDP socket listener by JirkaRCK v1.0\nArguments:\n-l Listen on specific UDP port')
Скрипт принимает поток вроде как и отдаёт в base64. Я проверил, пакет из base64 декодирую обратно и отправляю с помощью bash в udp на порт, скрипт получает этот пакет и выводит его изначальный base64 вид. Всё хорошо, но когда я декодирую поток и пытаюсь скормить его в vlc по stdin, у меня ничего не получается. Что ему не нравится? В TS потоке есть то, что нельзя скормить через stdin?...
Короче в python скрипте оказалось всё нормально. Но VLC, который отправляет поток, отправлял похоже его дважды с двух разных портов (с помощью tcpdump увидел). Перезапуск этого VLC помог. В связи с чем немного видоизменил скрипт: