专栏首页曾大稳的博客MediaCodec判断是否可以采用硬解码

MediaCodec判断是否可以采用硬解码

import android.media.MediaCodecList;

import java.util.HashMap;
import java.util.Map;

public class VideoSupportUitl {

    private static Map<String, String> codecMap = new HashMap<>();
    static {
        codecMap.put("h264", "video/avc");
    }

    public static String findVideoCodecName(String ffcodename){
        if(codecMap.containsKey(ffcodename))
        {
            return codecMap.get(ffcodename);
        }
        return "";
    }

    public static boolean isSupportCodec(String ffcodecname){
        boolean supportvideo = false;
        int count = MediaCodecList.getCodecCount();
        for(int i = 0; i < count; i++)
        {
            String[] tyeps = MediaCodecList.getCodecInfoAt(i).getSupportedTypes();
            for(int j = 0; j < tyeps.length; j++)
            {
                if(tyeps[j].equals(findVideoCodecName(ffcodecname)))
                {
                    supportvideo = true;
                    break;
                }
            }
            if(supportvideo)
            {
                break;
            }
        }
        return supportvideo;
    }
}

具体的类型对应关系可以查看相关文档,这里在Android源码MediaCodec.createDecoderByType()里面有一些相关的对应支持类型。

/**
    * Instantiate the preferred decoder supporting input data of the given mime type.
    *
    * The following is a partial list of defined mime types and their semantics:
    * <ul>
    * <li>"video/x-vnd.on2.vp8" - VP8 video (i.e. video in .webm)
    * <li>"video/x-vnd.on2.vp9" - VP9 video (i.e. video in .webm)
    * <li>"video/avc" - H.264/AVC video
    * <li>"video/hevc" - H.265/HEVC video
    * <li>"video/mp4v-es" - MPEG4 video
    * <li>"video/3gpp" - H.263 video
    * <li>"audio/3gpp" - AMR narrowband audio
    * <li>"audio/amr-wb" - AMR wideband audio
    * <li>"audio/mpeg" - MPEG1/2 audio layer III
    * <li>"audio/mp4a-latm" - AAC audio (note, this is raw AAC packets, not packaged in LATM!)
    * <li>"audio/vorbis" - vorbis audio
    * <li>"audio/g711-alaw" - G.711 alaw audio
    * <li>"audio/g711-mlaw" - G.711 ulaw audio
    * </ul>
    *
    * <strong>Note:</strong> It is preferred to use {@link MediaCodecList#findDecoderForFormat}
    * and {@link #createByCodecName} to ensure that the resulting codec can handle a
    * given format.
    *
    * @param type The mime type of the input data.
    * @throws IOException if the codec cannot be created.
    * @throws IllegalArgumentException if type is not a valid mime type.
    * @throws NullPointerException if type is null.
    */
   @NonNull
   public static MediaCodec createDecoderByType(@NonNull String type)
           throws IOException {
       return new MediaCodec(type, true /* nameIsType */, false /* encoder */);
   }

ffmpeg里面

((const AVCodec*)(avCodecContext->codec))->name;

