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

Android FFmpeg + MediaCodec 实现视频解码

流媒体边播放边录制功能 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 实现解码需要将视频和音频数据拷贝到...、音频解码、视频解码分别在一个子线程进行,利用队列管理音视频数据包。...,Native 使用 AMediaCodec 对视频进行解码,从视频的 AVPacket 队列中取包进行解码

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

MediaCodec 在 Android 解码的路线

背景: 随着多媒体产业的发展,手机端对视频解码性能要求越来越高。如果采用cpu进行解码,则会占用很多cpu资源。现在主流做法是利用手机gpu资源进行视频解码。...MediaCodec 可以处理编码,也可以处理解码;可以处理音频,也可以处理视频,里面有软解(cpu),也有解(gpu)。...解码业务路线 1.代替软解的解码 最简单的方式,就是configure时候Surface填null,然后将解码后的数据拷贝出来。...缺点是多了一次解码器内存到自己内存的拷贝。 2.利用解码器缓存 如果我们针对业务一的拷贝做优化,减少拷贝,这就是第二种业务路线。我们可以利用解码器的缓存进行输出存储。...第二,这种方案依赖解码器缓存,这会带来一些问题。如果解码器被提前析构,则缓存内容都没有了。又或者一些播放业务逻辑对解码器缓存要求较多(比如倒放),这也做不了。

1.7K20

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

本文你可以了解到 本文主要简介Android使用解码API实现解码的流程,包含MediaCodec输入输出缓冲、MediaCodec解码流程、解码代码封装和讲解。...input:是给客户端输入需要解码的数据(解码时)或者需要编码的数据(编码时)。 output:是输出解码好(解码时)或者编码好(编码时)的数据给客户端。...解码流程图 经过初始化和配置以后,进入循环解码流程,不断的输入数据,然后获取解码完数据,最后渲染出来,直到所有数据解码完成(End of Stream)。...定义解码器 因此,我们将整个解码流程抽象为一个解码基类:BaseDecoder,为了规范代码和更好的拓展性,我们先定义一个解码器:IDecoder,继承Runnable。...,将数据推入解码解码 if (!

2.8K20

Qt音视频开发21-通用解码

目前主流的播放器都支持解码,没有解码的播放器都是耍流氓,现在越来越多2K 4K甚至8K的高清视频,没有解码只用软解码的话,会大量消耗CPU资源,很不可取,需要专门交给GPU绘制和解码,这样可以大大减低...,其中vlc和mpv的设置最为简单,海康的sdk默认不提供解码的,官方手册中有写到解码的库,估计是要额外联系获取。...dxva2 ffmpeg解码: 2.1 调用av_hwdevice_find_type_by_name根据名称自动寻找解码 2.2 调用find_fmt_by_hw_type找到对应的解码格式...2.3 回调videoCtx->get_format = get_hw_format解码器格式赋值为解码 2.4 调用av_hwdevice_ctx_create创建解码设备 2.5 调用avcodec_send_packet...高度可定制化,用户可以很方便的在此基础上衍生自己的功能,支持linux和mac系统。

1.6K10

Linux 系列汇总

Linux,全称 GNU/Linux,是一套免费使用和自由传播的类 UNIX 操作系统。...我在开发之前只知道 Windows 操作系统,所以我就以为世界上只有一种操作系统,那就是 Windows,工作后才知道 Linux 操作系统。...Linux 现在有多重要我就不用说了吧,不管什么语言,你都或多或少会接触 Linux,不管你是开发还是运维,或者是项目经理,你都需要监控 Linux 服务状态。...我认为 Linux 甚至是最重要的一门操作系统。 所以,入门 Linux 已经成为越来越必要的一环。市面上有很多 Linux 系列的书籍,有小白的和进阶的各种,但是都感觉有些拖沓,无关的东西比较多。...所以现在,我就自己手撸了一本 Linux PDF,命令都是一行一行敲的,也是我读书、看博客、总结的心得。非常宝贵,大家可以来看一下目录 ?

72020

C++ ffmpeg+dxva2实现解码「建议收藏」

1.实现效果 明显看到使用解码后CPU下来了,GPU上去了 2.实际使用步骤 2.1、新建程序并配置 1、重新创建一个MFC的程序 MFCApplication2(基于对话框):...2.3.6、int dxva2_init(AVCodecContext *s, HWND hwnd); 这步骤就是配置解码,函数dxva2_init是初始化配置dxva2解码器的入口,配置工作主要就是由它来完成...ret=0:成功 2.3.10、int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame); 从解码器中获取解码的输出数据。...the input file\n"); goto end; } int video_stream = ret; // 视频对应流索引 ///***************获取解码器并解码...配置解码 switch (pCodec->id) { case AV_CODEC_ID_MPEG2VIDEO: case AV_CODEC_ID_H264: case AV_CODEC_ID_VC1

