3

我正在使用ffmpeg和 Apple 的组合,mediastreamsegmenterid3taggenerator创建一个 HLS 流,其中嵌入了元数据 (ID3)。我让所有应用程序都在运行,并且能够从客户端的流中检索元数据,但问题是,在看似随机的时间之后,客户端停止接收流上的元数据。

这是我现在的工作:

这是ffmpegmediastreamsegmenter部分:

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 坐标。

我想知道每帧可以发送的元数据量是否有限制,但我似乎找不到任何为这些工具中的任何一个指定硬限制值的东西......

4

0 回答 0