如何解决如何确保 ffmpeg 库使用/不使用 GPU
我的库(Linux、Debian)使用 FFMpeg 库(avformat、avcodec、swscale 等)从网络摄像机读取视频流。实际上,我需要从网络摄像机中捕获每个视频帧,对其进行解码、缩放并存储在内存中,其他线程将这些数据传递给调用程序进行显示。
问题是,所有这些都在 cpu 中运行并占用大量 cpu 资源。如何强制使用 GPU 加速器进行处理?
我有显卡:VGA 兼容控制器:Intel Corporation HD Graphics 620 (rev 02)
我的解码线程看起来像这样(我省略了声明、错误处理等,所以请不要查找语法错误:)))
fmt = avformat_alloc_context();
//initialising,setting option by av_dict_set
// finding video stream index
***
// finding decoder and allocate its contexts
frame = av_frame_alloc();
while ( av_read_frame(ctx->fmt,&pkt) >= 0)
{
AVPacket orig_pkt = pkt;
avcodec_send_packet(ctx->dec_ctx,pkt);
avcodec_receive_frame(ctx->dec_ctx,frame);
***
// get buffer allocated for store of frame data
buff = get_free_buffer(ctx);
sws_scale(ctx->sws,(const uint8_t * const*)frame->data,frame->linesize,ctx->dec_ctx->height,buff->data,buff->linesize);
ret = decode_packet(ctx,frame,&pkt,&got_frame);
if (ret < 0)
break;
pkt.data += ret;
pkt.size -= ret;
}
while (pkt.size > 0);
av_packet_unref(&orig_pkt);
}
*****
解决方法
你可以在互联网上找到硬件加速的 ffmpeg 重新编码命令,我正在使用
ffmpeg -vaapi_device /dev/dri/renderD128 -i "inputfile" -vf format=nv12,hwupload -c:v h264_vaapi -f mp4 -qp 18 -map 0 "outputfile.mp4"
您可以使用命令 ffmpeg -hwaccels
通过命令 ls /dev/dri/
和 DRI framework 路径列出硬件加速器,然后可以使用命令 ffmpeg -encoders
找到视频编解码器/编码器(上面示例中的 h264_vaapi) }. -f mp4
参数可能不是定义文件格式所必需的,-qp
设置质量(在这种情况下类似于原始文件),-map 0
将尝试使用输入文件的所有流,而不仅仅是最高质量的流,第一个/默认字幕...
另一方面,当我没有定义硬件加速器设备并使用默认编码器 libx264 时,我可以看到 CPU 已被最大化,因此可能没有使用硬件加速。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。