基于FFmpeg的远程视频监控系统编解码
下面对编码流程的各个步骤中主要函数的作用进行详细介绍:
1)av_register_all():注册库中含有所有文件格式和编解码器,没有这一步将无法打开编解码器。
2)av_open_imput_file():打开摄像头视频文件。
3)av_find_stream_info():寻找视频流。
4)av_find_encoder():寻找编码器,编码器参数需在pCodec中初始化,参数的初始化很重要,对编码的图像质量有很大影响。
pCodec=avcodec_find_encoder (CODEC_ID_H264);//寻找H.264格式编码器
5)avcodec_alloc_frame():为编码帧分配内存。
pFrame=avcodec_alloc_frame();//pFrame为AVFrame格式
6)avcodec_open():打开编码器。
7)av_read_frame():从视频流中读取一帧视频数据。
8)avcodec_encode_video():编码一帧视频数据。
9)avcodec_close():关闭编码器。
10)avformat_close_mput file():关闭视频摄像头文件。
3 接收处理端
接收处理端可以与任意一个采集发送端进行连接通信。连接后可以接收采集发送端发送的视频数据,经过FFmpeg解码后显示。
3.1 FFmpeg解码
用FFmpeg解码的流程与编码的流程大致相同,只是解码的核心函数为avcodec_decode_video()。接收处理端接收到一帧数据后,通过avpicture_fill()存储到AVFrame格式的内存空间中,然后再使用avcodec_decode_video()函数进行解码。其解码流程如图3所示:
3.2.视频显示
FFmpeg对H.264解码出来格式是YUV(.i420)格式,需要转换成RGB(.rgb24)格式显示,使用FFMPEG中的sws_scalc()函数可以实现格式转换。
显示视频采用的是OpenCV。显示的核心函数是cVShowImage(char* name,lpllmage* dst),将得到的RGB(.rgb24)格式数据转换为OpenCV格式的lpllmage数据,然后显示在监控窗口上,如图4所示:
随着视频压缩技术的发展成熟,嵌入式视频监控逐渐在监控领域占有重要地位。以S3C2440为嵌入式硬件平台,通过摄像头采集数据,在嵌入式Linux与Windows操作系统相结合的跨平台上,实现FFmpeg的编解码,为实际嵌入式视频监控系统的视频压缩传输设计,提供了一种可行的方法。
- 移植 ffmpeg 到 ARM 平台(11-09)
- ffmpeg 移植到 arm s3c2410(11-09)
- OpenCV ffmpeg移植到ARM平台(11-09)
- 嵌入式Linux下基于FFmpeg的视频硬件编解码(03-06)
- 带DSP功能的超低功率音频编解码器帮助解决音频方案挑战(05-04)
- 语音编解码算法G.723.1在DSP上的优化(05-18)