1.5K10

Linux ln 软、链接

最近在学习Linux系统的,给我的感觉就是“智慧的结晶,智慧的大脑,智慧的操作” 今天研究到了一个有趣的命令 ln 我们先来看一下它的概念吧 Linux ln命令是一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接...---- 一、语法 ln [参数][源文件或目录][目标文件或目录] 命令功能 : Linux文件系统中,有所谓的链接(link),我们可以将其视为档案的别名,而链接又可分为两种 : 链接(hard...类似于Windows操作系统中的快捷方式 2.软链接可以 跨文件系统 ,链接不可以 3.软链接可以对一个不存在的文件名进行链接 4.软链接可以对目录进行链接 链接: 1.链接,以文件副本的形式存在...2.不允许给目录创建链接 3.链接只有在同一个文件系统中才能创建 二、命令参数 必要参数: -b 删除,覆盖以前建立的链接 -d 允许超级用户制作目录的链接 -f 强制执行 -i 交互模式,文件存在则提示用户是否覆盖...发现链接和源文件的 i 节点是相同的,而软链接与源文件的 i 节点是不同的   第六:不允许将链接指向目录;不允许跨分区创建链接

5.8K20

【Android 直播软件开发:音视频解码篇】

教程代码:【Github传送门】 目录 一、Android音视频解码篇: 1,音视频基础知识 2,音视频解码流程 3,音视频播放:音视频同步 4,音视频解封和封装:生成一个MP4 二、使用OpenGL...实际上,视频的编码和解码部分通常由框架(如Android解/FFmpeg)完成,一般的开发者并不会接触到。...七、解码和软解码 解和软解的区别 我们在一些播放器中会看到,有解码和软解码两种播放形式给我们选择,但是我们大部分时候并不能感觉出他们的区别,对于普通用户来说,只要能播放就行了。...解码,指的是利用手机上专门的解码芯片来加速解码。通常解码解码速度会快很多,但是由于解码由各个厂家实现,质量参差不齐,非常容易出现兼容性问题。...Android平台的解码 终于来到有关Android的部分了,作为本文的结尾,也算是为下一篇文章开一个头。

1.5K51

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

引言 在上篇文章中我们通过FFmpeg软解并渲染了本地的一个mp4视频 Android FFmpeg系列03--视频解码与渲染 本文基于之前的Demo添加了FFmpeg使用MediaCodec来解码的方式...AVCC 不过在本系列教程中使用的FFmepg5.0.1版本,bitstream filter的相关接口都已经被移除 所以接下来采用FFmpeg在3.1之后提供的直接调用MediaCodec的C接口来实现解码...h264解码器id相同,所以 // 软解时 avcodec_find_decoder(id); // 使用mediacodec解时 avcodec_find_decoder_by_name(“h264...【ffmpeg mediacodec解初探】 http://www.4k8k.xyz/article/tifentan/80605472#google_vignette 2....【FFmpeg 调用 MediaCodec 解码到 Surface 上】 https://cloud.tencent.com/developer/article/1901883?

2.6K20

linux软链接和链接

链接文件 链接文件有两个限制: 1、不允许给目录创建链接; 2、只有在同一文件系统中的文件之间才能创建链接。 对链接文件进行读写和删除操作时候,结果和软链接相同。...用ln -s 命令可以生成一个软连接,如下:   [root@linux236 test]# ln -s  source_file softlink_file   在对符号文件进行读或写操作的时候,系统会自动把该操作转换为对源文件的操作...对链接文件进行读写和删除操作时候,结果和软链接相同。但如果我们删除链接文件的源文件,链接文件仍然存在,而且保留了愿有的内容。     这时,系统就“忘记”了它曾经是链接文件。...二  两者之间的区别 连接指通过索引节点来进行的连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。    ...在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是连接。连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立连接到重要文件,以防止“误删”的功能。

8.6K50

Linux 软链接与链接

创建链接就像是创建了原始文件的副本,但实际上它们都指向相同的数据块。...ln [目标文件路径] [链接文件名]例如,要在当前目录下创建一个名为link_file的链接,指向/home/user/desktop/link,可以执行以下命令ln /home/user/desktop.../link link_file这将创建一个链接link_file,它与/home/user/desktop/link 实际上是相同的文件内容。...删除软链接rm [软链接文件名]软链接与链接区别软链接就像是创建了一个快捷方式,指向另一个文件或目录。如果原始文件被删除或移动,软链接失效,因为它只是一个路径的引用。...链接就像是创建了原始文件的副本,但实际上它们都指向相同的数据块。如果原始文件被删除,链接仍然有效,因为它们共享相同的数据块。只能在同一个文件系统中创建。看起来像独立的文件,没有特殊的标志。

16510

LINUX软链接和链接

1.Linux链接概念 Linux链接分两种,一种被称为链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。...【连接】 连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索 引节点号(Inode Index)。...在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是连接。连接的作用是允许一个文件拥有多个有效路径名,这样用户 就可以建立连接到重要文件,以防止“误删”的功能。...2.通过实验加深理解 [oracle@Linux]$ touch f1 #创建一个测试文件f1 [oracle@Linux]$ ln f1 f2 #创建f1的一个连接文件...f1 file [oracle@Linux]$ cat f3 cat: f3: No such file or directory 通过上面的测试可以看出:当删除原始文件f1后,连接f2不受影响,但是符号连接

8K51

Linux软连接和链接

1.Linux链接概念 一种在共享文件和访问它的用户的若干目录项之间建立联系的一种方法 Linux链接分两种,一种被称为链接(Hard Link),另一种被称为符号链接(Symbolic Link...【连接】 连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。...在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是连接。连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立连接到重要文件,以防止“误删”的功能。...2.通过实验加深理解 [oracle@Linux]$ touch f1          #创建一个测试文件f1 [oracle@Linux]$ ln f1 f2          #创建f1的一个连接文件...I am f1 file [oracle@Linux]$ cat f3 cat: f3: No such file or directory 通过上面的测试可以看出:当删除原始文件f1后,连接

6.2K100

Linux链接与软链接

链接与软链接 链接是通过inode进行的链接。...一般情况下,文件名和inode号码是“一一对应”关系,每个inode号码对应一个文件名,但是Unix/Linux系统允许多个文件名指向同一个inode号码,这意味着,可以用不同的文件名访问同样的内容,但是...链接只能在同一个文件系统的文件中间进行链接,不能对目录进行创建。如果删除链接对应的源文件,则链接文件仍然存在,而且保存了原有的内容,这样可以防止因为误操作而删除文件的作用。...由于链接是有着相同inode号仅文件名不同的文件,因此,删除一个链接并不影响其他有相同inode号的文件。...可以使用ln 源文件 新文件 命令建立链接或者使用ln -d 源文件 新文件 命令建立链接。 通过上面的操作印证了前述关于链接的相关内容。

8.7K30

SkeyeARS 全景AR增强监视系统之cuda(cuvid)视频解码

1、写在前面 前面我们已经了解关于视频解码的一些技术。 其中提到的 nvcuvid 则是 Nvidia GPU 解码的核心,并且是由官方提供支持,因此可以放心使用。...2、查询硬件解码器的解码能力。 使用 cuvidGetDecoderCaps() 3、创建解码器实例。...11、解码过程完成后销毁解码器实例。 用户需要调用 cuvidDestroyDecoder() 来销毁解码器会话并释放所有分配的解码器资源。 12、销毁 CUDA 上下文。...---------- 3、结语 最后,我们的 SkeyeARS 实际上支持可配置视频 软解码/解码 的。 在 SkeyeARS 运行目录下 config/config.ini 中。...图片 其中:EasyPlayerProDecodeType 为直播解码选项,EasyPlayerDecodeType 则为录播解码选项。 配置为 0 选择软解码,配置为 1 选择解码

57950
领券