3

ffmpegApple のmediastreamsegmenterとの組み合わせを使用して、id3taggeneratorメタデータ (ID3) が埋め込まれた HLS ストリームを作成しています。私はすべてのアプリケーションを実行しており、クライアント側でストリームからメタデータを取得できますが、問題は、ランダムな時間が経過した後、クライアントがストリームでのメタデータの受信を停止することです。

これが私が今取り組んでいるものです:

これはffmpegandmediastreamsegmenterの部分です:

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.tsNGINXmediastreamsegmenterid3taggenerator

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 座標を受信したことはありません。

フレームごとに送信できるメタデータの量に制限があるかどうか疑問に思っていますが、これらのツールのいずれに対してもハード制限値を指定するものを見つけることができないようです...

4

0 に答える 0