C # как отправить потоковую веб-камеру через httpclient - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь отправить потоковое видео с веб-камеры с помощью httpclient. Но я не знаю, как передавать данные без проблем, как TCP-сокет.

для теста, я использую OpencvSharp для чтения видеокадра, я думаю, что это не имеет значения.

Что я попробовал:

        string ch = Console.ReadLine();

        RestApiManager manager = new RestApiManager();
        VideoCapture cap = new VideoCapture(@"Video.mp4");
        byte[] bimg;
        while (cap.IsOpened())
        {
            Mat mat = new Mat();
            if (cap.Read(mat))
            {
                Cv2.ImEncode(".jpg", mat, out bimg);
                Console.WriteLine(bimg.ToString());
                if (manager.cctvPost(ch, bimg).Result)
                {
                    Console.WriteLine("okay");
                }
                else
                    Console.WriteLine("failed");
            }
        }
    }


public class RestApiManager
{
    private const string url = @"http://localhost:5000/";
    private HttpClient client;

    public RestApiManager()
    {
        client = new HttpClient();
        client.BaseAddress = new Uri(url);
    }
    public async Task<bool> cctvPost(string ch, byte[] data)
    {
        client.DefaultRequestHeaders.Accept.Add(
            new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("image/jpeg"));

        //var item = new Product() { channel = ch, image = data };
        HttpContent contentPost = new StringContent(JsonConvert.SerializeObject(data), Encoding.UTF8, "image/jpeg");
        var task = Task.Run(() => client.PostAsync("cctv", contentPost).Result);
        HttpResponseMessage response = await task;
        return response.IsSuccessStatusCode;
    }
}

это отправляет каждый прочитанный кадр из видео и отправляет.

и сервер получает каждое изображение и отправляет ответ (200).

...