ffmpeg
Apple のmediastreamsegmenter
との組み合わせを使用して、id3taggenerator
メタデータ (ID3) が埋め込まれた HLS ストリームを作成しています。私はすべてのアプリケーションを実行しており、クライアント側でストリームからメタデータを取得できますが、問題は、ランダムな時間が経過した後、クライアントがストリームでのメタデータの受信を停止することです。
これが私が今取り組んでいるものです:
これはffmpeg
andmediastreamsegmenter
の部分です:
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
生成して Web サーバーに配置します。また、はポート 4242 で からの tcp トラフィックをリッスンしており、現在の使用方法を示します。.M3U8
.ts
NGINX
mediastreamsegmenter
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 座標を送信しているだけです。量を 0.1 から 15に調整しましたsleep
が、違いはないようです。ストリームからメタデータを取得しているクライアント アプリケーションは、4 から 35 のポイントのみを出力しますが、すべての xy 座標を受信したことはありません。
フレームごとに送信できるメタデータの量に制限があるかどうか疑問に思っていますが、これらのツールのいずれに対してもハード制限値を指定するものを見つけることができないようです...