Я пытаюсь отправить потоковое видео с веб-камеры с помощью 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).