ffmpeg
文章平均质量分 79
小码哥_WS
这个作者很懒,什么都没留下…
展开
-
ffmpeg必知道的知识点
ffmpegFFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。多媒体视频处理工具FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、原创 2017-04-22 10:04:36 · 11237 阅读 · 1 评论 -
ffmpeg源码简析(三)av_malloc(),AVIOContext,AVFrame,avio_open2()等
内存操作的常见函数位于libavutil\mem.cav_malloc()av_malloc()是FFmpeg中最常见的内存分配函数。av_malloc()的代码可以简化成如下形式。void *av_malloc(size_t size) { void *ptr = NULL; /* let's disallow possibly ambiguous cases */原创 2017-04-24 17:07:46 · 2511 阅读 · 0 评论 -
ffmpeg实战教程(九)windows下ffmpeg命令+nginx + rtmp实现推流,拉流。
概述Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。 nginx-rmtp-module是Nginx服务器的流媒体插件。nginx通过rtmp模块提供rtmp服务, ffmpeg推送一个rtmp流到nginx, 然后客户端通过访问nginx来收看实时视频流。先介绍一下windows下搭建nginx + rtmp有两种方案: (一) 1.下载ng原创 2017-05-15 14:41:14 · 20767 阅读 · 9 评论 -
ffmpeg源码简析(八)解码 av_read_frame(),avcodec_decode_video2(),avformat_close_input()
1.av_read_frame()av_read_frame()的作用是读取码流中的音频若干帧或者视频一帧。例如,解码视频的时候,每解码一个视频帧,需要先调用 av_read_frame()获得一帧视频的压缩数据,然后才能对该数据进行解码(例如H.264中一帧压缩数据通常对应一个NAL)。通过av_read_packet(***),读取一个包,需要说明的是此函数必须是包含整数帧的,不存在半帧的情况,原创 2017-04-24 20:42:13 · 2246 阅读 · 0 评论 -
ffmpeg源码简析(九)av_log(),AVClass,AVOption
1.av_log()av_log()是FFmpeg中输出日志的函数。随便打开一个FFmpeg的源代码文件,就会发现其中遍布着av_log()函数。一般情况下FFmpeg类库的源代码中是不允许使用printf()这种的函数的,所有的输出一律使用av_log()。 av_log()的声明位于libavutil\log.h,如下所示。void av_log(void *avcl, int level,原创 2017-04-25 09:19:05 · 1619 阅读 · 0 评论 -
ffmpeg源码简析(十)libswscale中的SwsContext,sws_scale()
libswscale是一个主要用于处理图片像素数据的类库。可以完成图片像素格式的转换,图片的拉伸等工作。 libswscale常用的函数数量很少,一般情况下就3个:sws_getContext():初始化一个SwsContext。sws_scale():处理图像数据。sws_freeContext():释放一个SwsContext。其中sws_getContext()也可以用sws_getCa原创 2017-04-25 09:46:01 · 3967 阅读 · 1 评论 -
ffmpeg源码简析(十一)libavformat,libavcodec,libavutil
libavformatavformat.h 文件 定义识别文件格式和媒体类型库使用的宏、数据结构和函数,通常这些宏、数据结构和函数在此模块内相 对全局有效allformat.c 文件 简单的注册/初始化函数,把相应的协议,文件格式,解码器等用相应的链表串起来便于查找。cutils.c 文件 文件格式分析模块使用的两个工具类函数,都是对字符串的操作。file.c 把 file 当做类似原创 2017-04-25 10:40:33 · 1990 阅读 · 0 评论 -
ffmpeg实战教程(十)ffmpeg/camera实现最近很火的视频壁纸,相机壁纸
本篇实现一个有意思的玩意儿,视频壁纸,相机壁纸 这玩意好像现在还都是国外版本,哈哈先上图: 视频壁纸 相机壁纸 1.动态壁纸制作的知识:每一个动态壁纸都继承自WallpaperService,其中必须实现的抽象方法onCreateEngine,返回一个Engine对象,实际上所有的绘图与刷新都是由engine完成。如下public class VideoLiveWallpaper exten原创 2017-05-16 10:19:50 · 6885 阅读 · 1 评论 -
ffmpeg源码简析(十三)ffmpeg API变更 2009-03-01—— 2017-05-09变更
Add:新增的Change/Rename:修改的Deprecate:过时的。以后很有可能删除。Remove:删除的The last version increases were:libavcodec: 2015-08-28libavdevice: 2015-08-28libavfilter: 2015-08-28libavformat: 2015-08-28libavr原创 2017-05-09 10:43:32 · 31561 阅读 · 3 评论 -
ffmpeg源码简析(一)结构总览
未毕业通过校招进入了某做机的公司从事camera方面的工作。比较悲剧的是做了将近一年的Camera之后,正要研究Camera上下层打通任督二脉的时候,公司架构调整加上OS版本大变动,被调到了多媒体组(不过也好,我对编码解码这块也是向往已久)。以前大学的时候用vitamio写过一个播放器项目,后来ijkplayer 出来之后也实践过一两个小项目,它们都是基于ffmpeg的框架。 悬窗播放视频,让你聊原创 2017-04-24 14:24:00 · 23338 阅读 · 7 评论 -
ffmpeg实战教程(十一)手把手教你实现直播功能,不依赖第三方SDK
直播,2016最火的技术之一了,更多的关于直播的知识:http://blog.csdn.net/king1425/article/details/72489272 …这篇我们就不依赖任何集成好的SDK,自己搭建服务器,用ffmpeg+nginx实现手机直播功能先上图:推流的手机拉流的网页和VL播放器拉流的手机客户端对于nginx服务器的搭建之前有写过:ffmpeg实战教程(九)windows下ff原创 2017-05-19 20:24:01 · 18737 阅读 · 9 评论 -
ffmpeg实战教程(十二)为视频添加/更换背景音乐
2017年,各种关于视频处理的功能层出不穷,现在基本上大多APP都有视频上传播放功能。 然而上传,播放可用的优秀框架有很多,我们在此就不说了。 本篇我们就做一个用ffmpeg给视频添加/更换背景音乐的功能UI界面有两个输入框,第一个填入要加背景音乐的视频文件,第一个要添加音乐的文件。 然后点击按钮。 可见在手机根目录生成了一个合成的视频文件。试播一下,发现已经有了背景音乐。 其实现原理主要是原创 2017-05-22 17:59:14 · 11393 阅读 · 11 评论 -
ffmpeg实战教程(六)Android CMake实现解码(MP4转YUV)
在前面的文章中我们用ffmpeg在windows上实现了多种功能,下面系列的文章我们将移植到Android系统上实现。我们将使用最新版:最新版ffmpeg ffmpeg3.3 新版Android studio Android studio2.3 新版JNI编译方式 CMake对于Android开发者或许对C/C++/J原创 2017-05-09 11:55:49 · 9996 阅读 · 3 评论 -
ffmpeg源码简析(四)avcodec_find_encoder(),avcodec_open2(),avcodec_close()
avcodec_find_encoder()和avcodec_find_decoder()avcodec_find_encoder()用于查找FFmpeg的编码器,avcodec_find_decoder()用于查找FFmpeg的解码器。 avcodec_find_encoder()的声明位于libavcodec\avcodec.havcodec_find_encoder()的源代码位于libav原创 2017-04-24 17:28:49 · 3099 阅读 · 0 评论 -
ffmpeg源码简析(二)av_register_all(),avcodec_register_all()
av_register_all()该函数在所有基于ffmpeg的应用程序中几乎都是第一个被调用的。只有调用了该函数,才能使用复用器,编码器等。av_register_all()调用了avcodec_register_all()。avcodec_register_all()注册了和编解码器有关的组件:硬件加速器,解码器,编码器,Parser,Bitstream Filter。av_register_a原创 2017-04-24 16:00:03 · 4988 阅读 · 1 评论 -
ffmpeg实战教程(三)音频PCM采样为AAC,视频YUV编码为H264/HEVC
音频PCM采样数据编码为压缩码流(MP3,WMA,AAC等)简单介绍一下流程中各个函数的意义:av_register_all():注册FFmpeg所有编解码器。avformat_alloc_output_context2():初始化输出码流的AVFormatContext。avio_open():打开输出文件。av_new_stream():创建输出码流的AVStream。avcodec_find_原创 2017-05-04 20:28:15 · 5701 阅读 · 2 评论 -
windows下编译最新版ffmpeg3.3-android,并通过CMake方式移植到Android studio2.3中
windows下编译最新版ffmpeg3.3win下编译: 1.下载安装MinGW:http://sourceforge.net/projects/mingw/files/ 2.下载yasm http://yasm.tortall.net/Download.html 3.下载 ffmpeg:https://www.ffmpeg.org/download.html 编辑ffmpeg文件夹下原创 2017-04-21 20:34:02 · 8529 阅读 · 25 评论 -
ffmpeg实战教程(四)格式转换如MP4转MKV等
知识延伸:I,P,B帧和PTS,DTS的关系基本概念:I frame :帧内编码帧 又称intra picture,I 帧通常是每个 GOP(MPEG 所使用的一种视频压缩技术)的第一个帧,经过适度地压缩,做为随机访问的参考点,可以当成图象。I帧可以看成是一个图像经过压缩后的产物。P frame: 前向预测编码帧 又称predictive-frame,通过充分将低于图像序列中前面已编码帧的时间冗余信原创 2017-05-05 10:37:47 · 8186 阅读 · 1 评论 -
ffmpeg实战教程(七)Android CMake avi解码后SurfaceView显示
在上一篇文章中实现了Android平台MP4解码YUV数据, 本篇我们实现Android平台解码avi并用SurfaceView播放。先上图看效果:思路: 1.把封装好的视频数据解码为YUV 2.YUV数据转化为RGB。 3.一帧一帧的传给SurfaceView显示出来PS: 其实YUV数据可直接在SurfaceView显示,在研究Android系统多媒体框架的stagefright视频显原创 2017-05-10 09:30:58 · 4741 阅读 · 5 评论 -
ffmpeg源码简析(六)编码-av_write_frame(),av_write_trailer()
1.av_write_frame()av_write_frame()用于输出一帧视音频数据,它的声明位于libavformat\avformat.h,如下所示。int av_write_frame(AVFormatContext *s, AVPacket *pkt); 简单解释一下它的参数的含义: s:用于输出的AVFormatContext。 pkt:等待输出的AVPacket。函数原创 2017-04-24 19:35:45 · 2742 阅读 · 0 评论 -
ffmpeg源码简析(五)编码——avformat_alloc_output_context2(),avcodec_encode_video2()
1.avformat_alloc_output_context2()在基于FFmpeg的视音频编码器程序中,该函数通常是第一个调用的函数(除了组件注册函数av_register_all())。avformat_alloc_output_context2()函数可以初始化一个用于输出的AVFormatContext结构体。它的声明位于libavformat\avformat.h,如下所示。int av原创 2017-04-24 19:22:42 · 1887 阅读 · 0 评论 -
ffmpeg源码简析(七)解码-avformat_open_input,avformat_find_stream_info()
1.avformat_open_input打开媒体的的过程开始于avformat_open_input,因此该函数的重要性不可忽视。在该函数中,FFMPEG完成了:输入输出结构体AVIOContext的初始化;输入数据的协议(例如RTMP,或者file)的识别(通过一套评分机制):1判断文件名的后缀 2读取文件头的数据进行比对;使用获得最高分的文件协议对应的URLProtocol,通过函数指针的方式原创 2017-04-24 20:05:42 · 2565 阅读 · 0 评论 -
ffmpeg实战教程(八)Android平台下AVfilter 实现水印,滤镜等特效功能
上一篇我们实现了Android平台解码avi并用SurfaceView播放。 ffmpeg实战教程(七)Android CMake avi解码后SurfaceView显示 本篇我们在此基础上实现滤镜,水印等功能。对ffmpeg不熟的客官看这里:ffmpeg源码简析(一)结构总览 先上两张效果图: 黑白:const char *filters_descr = “lutyuv=’u=128:v=12原创 2017-05-11 11:52:35 · 5148 阅读 · 4 评论 -
ffmpeg实战教程(二)用SDL播放YUV,并结合ffmpeg实现简易播放器
我们先实现用SDL播放YUV数据先来了解一下基本概念SDL基本函数: [初始化] * SDL_Init(): 初始化SDL。 * SDL_CreateWindow(): 创建窗口(Window)。 * SDL_CreateRenderer(): 基于窗口创建渲染器(Render)。 * SDL_CreateTexture(): 创建纹理(Texture)。[循环渲染数据] *原创 2017-05-04 15:33:08 · 5337 阅读 · 0 评论 -
ffmpeg实战教程(一)Mp4,mkv等格式解码为h264和yuv数据
FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。而网上对这些功能的使用大多是基于命令行的。这不利于我们深入学习定制化ffmpeg,今后我将写一系列的用代码实现这些功能的教程供大家学习。这系列的前部分我打算写在windows上的实现,后部分写移植到Android系统上实现。 代码实现的前提是对ffmpeg源码有一定的了解,如果你不了解可以看这里 ffmpeg源原创 2017-05-04 12:16:41 · 21057 阅读 · 15 评论 -
ffmpeg源码简析(十二)FFMPEG中的主要结构体总结
FFMPEG中结构体很多。最关键的结构体可以分成以下几类:a) 解协议(http,rtsp,rtmp,mms)AVIOContext,URLProtocol,URLContext主要存储视音频使用的协议的类型以及状态。URLProtocol存储输入视音频使用的封装格式。每种协议都对应一个URLProtocol结构。(注意:FFMPEG中文件也被当做一种协议“file”)b)原创 2017-05-02 14:54:21 · 1523 阅读 · 0 评论 -
ffmpeg实战教程(五)libswscale,libavfilter实践指南
1.libswscale实现YUV转RGBlibswscale里面实现了各种图像像素格式的转换。libswscale使用起来很方便,最主要的函数只有3个: (1) sws_getContext():使用参数初始化SwsContext结构体。 (2) sws_scale():转换一帧图像。 (3) sws_freeContext():释放SwsContext结原创 2017-05-05 16:59:18 · 4349 阅读 · 1 评论 -
ffmpeg实战教程(十三)iJKPlayer源码简析
要使用封装优化ijk就必须先了解ffmpeg,然后看ijk对ffmpeg的C层封装! 这是我看ijk源码时候的笔记,比较散乱。不喜勿喷~ijk源码简析:1.ijkplayer_jni.c 封装的播放器JNI层 API,对应java层调用。2.ijkplayer.c 封装的播放器API,对应给JNI层调用3.ff_ffplay_options.c 参原创 2017-07-01 10:34:15 · 6848 阅读 · 0 评论