调用FFMPEG Device API完成Mac录屏功能。
调用FFMPEG提供的API来完成录屏功能,大致的思路是:
- 打开输入设备.
- 打开输出设备.
- 从输入设备读取视频流,然后经过解码->编码,写入到输出设备.
因此主要使用的API就是:
- avformat_open_input
- avcodec_find_decoder
- av_read_frame
- avcodec_send_packet/avcodec_receive_frame
- avcodec_send_frame/avcodec_receive_packet
- 打开输入设备
如果使用FFmpeg提供的-list_devices
命令可以查询到当前支持的设备,其中分为两类: - AVFoundation video devices - AVFoundation audio devices
AVFoundation 是Mac特有的基于时间的多媒体处理框架。本次是演示录屏功能,因此忽略掉audio设备,只考虑video设备。在avfoundation.m
文件中没有发现可以程序化读取设备的API。FFmpeg官方也说明没有程序化读取设备的方式,通用方案是解析日志来获取设备(https://trac.ffmpeg.org/wiki/DirectShow#Howtoprogrammaticallyenumeratedevices),下一篇再研究如何通过日志获取当前支持的设备,本次就直接写死设备ID。
- 获取指定格式的输入设备
pAVInputFormat = av_find_input_format("avfoundation");
通过指定格式名称获取到AVInputFormat结构体。
<