![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
FFMPEG
文章平均质量分 61
Loong.xu
青春的诀别是不是意味着年迈的将近;其实,青春,她一直都在继续.
展开
-
WebRtc集锦
WebRtc集锦原创 2022-08-24 09:31:18 · 896 阅读 · 0 评论 -
WebRtc系列
webRtc 移动端的实现系列原创 2022-08-02 21:30:54 · 1005 阅读 · 0 评论 -
Byte、bit 、和16进制之间的关系
bit(比特)byte(字节)一、bit(比特)计算机内存储和处理信息的最小单位是位(bit,或比特),一个比特值可以是0或1,不能再分割1bit = 一个二进制位01011110 = 表示一个8位的字(比特)表示8位的二进制数二、byte(字节)通常8个二进制位为一个字节(byte)三、换算关系8个二进制位 (bit)= 1字节(byte)四、与16进制的关系1、通常一个字节 =两个16进制位过程解析:1个16进制数 = 4个二进制数位, 2个16进制数...原创 2021-09-03 10:23:47 · 14280 阅读 · 0 评论 -
Windows下编译安装 FFmpeg
##前言最近我的视频课《FFmpeg音视频核心技术精讲与实战》终于与大家见面了。在学生学习的过程中不断有学生反馈一些问题,其中较多的是如何在Windows 上编译 ffmpeg。在Linux/Mac下编译 ffmpeg是非常方便的。但要在 Windows下编译 ffmpeg还真要花点时间。不过为了满足学员的要求,也方便自己不再被这类问题打扰,今天我就写一下在 Windowns下编译ffmpeg的步骤,以供大家参考。安装Cygwin在windows下安装 ffmpeg 的最好方式就是使用Cygw原创 2021-08-20 14:01:02 · 532 阅读 · 0 评论 -
自适应流媒体传输大总结
自适应流媒体传输(一)——DASH媒体内容的生成自适应流媒体传输(二)——为什么要使用fragmented MP4自适应流媒体传输(三)——和TS格式说再见自适应流媒体传输(四)——深入理解MPD自适应流媒体传输(五)——正确认识码率切换...原创 2021-01-02 16:04:41 · 586 阅读 · 0 评论 -
JNI开发(三)局部引用、全局引用和弱全局引用
这篇文章比较偏理论,详细介绍了在编写本地代码时三种引用的使用场景和注意事项。可能看起来有点枯燥,但引用是在JNI中最容易出错的一个点,如果使用不当,容易使程序造成内存溢出,程序崩溃等现象。所以讲得比较细,有不足的地方,还请见谅!《Android JNI局部引用表溢出:local reference table overflow (max=512)》这篇文章是一个JNI引用使用不当造成引用表溢出,最终导致程序崩溃的例子。建议看完这篇文章之后,再去看。做Java的朋友都知道,在编码的过程当中,内存管理这一块转载 2020-05-31 16:43:42 · 558 阅读 · 0 评论 -
JNI开发(二)方法签名与Java通信
本篇文章将通过以下两部分内容来介绍JNI开发:Android NDK开发 JNI类型签名和方法签名 JNI实现java与c/c++相互通讯一、Android NDK开发 JNI类型签名和方法签名在Java存在两种数据类型: 基本类型 和 引用类型 ,大家都懂的 。在JNI的世界里也存在类似的数据类型,与Java比较起来,其范围更具严格性,如下:1、primitive types ----基本数据类型,如:int、 float 、char等基本类型2、reference types--翻译 2020-05-31 15:23:12 · 691 阅读 · 0 评论 -
JNI开发(一) 静态注册与动态注册
静态注册原理:根据函数名来建立 java 方法与 JNI 函数的一一对应关系;实现流程:编写 java 代码;利用 javah 指令生成对应的 .h 文件;对 .h 中的声明进行实现;弊端:编写不方便,JNI 方法名字必须遵循规则且名字很长;编写过程步骤多,不方便;程序运行效率低,因为初次调用native函数时需要根据根据函数名在JNI层中搜索对应的本地函数,然后建立对应关系,这个过程比较耗时;JNIEXPORT jstring JNICALLJava_com_exampl翻译 2020-05-31 14:59:46 · 280 阅读 · 0 评论 -
avcodec_decode_video2()解码视频后丢帧的问题解决
使用libav转码视频时发现一个问题:使用下面这段代码解码视频时,视频尾巴上会丢掉几帧。[cpp] view plaincopywhile(av_read_frame(ifmt_ctx,&packet) >= 0){ ret = avcodec_decode_video2(video_dec_ctx, vframe, &got_转载 2014-04-11 10:50:09 · 7422 阅读 · 1 评论 -
最新版ffmpeg源码分析一:框架
(ffmpeg v0.9)框架最新版的ffmpeg中发现了一个新的东西:avconv,而且ffmpeg.c与avconv.c一个模样,一研究才发现是libav下把ffmpeg改名为avconv了.到底libav与ffmpeg现在是什么个关系?我也搞得希里糊涂的,先不管它了.ffmpeg的主要功能是音视频的转换和处理.其功能之强大已经到了匪夷所思的地步(有点替它吹了)转载 2014-04-04 17:26:32 · 1074 阅读 · 0 评论 -
MediaInfo源代码分析 :API函数
注:此前已经写了一系列分析MediaInfo源代码的文章,列表如下:MediaInfo源代码分析 1:整体结构MediaInfo源代码分析 2:API函数MediaInfo源代码分析 3:Open()函数MediaInfo源代码分析 4:Inform()函数MediaInfo源代码分析 5:JPEG解析代码分析===================本文主要分转载 2014-04-04 12:19:17 · 2734 阅读 · 0 评论 -
FFMPEG结构体分析:AVFormatContext
分类: FFMPEG2013-11-08 00:16 2445人阅读 评论(0) 收藏 举报ffmpegAVFormatContext源代码视频元数据注:写了一系列的结构体的分析的文章,在这里列一个列表:FFMPEG结构体分析:AVFrameFFMPEG结构体分析:AVFormatContextFFMPEG结构体分析:AVCodecConte转载 2014-04-04 09:47:11 · 2692 阅读 · 0 评论 -
FFMPEG源码分析:avformat_open_input()(媒体打开函数)
本文分析了FFMPEG中的媒体打开函数avformat_open_input()[cpp] view plaincopy//参数ps包含一切媒体相关的上下文结构,有它就有了一切,本函数如果打开媒体成功, //会返回一个AVFormatContext的实例. //参数filename是媒体文件名或URL. //参数转载 2014-04-04 09:33:24 · 2869 阅读 · 0 评论 -
FFmepg 多线程解码历程 - 5: ff_thread_init
//用来判断是帧还是片线程初始化int ff_thread_init(AVCodecContext *avctx){ if (avctx->thread_opaque) { av_log(avctx, AV_LOG_ERROR, "avcodec_thread_init is ignored after avcodec_open\n");转载 2014-03-13 10:11:16 · 2289 阅读 · 0 评论 -
ffmpeg结构体以及函数介绍(二)
1 avcodec_find_decoder()/** * Find a registered decoder with a matching codec ID. * * @param id CodecID of the requested decoder * @return A decoder if one was found, NULL othe转载 2014-03-20 11:38:49 · 867 阅读 · 0 评论 -
ffmpeg结构体以及函数介绍(一)
本文对在使用ffmpeg进行音视频编解码时使用到的一些函数做一个简单介绍,我当前使用的ffmpeg版本为:0.8.5,因为本人发现在不同的版本中,有些函数名称会有点小改动,所以在此有必要说明下ffmpeg的版本号。 ffmpeg本人也是刚接触,本文将采用累加的方法逐个介绍我使用到的函数,如有不妥之处,还望谅解! 头文件引入方法:extern "C"{转载 2014-03-20 11:34:45 · 966 阅读 · 0 评论 -
ffmpeg结构体以及函数介绍(三)
1 AVPackettypedef struct AVPacket { /** * Presentation timestamp in AVStream->time_base units; the time at which * the decompressed packet will be presented to the user.转载 2014-03-20 11:40:40 · 899 阅读 · 0 评论 -
FFMpeg框架代码阅读
1. 简介FFmpeg是一个集录制、转换、音/视频编码解码功能为一体的完整的开源解决方案。FFmpeg的开发是基于Linux操作系统,但是可以在大多数操作系统中编译和使用。FFmpeg支持MPEG、DivX、MPEG4、AC3、DV、FLV等40多种编码,AVI、MPEG、OGG、Matroska、ASF等90多种解码.TCPMP, VLC, MPlayer等开源播放器都用到了FF转载 2014-03-20 11:26:30 · 1436 阅读 · 0 评论 -
windows下使用MinGW+msys编译ffmpeg(ffmpeg各版本下载)
转载自zhubingke.blog.chinaunix.net 本文参考了网络上的不少文章,但由于版本环境的问题参考文章并不能直接指导编译,本文吸收多方经验,并在自己多次编译实验的基础上写成,欢迎转载,请注名出处。 FFmpeg是在Linux平台下开发的,但它同样可以在其它操作系统环境中编译运行,本文介绍的就是在windows下编译FFmpeg。一 编译准备转载 2014-03-20 10:57:55 · 3658 阅读 · 1 评论 -
如何编译ffmpeg以支持dshow设备
fmpeg已经能支持dshow设备了!但编译时会遇到一些麻烦.在此把我的编译历程总结一下,以使后来者的心灵免遭蹂躏.先说一下我的编译环境:mingw+msys,ffmpeg用最新版.在configure ffmpeg工程时,如果不特别指定,默认fdshow设备是被支持的,但编译后却没有.可以查看configure的日志文件,会发现找不到一些依赖的头文件.转载 2014-03-22 08:56:08 · 5172 阅读 · 1 评论 -
FFmpeg的Android平台移植—编译篇
摘要:本文主要介绍将FFmpeg音视频编解码库移植到Android平台上的编译和基本测试过程。环境准备:Ubuntu12.04 TLSandroid-ndk-r9d-linux-x86_64.tar.bz2adt-bundle-windows-x86_64-20131030.zip第一步:源代码下载到FFmpeg官方网站http://ww转载 2016-08-09 15:01:52 · 3135 阅读 · 0 评论 -
Mac环境下编译安装FFMPEG
最近因为做一个云游戏项目,需要以 x264 方式进行实时的视频编解码。由于FFmpeg 默认没有提供 Mac OS X 下的已经编译好的动态链接库(甚至连静态库都没有提供),所有在 Mac OS X 下编译 FFmpeg 动态链接库(以及静态库)版本构建好开发编译环境比较困难,网上很多帖子都是照搬或者版本比较久已经不再有效了。在OS X上编译FFmpeg有以下几种方法。一. 自行编译在Mac OS...原创 2018-02-26 12:22:49 · 5831 阅读 · 2 评论 -
ffmpeg开发环境的安装测试和更新的步骤
本文将介绍ffmpeg开发环境的安装测试和更新的步骤(基于ubuntu16.04和ffmpeg3.2)1.安装x264 1)libx264需要yasm sudo apt-get install yasm但是yasm版本比较旧,所以安装nasm,安装方法在下面2)安装libx264-dev aptitude install libx264-dev3)也可以手动安装libx264(原先libx264在...原创 2018-02-28 11:02:22 · 7718 阅读 · 0 评论 -
ffmpeg解码流程及解码跟踪和关键问题解析
FFMPEG解码流程1. 注册所有容器格式和CODEC:av_register_all()2. 打开文件:av_open_input_file()3. 从文件中提取流信息:av_find_stream_info()4. 穷举所有的流,查找其中种类为CODEC_TYPE_VIDEO5. 查找对应的解码器:avcodec_find_decoder()转载 2014-03-20 11:10:52 · 3828 阅读 · 0 评论 -
FFMPEG解码流程
FFMPEG解码流程: 1. 注册所有容器格式和CODEC: av_register_all() 2. 打开文件: av_open_input_file() 3. 从文件中提取流信息: av_find_stream_info() 4. 穷举所有的流,查找其中种类为CODEC_TYPE_VIDEO 5. 查找对应的解码器: avcodec_find_decoder(转载 2014-02-27 09:31:06 · 13894 阅读 · 0 评论 -
Android本地视频播放器开发--简易播放器原型
在以前的基础上,将音视频进行合并,音频播放采用OpenSL ES,视频播放采用OpenGL ES2.0进行显示,这次的版本其中音频和视频是在同一个线程,会造成音频断断续续,后续会采用音频使用SDL,视频采用SDL+OpenGL ES2.0,这部份代码会在之后开源,现在只提供库用来测试。可以使用git clone https://github.com/jwzhangjie/Graduation.gi转载 2014-03-14 11:04:10 · 1520 阅读 · 0 评论 -
Android本地视频播放器开发--ffmpeg解码视频文件中的音频(1)
在上一章中Android本地视频播放器开发--NDK编译FFmpeg能够获取编译出来的ffmpeg库,接下来就是调用ffmpeg来实现解码,这里我们先解码音频,然后在播放音频,同时为了适应性我会用不同的方法进行播放例如使用Android提供的AudioTrack,SDL、OpengAL,OpenSL ES,最终合入视频播放器的是OpenSL ES,这样可以减少CPU的利用率。接下来在这一章中,原创 2014-03-13 23:01:32 · 1668 阅读 · 0 评论 -
FFmepg 多线程解码历程 - 7:submit_packet
//在ff_thread_decode_frame中会调用submit_packet将码流交给对应的解码线程,来实现线程状态的改变,具体的流程图见下面图static int submit_packet(PerThreadContext *p, AVPacket *avpkt){ FrameThreadContext *fctx = p->parent; PerT转载 2014-03-13 11:16:26 · 2041 阅读 · 0 评论 -
FFmepg 多线程解码历程 - 4:avcodec_open2
//在初始化codec后,接下来就是打开解码器int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options){ int ret = 0; AVDictionary *tmp = NULL; if (avc转载 2014-03-13 09:48:23 · 6556 阅读 · 0 评论 -
FFmepg 多线程解码历程 - 6:frame_thread_init
//ff_thread_init选择帧线程初始化,就会进入frame_thread_initstatic int frame_thread_init(AVCodecContext *avctx){ int thread_count = avctx->thread_count; const AVCodec *codec = avctx->codec; A转载 2014-03-13 10:45:47 · 2835 阅读 · 0 评论 -
FFmepg 多线程解码历程 - 1:validate_thread_parameters
/** * Set the threading algorithms used.//设置线程的使用算法 * Threading requires more than one thread.//需要一个以上的线程 * Frame threading requires entire frames to be passed to the codec,//帧线程需要整个帧被传递到编码解码器转载 2014-03-12 11:30:15 · 6145 阅读 · 0 评论 -
FFmepg 多线程解码历程 - 2 :avcodec_decode_video2
//解码函数int attribute_align_arg avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture, int *got_picture_ptr,转载 2014-03-12 11:39:58 · 4657 阅读 · 0 评论 -
FFMPEG解码多线程
FFMPEG多线程编码器一般以在Slice内分功能模块进行多线程编码,如h263,h263P,msmpeg(v1, v2, v3),wmv1。包含以下几个线程:(1)Pre_estimation_motion_thread运动估计前的准备;(2)Estimation_motion_thread运动估计;(3)Mb_var_thread宏块其他变量;(4)Encode_thread编码主线程。当然也转载 2014-03-12 10:02:38 · 7947 阅读 · 1 评论 -
FFmepg 多线程解码历程 - 3: int ff_thread_decode_frame
//帧级解码函数,在avcodec_open2的时候,就会判断片还是帧解码,分析见下一篇int ff_thread_decode_frame(AVCodecContext *avctx, AVFrame *picture, int *got_picture_ptr, AVPa转载 2014-03-12 12:05:13 · 3067 阅读 · 1 评论 -
Android本地视频播放器开发--SDL编译
在上一章 Android本地视频播放器开发--ffmpeg解码视频文件中的音频(2)中使用OpenSL ES来播放视频的声音,遗留的问题是声音的不同步,由于视频实现部分也要同步,而且音视频也要同步,所以音频部分就不单独同步问题,当同时播放音视频的时候进行两者的同步问题,对于视频显示部分最后是要使用OpenGL es来实现,由于SDL可以和OpenGL ES进行搭配,所以使用SDL+O转载 2014-03-14 09:54:25 · 1410 阅读 · 0 评论 -
Android本地视频播放器开发--视频解码
在上一章Android本地视频播放器开发--SDL编译编译中编译出sdl的支持库,当时我们使用的2.0,但是有些api被更改了,所以在以下的使用者中我们使用SDL1.3的库,这个库我会传上源码以及编译出的库,接下来这张我们使用ffmpeg解码视频文件中的视频帧同时使用SDL去显示。1、Decodec_Video.c 这是我视频解码的文件,其中内容如下:[cpp]原创 2014-03-14 10:23:07 · 1251 阅读 · 0 评论 -
Android本地视频播放器开发--ffmpeg解码视频文件中的音频(2)
在Android本地视频播放器开发--ffmpeg解码视频文件中的音频(1)中我们从视频文件中解码出音频,这一章中将使用OpenSL ES来播放解码的音频数据,首先关于OpenSL ES这里暂不介绍,可以查看官网以及NDK中samples下面的native-audio里面的文件,这里我也是扣取了其中的代码,我们播放音频的部分在上一章的基础上进行添加的,代码如下:[cpp转载 2014-03-13 23:05:35 · 1837 阅读 · 0 评论 -
用Android NDK编译FFmpeg
Android内置的编解码器实在太少,于是我们需要FFmpeg。Android提供了NDK,为我们使用FFmpeg这种C语言代码提供了方便。不过为了用NDK编译FFmpeg,还真的花费了不少时间,也得到了很多人的帮助,最应该谢谢havlenapetr。我觉得我现在这些方法算是比较简洁的了--下面就尽量詳細的说一下我是怎么在项目中使用FFmpeg的,但是基于我混乱的表达能力,有不明白的就问我转载 2014-03-20 10:24:54 · 907 阅读 · 0 评论 -
H264视频通过RTMP直播
前面的文章中提到了通过RTSP(Real Time Streaming Protocol)的方式来实现视频的直播,但RTSP方式的一个弊端是如果需要支持客户端通过网页来访问,就需要在在页面中嵌入一个ActiveX控件,而ActiveX一般都需要签名才能正常使用,否则用户在使用时还需要更改浏览器设置,并且ActiveX还只支持IE内核的浏览器,Chrome、FireFox需要IE插件才能运行,因此会转载 2014-03-20 10:14:08 · 9840 阅读 · 2 评论 -
ffmpeg的AVFilter
利用ffmpeg做图像的pixel format转换你还在用libswscale吗?嘿嘿,过时啦!ffmpeg中有了新东西:libavfilter.使用它,可以完全代替libswscale,并且可以自动完成一些复杂的转换操作呢.libavfilter啊,用了都说好!但就是太复杂...如果你仅仅是做图像的pixel format处理,用libswscale是相当简单,可以看看最新的ffp转载 2014-03-19 22:53:51 · 2786 阅读 · 0 评论