Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 视频转换:从UDP套接字到Mat对象的h.264_C#_Python_Video Streaming_H.264_Emgucv - Fatal编程技术网

C# 视频转换:从UDP套接字到Mat对象的h.264

C# 视频转换:从UDP套接字到Mat对象的h.264,c#,python,video-streaming,h.264,emgucv,C#,Python,Video Streaming,H.264,Emgucv,我有一个带picam的Raspberry pi,我想把视频流到服务器上进行处理并运行目标检测软件。我通过UDP套接字向服务器发送视频流,并接收无法转换为Mats的字节数组 python发送方: import socket import time import picamera import sys # msg = b'test' addr = ("192.168.1.79", 7777) start = time.time() # Connect a client socket to my_s

我有一个带picam的Raspberry pi,我想把视频流到服务器上进行处理并运行目标检测软件。我通过UDP套接字向服务器发送视频流,并接收无法转换为Mats的字节数组

python发送方:

import socket
import time
import picamera
import sys

# msg = b'test'
addr = ("192.168.1.79", 7777)
start = time.time()
# Connect a client socket to my_server:8000 (change my_server to the
# hostname of your server)
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(('192.168.1.79', 7777))
con = s.makefile('wb');
print("Conectado")
# Make a file-like object out of the connection
# connection = s.makefile('wb')
try:
    with picamera.PiCamera() as camera:
        camera.resolution = (640, 480)
        camera.framerate = 24
        print("Cargando camara")
        camera.start_preview()
        time.sleep(2)
        print("Enviando")
        camera.start_recording(con, format='h264')
        camera.wait_recording(10)
        camera.stop_recording()        
finally:
    con.close()
    s.close()

c#接收器:


经过一些研究,我发现h.264不应该通过UDP传输,而应该通过TCP传输,如果你想在目标检测程序中使用视频,h.264根本不是一个好主意。
一个更好的主意是使用TCP套接字发送单个MJPEG帧,虽然有点慢,但我正在获取640X480@30这比enouht和向Mat对象的转换更容易

经过一些研究,我发现h.264不应该流式传输到UDP,而应该流式传输到TCP,如果你想在目标检测程序中使用视频,h.264根本不是一个好主意。
一个更好的主意是使用TCP套接字发送单个MJPEG帧,虽然有点慢,但我正在获取640X480@30这比enouht和转换为Mat object way easyer更有趣,希望您能理解,或者有人能帮助您。这对我来说很有意思,希望你能得到,或者有人能帮你。德国劳埃德船级社
using Emgu.CV;
using Emgu.CV.UI;
using System;
using System.Drawing;
using System.Net;
using System.Net.Sockets;


namespace EgmuCv {
    class Decoder{
        private const int listenPort = 7777;


        public static void streamToImage(ImageBox img) {
            UdpClient listener = new UdpClient(listenPort);
            IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, listenPort);
            Mat mat = new Mat(new Size(640, 480), Emgu.CV.CvEnum.DepthType.Cv8U, 3);

            try {
                while (true) {
                    Console.WriteLine("Waiting for broadcast");
                    byte[] bytes = listener.Receive(ref groupEP);
                    // CvInvoke.Imdecode(bytes, Emgu.CV.CvEnum.ImreadModes.ReducedColor8, mat);
                    /** Code to turn bytes into Mat **/
                    // img.Image = mat;
                }
            } catch (SocketException e) {
                Console.WriteLine(e);
            } finally {
                listener.Close();
            }

        }
    }
}