
FFMPEG
FFMPEG
@hdd
good good study, day day up
展开
-
FFMPEG+SDL播放音频流
SDL播放音频和视频一样,需要先解码,再播放;但音频的播放不同于视频,他需要调用扬声器,播放音频不像视频一样给一帧数据播放一帧,音频是扬声器将缓冲区的数据播放完之后再向程序拿取数据。SDL播放音频流程:1)初始化SDL:SDL_Init()2)设置音频空间参数,并定义填充缓存区的回调函数:设置SDL_AudioSpec参数3)打开音频设备:SDL_OpenAudio()4)播放:SDL_PauseAudio(0) //0表示播放,1表示暂停5)退出SDL:SDL_Quit()...原创 2020-09-15 20:05:44 · 874 阅读 · 0 评论 -
音频重采样-libswresample
头文件<libswresample/swresample.h>功能:1)采样频率转换:对音频的采样频率转换,如将采样率从44.1K转换到48K,注意从高采样频率到低采样频率的音频转换是一个有损的过程。2)声道格式转换:对音频的声道格式转换,将立体声转换为单声道。3)样本格式转换:对音频的样本格式转换,还包括Packed和Planar包装格式之间相互转换。音频重采样步骤: 1)创建重采样过程的上下文环境,SwrContext结构体 2)设置参数(通道数、采样率、采样...原创 2020-09-15 00:04:00 · 1081 阅读 · 0 评论 -
FFMPEG编码实现:pcm编码为acc
本程序流程:1、创建输出码流的上下文AVFormatContext,并初始化2、打开输出文件:avio_open2()3、创建新流:avformat_new_stream() //用于保存音频流信息,一个完整的视频文件包含多个流信息:视频流、音频流、字幕流等4、创建编码器上下文并设置编码参数5、查找编码器并打开编码器6、写入文件头信息:avformat_write_header()7、打开输入文件8、循环读取输入文件的yuv值,并进行编码;编码成功写入文件:av_write_frame...原创 2020-09-14 23:17:37 · 1244 阅读 · 0 评论 -
FFMPEG编码实现:将YUV文件编码为H264
一般编码流程:1、创建编码器上下文并设置编码器参数(编码格式、时间基、编码器类型、最大最小质量、宽高等等)2、寻找编码器3、打开编码器3、获取原始YUV或RGB数据4、编码:avcodec_send_frame()、avcodec_receive_packet()5、输出:保存为文件或封装为其他格式(mp4、flv、avi等)本程序(将YUV文件编码为H264)流程:1、创建输出码流的上下文AVFormatContext,并初始化2、打开输出文件:avio_open2()3、创建新流:原创 2020-09-07 14:35:55 · 1689 阅读 · 0 评论 -
FFMPEG + SDL播放视频流
SDL播放视频流程:相关函数的说明可以看SDL视频播放API由于SDL只能播放YUV和RGB格式的像素帧,所以对于MP4、mkv、avi、flv等封装格式的视频文件来说必须对其解码成YUV或RGB,才能用SDL播放,FFMPEG解码成YUVdemo/* SDL 播放视频流*/#define SDL_MAIN_HANDLED#include <iostream>#include <cstdio>using namespace std;extern "..原创 2020-09-05 10:53:55 · 378 阅读 · 0 评论 -
SDL播放视频及相关API
SDL播放视频流程初始化:SDL_Init(): 初始化SDL。SDL_CreateWindow(): 创建窗口(Window)。SDL_CreateRenderer(): 基于窗口创建渲染器(Render)。SDL_CreateTexture(): 创建纹理(Texture)。循环渲染数据:SDL_UpdateTexture(): 设置纹理的数据。SDL_RenderCopy(): 纹理复制给渲染器。SDL_RenderPresent(): 显示。函数调用流程图:int SDLCA原创 2020-09-03 17:15:13 · 298 阅读 · 0 评论 -
图像格式转换-libswscale
libswscale 是一个主要用于处理图片像素数据的类库。可以完成图片像素格式的转换,图片的拉伸,图像的滤波等工作。主要使用下面三个函数实现对图片的操作:sws_getContext()/sws_getCachedContext():初始化一个SwsContextsws_scale():处理图像数据sws_freeContext():释放一个SwsContext1、sws_getContextstruct SwsContext *sws_getContext( int src原创 2020-09-02 10:17:44 · 695 阅读 · 0 评论 -
基于 ffmpeg 的解码实现
视频文件的封装格式#include <iostream>#include <cstdio>using namespace std;extern "C"{#include <libavcodec/avcodec.h>#include <libavformat/avformat.h>#include <libswscale/swscale.h>#include "libavutil/imgutils.h"...原创 2020-09-02 09:02:12 · 728 阅读 · 0 评论