知识点
mjpeg
mjpeg是动态jpeg,Motion Joint Photographic Experts Group)是一种视频压缩格式,其中每一帧图像都分别使用JPEG编码,不使用帧间编码,压缩率通常在20:1-50:1范围内。比不上h264,h265,但是有一个非常好的地方,就是可以直接在http里面显示.
httpflvhttpflv 其实最终是要变成fmp4格式来使用浏览器来展示的,这一点一定要清楚,如果不清楚fmp4,一定要搞清楚这种格式。
接收mjpeg准备一个http客户端,接收mjpeg服务器的码流,实际上,他是一张张的jpg图片在http通道里面传输过来。以下是使用asio制作的一个客户端,链接http server之后,每次都去获取mjpeg帧的边界,叫 Content-Type:.*boundary=,还有一个关键就是获取每一帧的content-length,这个都是使用http协议解析来获取。
void capture_start(s_param *param)
{
//开始视频采集
if (param != NULL)
{
asio::io_context io_service;
tcp::resolver resolver(io_service);
tcp::resolver::query query(param->host, param->port);
tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
tcp::resolver::iterator end;
tcp::socket socket(io_service);
//socket.io_control(asio::ip::tcp::socket::non_blocking(true));
std::error_code error = asio::error::host_not_found;
while (error && endpoint_iterator != end) {
socket.close();
//int timeout = 3000;
//int nRet = setsockopt(socket.native_handle(), SOL_SOCKET, SO_CONNECT_TIME, (const char*)&timeout, sizeof(timeout));
socket.connect(*endpoint_iterator++, error);
}
if (error) {
cout
关注
打赏