Jetson TX1のGstreamerを使用してUDPまたはTCP経由でビデオフレームを送受信したいとします。Jetson TX1のUDP/TCP経由のGstreamer送信者と受信者
以下のようにビデオフレームを送信できます。
送信者:
gst-launch-1.0 nvcamerasrc ! 'video/x-raw(memory:NVMM), width=(int)1024, height=(int)720, format=(string)I420, framerate=(fraction)30/1' ! nvvidconv flip-method=2 ! udpsink host=<BCast IP addr> auto-multicast=true port=8089
受信機:
gst-launch-1.0 -v udpsrc port=8089 ! ... ! nvoverlaysink -e
UPDATE:これは罰金見えた、しかし、受信機にはまだ黒いフレーム。
gst-launch-1.0 -v udpsrc port=8089 ! capsfilter caps='video/x-raw(memory:NVMM),width=244,height=244, format=I420, framerate=20/1' ! nvoverlaysink -e
"受信者"側でどのフィルタを追加する必要があるのか分かりません。 (ビデオキャプチャを試しましたが、エラーが発生しました: "ビデオクリップ:イベントが見つかりません") また、pythonスクリプトを使用して各ビデオフレーム(画像)をキャプチャする方法はありますか? 最終的に、私はjpegまたはpng形式で各フレームをpythonスクリプトを使ってキャプチャしたいと思います。 受信者が送信者(ビデオsrc)からデータを取得できるかどうかはテストできますが、上記の問題がまだあります。
import socket
import sys
import time
HOST = '' # Symbolic name meaning all available interfaces
PORT = 8089 # Arbitrary non-privileged port
# Datagram (udp) socket
try :
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
print 'Socket created'
except socket.error, msg :
print 'Failed to create socket. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
sys.exit()
# Bind socket to local host and port
try:
s.bind((HOST, PORT))
except socket.error , msg:
print 'Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
sys.exit()
numFrames = 0
while 1:
# receive data from client (data, addr)
d = s.recvfrom(4096)
data = d[0]
addr = d[1]
if not data:
break
reply = 'OK...' + data
s.sendto(reply , addr)
print 'Message[' + addr[0] + ':' + str(addr[1]) + '] - ' + data.strip()