我正在使用ffmpeg
和Apple的mediastreamsegmenter
和id3taggenerator
的组合来创建一个嵌入了元数据(ID3)的HLS流。我已经运行了所有应用程序,并且能够在客户端从流中检索元数据,但问题是在看似随机的时间之后,客户端停止在流上接收元数据。
以下是我现在的工作:
这是ffmpeg
和mediastreamsegmenter
部分:
ffmpeg -i udp://@:5010 -c:v libx264 -crf:v 22 -b:v 500k -preset:v veryfast -c:a libfdk_aac -b:a 64k -f mpegts - | mediastreamsegmenter -b http://localhost/stream -f /usr/local/nginx/html/stream/ -t 10 -s 4 -S 1 -D -y id3 -m -M 4242 -l log.txt
这是在端口5010上的本地主机上获取udp流,并分别将视频和音频编码为H.264和AAC。它正在将MPEG-2传输流段转移到mediastreamsegmenter
,后者又生成.M3U8
文件和关联的.ts
文件,并将它们放在NGINX
网络服务器上。 mediastreamsegmenter
还在端口4242上侦听来自id3taggenerator
的tcp流量,我将展示我现在如何使用它:
id3taggenerator -text '{"x":"12","y":"36"}' -a localhost:4242
正如您所看到的,我将JSON中的一些简单的x-y坐标作为文本发送到mediastreamsegmenter
侦听端口4242.我实际上正在使用Python脚本来发送一些测试数据。这是脚本:
#!/usr/local/bin/python3
from subprocess import call
from time import sleep
for i in range(0, 10):
for j in range(0, 10):
x = str(20 * i)
y = str(20 * j)
print("X: " + x + " - Y: " + y)
call(["id3taggenerator", "-text", "{\"x\":\"" + x + "\",\"y\":\"" + y + "\"}", "-a", "localhost:4242"])
sleep(1.0)
此脚本只是使用id3taggenerator
CLI发送一堆x-y坐标。我已将sleep
金额从0.1调整为15,但似乎没有任何区别。从流中获取元数据的客户端应用程序仅打印出4到35个点,但从未接收到所有x-y坐标。
我想知道每帧可以发送的元数据量是否有限制,但我似乎无法找到任何指定任何这些工具的硬限制值的内容......