即可拿到name,然后jni交互调用即可。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【Android 音视频开发打怪升级:音视频硬解码篇】二、音视频硬解码流程:封装基础解码框架

    MediaCodec 是Android 4.1(api 16)版本引入的编解码接口,同时支持音视频的编码和解码。

    开发的猫
  • 短视频源码开发,Android端短视频功能的快速实现

    一、短视频内容生产 优质短视频内容的产生依赖于短视频的采集和特效编辑,这就要求在进行短视频源码开发时,用到基础的美颜、混音、滤镜、变速、图片视频混剪、字幕等功能...

    云豹科技程序员
  • 刷抖音上瘾后,决定探究如果做一款类似抖音短视频app

    优质短视频内容的产生依赖于短视频的采集和特效编辑,这就要求在进行抖音APP开发时,用到基础的美颜、混音、滤镜、变速、图片视频混剪、字幕等功能,在这些功能基础上,...

    Android技术干货分享
  • Android端的短视频开发,我们该如何快速实现移动端短视频功能?

    优质短视频内容的产生依赖于短视频的采集和特效编辑,这就要求在进行抖音APP开发时,用到基础的美颜、混音、滤镜、变速、图片视频混剪、字幕等功能,在这些功能基础上,...

    Android技术干货分享
  • MediaCodec进行AAC编解码(AudioRecord采集录音)

    最近工作比较忙,很久没有更新这个系列的文章。我们先回顾一下上一篇MediaCodec进行AAC编解码(文件格式转换)的内容,里面介绍了MediaExtracto...

    用户2929716
  • 如何判断某个产品,是否可以用SEO带货?

    我们建立SEO你问我答社群有一段时间,在群里我们每天都会收到各种SEO问题,比如:有人讲“建盏”这个产品是否可以用SEO的方式去建立网站,然后进行带货销售。

    数据通20847430
  • Android MediaCodec图片合成视频

    YUV是为了解决彩色电视与黑白电视的兼容性。黑白视频只有Y值,也就是灰度。而彩色电视则有YUV3个分量,如果只读取Y值,就只能显示黑白画面了。YUV最大的优点在...

    陨石坠灭
  • 【Android 音视频开发打怪升级:OpenGL渲染视频画面篇】六、Android音视频硬编码:生成一个MP4

    在【音视频硬解码流程:封装基础解码框架】这篇文章中,介绍了如何使用Android原生提供的硬编解码工具MediaCodec,对视频进行解码。同时,MediaCo...

    开发的猫
  • 如何使用MediaCodec解码音视频

    播放一个音视频文件的时候,我们知道需要经过解协议->解封装->解码音频/视频->音频/视频同步->渲染播放这几个步骤,其中解码音频/视频是整个流程中最核心的一个...

    雪月清
  • Android MediaCodec 硬编码 H264 文件

    在 Android 4.1 版本提供了 MediaCodec 接口来访问设备的编解码器,不同于 FFmpeg 的软件编解码,它采用的是硬件编解码能力,因此在速度...

    glumes
  • Android RTMP推流之MediaCodec硬编码一(H.264进行flv封装)

    在前面Android平台下使用FFmpeg进行RTMP推流(摄像头推流)的文章中,介绍了如何使用FFmpeg进行H264编码和Rtmp推流。接下来讲分几篇文章来...

    用户2929716
  • 基于 ffmpeg 的跨平台播放器实现

    随着游戏娱乐等直播业务的增长,在移动端观看直播的需求也日益迫切。但是移动端原生的播放器对各种直播流的支持却不是很好。Android 原生的 MediaPlaye...

    许斌盛
  • 开发直播带货系统过程中,需要注意这些“坑”

    直播带货系统发展到现在,已经覆盖了h5、小程序和app等多个平台。但就目前市场情况来看,很多用户还是比较钟情于app,觉得它可靠,相比起小程序来讲,对于功能定制...

    万岳教育系统
  • 看点视频秒开优化:解码器复用优化方案篇

    随着短视频的流行,用户在碎片化场景下消费的视频内容越来越多。短视频本身时长较短,首帧体验尤为重要。随着预加载、预下载、IP直通车等传统优化手段使用,首帧体验有...

    腾讯VTeam技术团队
  • LiTr:适用于Android的轻量级视频/音频转码器

    https://engineering.linkedin.com/blog/2019/litr-a-lightweight-video-audio-transc...

    LiveVideoStack
  • Android MediaCodec 使用说明

    最近公司要求提供一个支持 Android 硬件转码的底层库,所以自己从头去看了 MediaCodec 相关的知识,费了老大的劲终于完成了。

    字节流动
  • Android音视频硬编码与混合(三)

    硬编码:使用非CPU进行编码,如显卡GPU、专用的DSP、FPGA、ASIC芯片等

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

    原文:https://engineering.linkedin.com/blog/2019/litr-a-lightweight-video-audio-tra...

    LiveVideoStack
  • 「音视频直播技术」Android下视频H264编码

    今天为大家介绍一下音视频直播技术中的视频编码。在移动端通过Camera采集到视频数据后,我们不会直接将它发送出去。因为采集后的视频数据量非常大,比如 1280x...

    音视频_李超

扫码关注云+社区

领取腾讯云代金券