文实现:opencv采集视频,人脸识别,ffmpeg推流,srs推流服务,VLC客户端 和vue web端实现显示功能。
环境PC:
一、推流
1)命令行推流:可以测试整个流程的是否有问题,
ffmpeg -f dshow -i video="Integrated Camera" -vcodec libx264 -acodec copy -preset:v ultrafast -tune:v zerolatency -f flv rtmp://192.168.1.106:2018/live
2)在工程中使用采用源码推流
程序实现推流,可以设置一些参数,添加一些算法(人脸识别等功能):推流识别源码
部分代码如下:
算法识别部分,识别需要RGB图像,需要将YUV转化为RGB:
//读取摄像头,解码视频帧
if (!cam.grab())
{
continue;
}
//yuv转换为rgb
if (!cam.retrieve(frame))
{
continue;
}
if (frame.empty())
break;
double t = cv::getTickCount();
//人脸识别算法
detectFaceOpenCVDNN(net, frame);
tt_opencvDNN = ((double)cv::getTickCount() - t) / cv::getTickFrequency();
fpsOpencvDNN = 1 / tt_opencvDNN;
putText(frame, format("OpenCV DNN ; FPS = %.2f", tt_opencvDNN), Point(10, 50), FONT_HERSHEY_SIMPLEX, 1.4, Scalar(0, 0, 255), 4);
推流部分程序:
pack.pts = av_rescale_q(pack.pts, vc->time_base, vs->time_base);
pack.dts = av_rescale_q(pack.dts, vc->time_base, vs->time_base);
pack.duration = av_rescale_q(pack.duration, vc->time_base, vs->time_base);
ret = av_interleaved_write_frame(ic, &pack);
二、推流服务,srs和nginx选择其中一个即可
1)srs推流拉流服务 srs源码
默认配置即可
./configure && make
./objs/srs -c conf/srs.conf
2)nginx服务:
./sbin/nginx -c ./conf/nginx.conf
查看服务进程
ps aux | grep "nginx"
三、拉流端
1)使用VLC软件,下载软件设置URL:
2)使用web拉流
使用VUE框架搭建前端页面显示
npm install
npm run serve
将http://localhost:8080/输入到浏览器中
双路播放界面如下所示,收流成功,并且有人脸识别效果: