之前学习 ffmpeg 在 android 平台上,发现很不方便,所以打算在 vs 上重新搭建环境,然后重新学习,之后如果需要用到的话在移植到其他平台。...环境搭建参考的是: https://blog.csdn.net/weixinhum/article/details/37699025 环境 Microsoft Visual C++ 2017 vs2017 ffmpeg...av_read_frame(pFmtCtx, pPacket) == 0) {//读取一帧压缩数据 if (pPacket->stream_index == videoIndex) { //写入H264...数据到文件 fwrite(pPacket->data, 1, pPacket->size, h264FilePath); //把H264数据写入h264FilePath文件 //解码数据...在Android上进行视频解码 参考链接: https://blog.csdn.net/king1425/article/details/71160339
ffmpeg包含了很多的音视频解码器,本文试图通过对ffmpeg的简单分析提取h264解码器....使用ffmpeg解码可以参考ffmpeg源码下的doc/examples/decoding_encoding.c 1.首先设置解码器参数( avcodec_find_decoder(CODEC_ID_H264...) 将decode函数指针为 h264_decoder, 即 AVCodec ff_h264_decoder = { .name = “h264”,...avcodec_decode_video通过调avctx->codec->decode函数来完成具体解码器的调用 其中 avctx为 AVCodecContext类型,codec为AVCodec...类型,decode为一个函数指针, 所以真正进行解码的函数为h264.c中的 decode_frame 根据以上分析提取264解码器: extern AVCodec ff_h264
音频解码就是将mp3 aac等格式这些文件解析为pcm格式的过程。...和视频解码流程一样,只是有些函数不一样 #include "lang.h"; #include //封装格式 //解码 #include "log.h" extern "C" {...注册 av_register_all(); //2.打开解码器 解码器 <-- 拿到id <-- 拿到stream和拿到AVCodecContext <-- 拿到AVFormatContext...{ LOGE("打开解码器失败!")...解码 将解码数据封装在AVFrame 解码文件参数设置 //3.1 AVPacket初始化 AVPacket *
由于公司买到了一个不提供解码器的设备,我不得已还要做解码的工作。...在网上找了一圈,H264解码比较方便的也就是ffmpeg一系列的函数库了,原本设备中也是用这套函数库解码,但厂家不给提供,没办法,只得自己搞了。...利用H264解码分为几个步骤: 注意一点在添加头文件的时候要添加extern “C”,不然会出现错误 extern "C" { #include #include <avformat.h...avcodec lib*/ avcodec_init(); /* register all the codecs */ avcodec_register_all(); /* find the h264...解码 解码的时候avcodec_decode_video函数是进行解码操作,在外部定义outputbuf的大小时,pixes*3,outsize是返回的outputbuf的size,值也是pixes*3
解码流程: 获取文件信息,数据存储在AVFormatContext里面 根据AVFormatContext获取对应的AVCodecContext 解码原始数据AVPacket,解码为自己需要的数据AVFrame...解码器获取 //5.1 根据video_index获取解码器上下文AVCodecContext pCodecCtxOrg = pFormatCtx->streams[video_index...打开解码器 if (avcodec_open2(pCodecCtx, pCodec, NULL) < 0) { LOGE ("打开解码器失败"); return;...总结: 要解码,我们需要获取解码器AVCodec,解码器我们需要通过codec_id获取,codec_id我们需要通过AVStream获取,AVStream我们需要通过AVCodecContext获取,...AVCodecContext我们要根据AVFormatContext获取,解码的时候我们要通过AVFormatContext读取,解码数据存储在AVFrame里面,编码数据存储在AVPacket里面。
安装FFmpeg sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-next sudo apt-get update sudo apt-get install...ffmpeg sudo apt-get install libavcodec-ffmpeg-dev 解码过程 1....解码 int decode(unsigned char* data, int data_size) { while (data_size > 0) { int ret = av_parser_parse2...stderr, "Error during decoding\n"); return -1; } //至此解码已经成功
在写代码的过程中,经常需要利用ffmpeg进行h264编解码,ffmpeg默认是不支持h264编解码的,需要在编译ffmpeg时增加支持h264编解码功能模块。...今天给大家分享下ffmpeg是如何增加h264编解码功能模块的。...问题解决 添加h264功能模块,由于默认ffmpeg是不支持h264编解码的,x264是第三方库,需要先下载编译生成库,然后在编译ffmpeg的时候添加此编译选项。...http://ffmpeg.org/download.html下载所需要版本代码,目前我们使用的是4.0.3 http://www.ffmpeg.org/releases/ 各个历史版本下载 (...4)下载完成后进行解压 tar –vxf ffmpeg-4.0.3.tar.xz cd ffmpeg-4.0.3 .
前面 FFmpeg 系列的文章中,已经实现了音视频的播放、录制、添加滤镜等功能: Android FFmpeg 流媒体边播放边录制功能 FFmpeg 实现带滤镜的微信小视频录制功能 FFmpeg + OpenGL...ES 实现 3D 全景播放器 本文将利用 FFmpeg+ MediaCodec 做一个播放器,实现视频的硬解码和音视频同步等功能。...MediaCodec 介绍 MediaCodec 是 Android 提供的用于对音视频进行编解码的类,它通过访问底层的 codec 来实现编解码的功能,是 Android media 基础框架的一部分.../ndk-samples/tree/main/native-codec FFmpeg + ANativeCodec 在 Android 没有在 Native 层开放 ModecCodec 接口之前,FFmpeg...本文将实现 FFmpeg 和 AMediaCodec 结合使用, FFmpeg 负责解复用和音频解码,MediaCodec 负责视频解码并输出到 Surface(ANativeWindow)对象,其中解复用
你不需要具备 C/C++ 背景知识,也不需要编译集成第三方库(如:ffmpeg),使用你现有的知识就可以一个开发复杂的视频应用。...03 MediaCodec 架构介绍 MediaCodec 自 Android 4.1 (API 16) 引入的编解码接口,它是 Android 多媒体架构的一部分,通常和 MediaExtracto,...StageFright 多媒体框架, StageFright 是 Android 平台预设的多媒体框架,自 Andorid 2.3 开始才被引入进来。...OpenMAX 基本介绍 StageFright 底层编解码能力是由 OpenMAX 框架提供,StageFright 遵循 OpenMAX 标准,OpenMAX 全称是 Open Media Acceleration...通过上面介绍,我们知道 MediaCodec 是通过调用 StageFright 调用编解码功能,StageFright 又是通过 OpenMAX 与硬件层进行通信。
音视频硬编码:生成一个MP4 三、Android FFmpeg音视频解码篇 1,FFmpeg so库编译 2,Android 引入FFmpeg 3,Android FFmpeg视频解码播放 4,Android...FFmpeg+OpenSL ES音频解码播放 5,Android FFmpeg+OpenGL ES播放视频 6,Android FFmpeg简单合成MP4:视屏解封与重新封装 7,Android FFmpeg...一、FFmpeg 相关库简介 在 上一篇文章 中,把 FFmpeg 相关的库都引入到 Android 工程中了,有以下几个库: 库 介绍 avcodec 音视频编解码核心库 avformat 音视频容器格式的封装和解析...二、FFMpeg 解码流程简介 在前面的系列文章中,利用了 Android 提供的原生硬解码能力,使用实现了视频的解码和播放。...FFmpeg 初始化 FFmpeg 初始化的流程相对 Android 原生硬解码来说还是比较琐碎的,但是流程都是固定的,一旦封装起来就可以直接套用了。
然后通过媒体格式的 mime 信息创建解码器。 CSD-0/CSD-1 指的就是 H264中的 PPS 和 SPS。...另外,在配置解码器时,可以给它传入一个 Surface,这样解码器解码后,就可以直接将图像帧渲染到 Surface里了。代码如下: .........通过 MediaExtractor 对象从视频轨道中取出H264数据存到InputBuffer中。 3. 将InputBuffer放到InputBuffer队列中。...此时需要解码的数据已经送入了解码器。 4. 从OutputBuffer队列中取OutputBuffer,如果能取到说明已经有解码好的数据了。 5....在循环中不停的向解码器喂数据,并从解码器中取出解码后的数据。 参考 H264编码 ----
引言 在上篇文章中我们通过FFmpeg软解并渲染了本地的一个mp4视频 Android FFmpeg系列03--视频解码与渲染 本文基于之前的Demo添加了FFmpeg使用MediaCodec来硬解码的方式...,包括解码出buffer再利用OpenGL进行渲染上屏和直接解码到Surface然后上屏两种方式 FFmpeg使用MediaCodec可以在解封装后拿到AVPacket再利用jni将buffer回调到...filter的相关接口都已经被移除 所以接下来采用FFmpeg在3.1之后提供的直接调用MediaCodec的C接口来实现硬解码 (https://trac.ffmpeg.org/wiki/HWAccelIntro...) 可以看到目前还只支持解码而不支持编码 编译 在之前的编译脚本中打开如下三个配置即可(详情参考Android FFmpeg系列01--编译与集成) --enable-jni \ --enable-mediacodec...h264解码器id相同,所以 // 软解时 avcodec_find_decoder(id); // 使用mediacodec硬解时 avcodec_find_decoder_by_name(“h264
--enable-shared --enable-small --disable-all --disable-autodetect --enable-avcodec --enable-decoder=h264...这里给大家解释一下原因: 这个get_format的作用是ffmpeg给你提供了多个解码器让你来选一个,而且它内部有一个机制,如果你第一次选的解码器不生效(初始化错误等),它会调用get_format第二次...让你再选一个,而我们首先认定了要用dxva2的硬件解码器,其次,如果dxva2初始化错误,ffmpeg内部会自动降级为内置264软解,因此我们无需多此一举。...发现解码和播放过程中出现异常的解决办法 不支持硬解 代码中已经做出了一部分兼容,因为baseline的判定必须解出sps/pps才能知道,因此这个错误可能会延迟爆出(不过不用担心,如果此时报错,ffmpeg...如若不然,你绘制的画面会进行意向不到的缩放 网络掉包导致硬件解码器错误 见代码 其他directx底层异常 代码中我加了一个try-catch,捕获的异常类型是DirectXException,在c/c
FFmpeg 音视频解码流程 平常我们播放媒体文件时,通常需要经过以下几个步骤 [0sv3sjur08.png] FFmpeg 音视频解码原理 解协议 将流媒体协议的数据,解析为标准的相应的封装格式数据...FFmpeg音视频解码 通过前文,我们知道每一个媒体文件在被终端播放前主要经过了两个关键步骤,分别是解封装和解码。...而在ffmpeg中,使用相关接口实现解封装和解码流程如下图: [h6uibu20vx.png] 由上图可知,我们需要重点关注下面这些FFmpeg的API接口: av_register_all():注册所有组件...avcodec_decode_video2():解码一帧压缩数据。 FFmpeg接口使用 1.在使用FFmpeg解码媒体文件之前,首先需要注册了容器和编解码器有关的组件。...展示 本文最后会附上github demo下载链接,编译运行效果图如下: image.png 小结: 至此,我们了解在Android中使用ffmpeg对音视频文件进行解封装,解码的具体过程,有兴趣的读者建议本章最后下载
引言 在前面的连载系列中,我们分别用FFmpeg的软解和硬解两种方式解码了本地mp4文件的视频流并使用OpenGL渲染上屏 Android FFmpeg系列03--视频解码与渲染 Android...FFmpeg系列04--FFmpeg调用MediaCodec进行硬解码 本篇文章将通过音频基础、AudioTrack、FFmpeg音频解码&重采样三个部分的讲解来完成对Demo中mp4文件内音频流的解码与播放功能...(48kHZ,双声道,fltp格式) 音频基础 关于音频采样率、声道、采样位数等基础可以参考Android FFmpeg系列02--音视频基础 重采样 音频重采样就是通过改变音频的采样率、采样格式...中的音频采样格式 FFmpeg中的音频采样格式分为两种,以P结尾的planar格式和不带P结尾的packed格式 enum AVSampleFormat { AV_SAMPLE_FMT_NONE...release() FFmpeg音频解码&重采样 音频解码的步骤和视频解码步骤是类似的 解封装&找到音频流index -> 打开解码器 -> 循环解码&重采样 -> 解码结束释放相关资源 详细的解码代码就不贴了
在前面的文章中讲述了FFmpeg的编译&集成和音视频的一些基础概念 Android FFmpeg系列01--编译与集成 Android FFmpeg系列02--音视频基础 本文为FFmpeg系列的第三篇文章...,主要内容为利用FFmpeg解码本地mp4文件的视频流并利用OpenGL进行上屏渲染 FFmpeg视频解码 一个音视频文件的播放流程大致需要经历解封装->解码->音视频同步->数据消费几个步骤,如下图所示...解封装并查找视频流 查找解码器并打开 循环解码 核心代码 // step1: alloc format context mFtx = avformat_alloc_context();...sws context后统一转为YUV420P格式,然后抛到java层上传纹理并渲染 OpenGL如何渲染YUV buffer可以参考之前的两篇文章,这里就不赘述~ 如何使用OpenGL渲染YUV数据 Android...中如何使用OpenGL播放视频 Demo https://github.com/sifutang/ffmpeg-demo 点击屏幕左右滑动会将视频划分为gray处理和原视频 ~~END~~
教程代码:【Github传送门】 目录 一、Android音视频硬解码篇: 1,音视频基础知识 2,音视频硬解码流程:封装基础解码框架 3,音视频播放:音视频同步 4,音视频解封和封装:生成一个MP4...音视频硬编码:生成一个MP4 三、Android FFmpeg音视频解码篇 1,FFmpeg so库编译 2,Android 引入FFmpeg 3,Android FFmpeg视频解码播放 4,Android...FFmpeg+OpenSL ES音频解码播放 5,Android FFmpeg+OpenGL ES播放视频 6,Android FFmpeg简单合成MP4:视屏解封与重新封装 7,Android FFmpeg...在方法中,使用 FFmpeg 提供的方法 av_codec_next,获取到 FFmpeg 的编解码器,然后通过循环遍历,将所有的音视频编解码器信息拼接起来,最后返回给 Java 层。...至此,FFmpeg 加入到工程中,并被调用。 如果一切正常,App运行后,就会显示出 FFmpeg 音视频编解码器的信息。
Android2.3时引入流媒体框架,而流媒体框架的核心是NuPlayer。...Android4.0之后HttpLive和RTSP协议开始使用NuPlayer播放器,Android5.0(L版本)之后本地播放也开始使用NuPlayer播放器。...Android7.0(N版本)则完全去掉了Awesomeplayer。...NuPlayer::Source:解析模块(parser,功能类似FFmpeg的avformat)。...NuPlayer::Decoder:解码模块(decoder,功能类似FFmpeg的avcodec),封装了用于AVC、AAC解码的接口,通过ACodec实现解码(包含OMX硬解码和软解码)。
FFMPEG 解码 AVPacket 数据到 AVFrame 前置操作 II . FFMPEG 解码 AVPacket 数据到 AVFrame 流程 III ....【Android FFMPEG 开发】FFMPEG 初始化 ( 网络初始化 | 打开音视频 | 查找音视频流 ) ② FFMPEG 获取 AVStream 音视频流 : 参考博客 【Android FFMPEG...编解码器 : 参考博客 【Android FFMPEG 开发】FFMPEG 获取编解码器 ( 获取编解码参数 | 查找编解码器 | 获取编解码器上下文 | 设置上下文参数 | 打开编解码器 ) ④ FFMPEG...读取音视频流中的数据到 AVPacket : 参考博客 【Android FFMPEG 开发】FFMPEG 读取音视频流中的数据到 AVPacket ( 初始化 AVPacket 数据 | 读取 AVPacket...这里先将解码器的数据都处理了, 才能接收新数据 其它错误处理 : 直接退出循环 */ int result_send_packet = avcodec_send_packet(avCodecContext
目标确定- 不择手段得最小 在偶遇FFmpeg(三)——Android集成这边文章中曾经介绍过FFmpeg和Android的交叉编译。文章中也提到过如何裁剪SO文件大小的方式。 这边文章就这个问题。...__android_log_print(ANDROID_LOG_ERROR,"jason",FORMAT,##__VA_ARGS__); JNIEXPORT void JNICALL Java_com_ffmpeg_VideoUtils_decode...avcodec_decode_video2(pCodecCtx, pFrame, &got_picture, packet); if (ret < 0) { LOGE("%s", "解码错误...难道我们自己预设的裁剪方法错误了? 定位问题 重新回到上面分析的方法,回顾整体的流程。 打开视频文件失败,应该是解封装这步出现了问题。 如果是上一步,则会提示协议错误。下一步,应该是解码错误。...---- 参考 ffmpeg configure命令参数 [总结]视音频编解码技术零基础学习方法
领取专属 10元无门槛券
手把手带您无忧上云