我正在使用ffmpeg
和 Apple 的组合,mediastreamsegmenter
并id3taggenerator
创建一个 HLS 流,其中嵌入了元数据 (ID3)。我让所有应用程序都在运行,并且能够从客户端的流中检索元数据,但问题是,在看似随机的时间之后,客户端停止接收流上的元数据。
这是我现在的工作:
这是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
这是在 localhost 的 5010 端口上获取 udp 流,并将视频和音频分别编码为 H.264 和 AAC。它将 MPEG-2 传输流段传输到mediastreamsegmenter
.,然后生成.M3U8
文件和相关.ts
文件并将它们放置在NGINX
网络服务器上。它还在端口 4242上mediastreamsegmenter
监听 tcp 流量id3taggenerator
,我将展示我现在如何使用它:
id3taggenerator -text '{"x":"12","y":"36"}' -a localhost:4242
如您所见,我正在将 JSON 中的一些简单 xy 坐标作为文本发送到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发送一堆 xy 坐标。我已将sleep
金额从 0.1 调整为 15,但似乎没有任何区别。从流中获取元数据的客户端应用程序只打印 4 到 35 个点,但它从未收到所有 xy 坐标。
我想知道每帧可以发送的元数据量是否有限制,但我似乎找不到任何为这些工具中的任何一个指定硬限制值的东西......