首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android FFmpeg系列04--FFmpeg调用MediaCodec进行硬解码

引言 在上篇文章中我们通过FFmpeg软解并渲染了本地的一个mp4视频 Android FFmpeg系列03--视频解码与渲染 本文基于之前的Demo添加了FFmpeg使用MediaCodec来硬解码的方式...java层,然后在java层调用MediaCodec;也可以直接在native层利用AMediaCodec 用于测试的mp4采用H264编码 所以使用上述两种调用MediaCodec方式的时候需要先通过...(详情参考Android FFmpeg系列01--编译与集成) --enable-jni \ --enable-mediacodec \ --enable-decoder=h264_mediacodec...\ 不需要再配置h264_mediacodec的硬件加速(list中已经查找不到了) --enable-hwaccel=h264_mediacodec 解码出Buffer 解码流程和软解类似,不再赘述...h264解码器id相同,所以 // 软解时 avcodec_find_decoder(id); // 使用mediacodec硬解时 avcodec_find_decoder_by_name(“h264

3.4K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【错误记录】Android 编译时技术报错 ( 注解处理器 process 方法多次调用问题 )

    文章目录 一、报错信息 二、问题分析 三、解决方案 注解处理器 AbstractProcessor 中的 process 方法可能会调用多次 , 在生成代码时 , 一定要注意 , 检测到 注解节点 后再生成代码...; 一、报错信息 ---- Android 编译时技术 , 使用注解处理器生成代码 , 编译时报如下错误 : ( 该错误不会中断编译 ) javax.annotation.processing.FilerException...3 次 , 调用第一次时生成了 com.example.helloworld.HelloWorld 源码 , 但是后面又调用了 2 次 , 后面调用的 2 次直接报上述 " javax.annotation.processing.FilerException...中的 process 方法调用了 3 次 , 但是只有 1 次 Set<?...e.printStackTrace(); } } return false; } } 修改后 , 编译时不再报上述错误

    84920

    MediaCodec基本原理及使用「建议收藏」

    MediaCodec整个状态结构图如下: 从上图可知,当MediaCodec被创建后会进入未初始化状态,待设置好配置信息并调用start()启动后,MediaCodec会进入运行状态,并且可进行数据读写操作...如果在这个过程中出现了错误,MediaCodec会进入Stopped状态,我们就是要使用reset方法来重置编解码器,否则MediaCodec所持有的资源最终会被释放。...、启动编/解码器 编解码器配置使用的是MediaCodec的configure方法,该方法首先对MediaFormat存储的数据map进行提取,然后调用本地方法native-configure实现对编解码器的配置工作...在配置时,configure方法需要传入format、surface、crypto、flags参数,其中format为MediaFormat的实例,它使用”key-value”键值对的形式存储多媒体数据格式信息...); 以上代码是在编码H.264时的配置方法,createVideoFormat(“video/avc”, 640 ,480)为”video/avc”类型(即H.264)编码器的MediaFormat

    2.7K20

    Android FFmpeg系列13--升级到6.0

    系列04--FFmpeg调用MediaCodec进行硬解码两篇文章里面的内容配置好configure和编译脚本sh文件 为什么不继续使用之前的ndk r21d版本?...是因为编译时遇到了如下错误 android-ndk-r21d/toolchains/llvm/prebuilt/darwin-x86_64/sysroot/usr/include/media/NdkMediaCodec.h...FFmpeg6.0支持了NDKMediaCodec,编译出现上面的错误也挺符合预期的,所以我们直接改用最新的NDK r26版本(使用最新工具不出意外的必定是要踩坑的,我们根据错误提示一个一个修复就行).../bin/bash #配置NDK路径 NDK=/Users/xyq/Desktop/tool/SDKandNDK/android-ndk-r26 #配置toolchain路径 TOOLCHAIN=$NDK...FFmpeg系列04--FFmpeg调用MediaCodec进行硬解码一致,只是不设置jvm给ffmpeg即可 新增av_dict_iterate接口用于遍历metadata

    1K20

    「Android音视频编码那点破事」第四章,使用MediaCodec实现H264编码

    虽然在Android 4.4以前我们没得选择,但是在Android 4.4之后,我们有了MediaCodec,一个完全可控的视频编码器,虽然无法直接输出mp4(需要配合MediaMuxer来对音视频进行混合...如今的Android生态,大部分手机都已经是Android 5.0系统,完全可以使用MediaCodec来进行音视频编码的开发,而MediaRecorder则降级作为一个提高兼容性的备选方案。   ...正确设置各种参数之后,调用start方法,让MediaCodec开始编码,这时候MediaCodec处于Running状态。...当MediaCodec处于Running状态时,内部会持有两个缓冲区队列,一个输入缓冲区,一个输出缓冲区。...release() }   以上就是本章关于MediaCodec的全部学习内容,如果有疑问或者错误,欢迎在评论区留言。 本章知识点: MediaCodec的工作流程。

    84020

    LiTr:适用于Android的轻量级视频音频转码器

    创建并配置MediaCodec实例后,就可以启动它并将其用于处理帧。...当客户端连续在MediaCodec上向缓冲区加载数据并接收回缓冲区时,使用缓冲区队列与MediaCodec实例进行交互: 客户端从MediaCodec中使输入缓冲区出队,并在可用时接收。...当不再需要MediaCodec实例时,它将停止并释放它。 使用MediaCodec进行转码 要进行代码转换,我们将需要两个MediaCodec实例:一个作为解码器运行,另一个作为编码器运行。...在处理视频时,我们可以将MediaCodec配置为与ByteBuffer或Surface一起用作输入/输出。...将使用所有代码转换更新来调用侦听器:开始,进度完成,错误,取消。每个侦听器回调中都会提供一个请求令牌。 粒度是所需的进度更新数量。默认值为100(以匹配在UI中显示的百分比)。

    2.5K20

    android onresume时view,android – 当对话框出现时不调用OnResume

    我有一个带按钮的活动.当我点击按钮时会出现一个对话框.我期望在对话框出现时调用onPause方法,然后在关闭对话框时调用onResume方法.但没有一个被称为. findViewById(R.id.button...super.onPause(); Toast.makeText(this,”ON PAUSE ACTIVITY”,Toast.LENGTH_SHORT).show(); } 有谁知道为什么这些方法没有被调用...谢谢 解决方法: Dialog也是您的活动UI窗口的一部分.所以onPause()&当您显示或隐藏对话框时,不会调用onResume()....如果你想要onPause()&显示/隐藏对话框时调用onResume(),然后在单独的活动中显示该对话框UI,并将该活动作为对话框启动....标签:android,android-activity,lifecycle 来源: https://codeday.me/bug/20190824/1709085.html 发布者:全栈程序员栈长,转载请注明出处

    65810

    ijkplayer 源码分析

    本文基于0.8.8版本的 ijkplayer ,对其源码进行剖析,涉及到不同平台下的封装接口或处理方式时,均以 Android 为例。...|| ffp->mediacodec_avc || ffp->mediacodec_hevc || ffp->mediacodec_mpeg2) // 创建硬解码器 node = ffpipenode_create_video_decoder_from_android_mediacodec...,FFPlayer 中就有如下 AVDictionary : AVDictionary *format_opts; // 格式配置,解封装文件时(avformat_open_input)需传入...AVDictionary *codec_opts; // 编解码器配置,打开编解码器时(avcodec_open2)需传入 AVDictionary *sws_dict;...FFPlayer 结构体中本身就有配置相关的成员变量的,比如控制音频输出设备的 “int opensles” 等,当我们调用一系列 setOption() 方法将播放配置存储在 player_opts

    2.1K30

    LiTr:适用于Android的轻量级视频音频转码器

    创建并配置MediaCodec实例后,就可以启动它并将其用于处理帧。...当客户端连续在MediaCodec上向缓冲区加载数据并接收回缓冲区时,使用缓冲区队列与MediaCodec实例进行交互: 客户端从MediaCodec中使输入缓冲区出队,并在可用时接收。...客户端不拥有缓冲区,使用完缓冲区后必须将其释放回MediaCodec。否则,在某些时候,所有出队尝试将始终失败。当不再需要MediaCodec实例时,它将停止并释放它。...在处理视频时,我们可以将MediaCodec配置为与ByteBuffer或Surface一起用作输入/输出。...将使用所有代码转换更新来调用侦听器:开始,进度完成,错误,取消。每个侦听器回调中都会提供一个请求令牌。 粒度是所需的进度更新数量。默认值为100(以匹配在UI中显示的百分比)。

    3.5K20

    如何使用MediaCodec解码音视频

    ,它的优点则是具有更强的适配性;硬件解码:调用GPU的专门解码音视频的模块来处理,减少CPU运算,降低功耗.由于Android机型碎片化比较严重,硬件解码的实现又依赖于具体的厂商,所以硬件解码的适配性并不是那么友好一般而言...MediaCodec简介 android.media.MediaCodec是从API16开始由Android提供的供开发者能更加灵活的处理音视频的编解码组件,与MediaPlayer/MediaRecorder...当使用工厂方法创建一个编解码器时,它处于未初始化状态(Uninitialized),调用configure方法对编解码器进行配置后,它处于配置状态(Configured),然后调用start方法让编解码器进入执行状态...标记到达输出端; 可以调用stop方法结束执行状态,编解码器将回到未初始化状态(Uninitialized) 当不再使用编解码器时,必须调用release方法释放相关资源 MediaExtractor...val videoCodec = MediaCodec.createDecoderByType(type) 配置解码器format,并指定渲染输出的surface val surface = surfaceView.holder.surface

    2.4K20

    Android MediaCodec 硬编码 H264 文件

    在 Android 4.1 版本提供了 MediaCodec 接口来访问设备的编解码器,不同于 FFmpeg 的软件编解码,它采用的是硬件编解码能力,因此在速度上会比软解更具有优势,但是由于 Android...另外,当调用 reset 方法也会进入到 Uninitialized 状态。 当不再需要 MediaCodec 时,调用 release 方法将它释放掉,进入 Released 状态。...当 MediaCodec 工作发生异常时,会进入到 Error 状态,此时还是可以通过 reset 方法恢复过来,进入 Uninitialized 状态。...取出 MediaCodec.BufferInfo 内的数据之后,根据不同的标识符进行不同的操作: BUFFER_FLAG_CODEC_CONFIG 表示当前数据是一些配置数据,在 H264 编码中就是...停止编码 当想要停止编码时,通过 MediaCodec 的 stop 方法切换到 Uninitialized 状态,然后再调用 release 方法释放掉。

    3.5K12

    使用 Visual Studio 编译时,让错误一开始发生时就停止编译(以便及早排查编译错误节省时间)

    如果能够在编译出错的第一时间停止编译,那么我们能够更快地去找编译错误的原因,也能从更少的编译错误列表中找到出错的关键原因。...可想而知,如果你的改动导致非常靠前的项目编译错误,而默认情况下编译的时候会继续尝试编译下去,于是你需要花非常长的时间才能等待编译完毕,然后从一大堆项目中出现的编译错误中找到最开始出现错误的那个(通常也是编译失败的本质原因...它的主要功能是给你的输出窗格加上颜色,可以让你更快速地区分调试信息、输出、警告和错误。 不过,也正是因为它是通过匹配输出来上色的,于是它可以得知你的项目出现了编译错误,可以采取措施。...其中有一项是“Stop Build on First Error”,打开之后,再出现了错误的话,将第一时间会停止。...你也可以发现你的 Visual Studio 错误列表中的错误数量非常少了,这些错误都是导致编译失败的最早出现的错误,利于你定位问题。

    55430
    领券