自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(78)
  • 资源 (5)
  • 收藏
  • 关注

原创 【FFmpeg如何判断HDR视频,SDR视频】

hdr视频

2022-08-08 17:17:23 3384 1

原创 浅谈Android视频缓存库

我们都了解播放器的作用就是把音视频压缩数据转换成原始的音视频数据渲染出来,这样我们就可以看到画面、听到声音了。这里的播放器就存在两个问题,第一个问题是视频源存在云端,我们每次看完视频之后重新观看,需要重新请求远端视频数据,这就会造成带宽的浪费。第二个问题是视频的秒开体验当我们从Feed流点击视频播放的时候,由于需要从云端获取视频,造成秒开体验较差。我们该如何去解决这两个问题呢?这就是我们今天要说的视频缓存库的核心功能了。下面让我们走进Android视频缓存库,看它是如何设计、如何优雅的解决这两个问题的。下面

2022-06-17 09:55:08 1922 1

原创 FFmpeg 交叉编译libx264、libx265、libfdk-aac流程

背景FFmpeg 是一款强大的音视频处理工具,它是一种可插拔的架构设计。当需要使用某个编解码器、容器格式、网络协议时,只需要在编译文件中打开、配置,就可以在FFmpeg中使用。在播放器、推流器、视频编辑中经常都会使用到FFmpeg交叉编译第三方库,FFmpeg交叉编译第三方库可以说是音视频入门的基础知识,也是最重要的。通过学习了交叉编译的过程,加深对FFmpeg架构的设计。编译第三方库FFmpeg 最常使用的第三方库就是libx264、libx265、libfdk-aac。这里就介绍下libx264、

2022-03-25 18:15:21 5330

原创 FFmpeg 新旧API编码

背景直播SDK一开始使用的FFmpeg 2.8版本的,现在的FFmpeg最新版已经是4.4了。播放器编辑器使用的FFmpeg都是4.0的版本;新版本FFmpeg在内部结构也做了优化,效率、稳定性相比较旧版本都提升了不少。所以直播SDK FFmpeg也要必须升级了。简介直播SDK内部主要3部分使用了FFmpeg:使用libavcodec 编码Audio;使用libavcodec 编码Video;使用libavformat 合成/推流;我会先讲解使用旧AP Ilibavcodec编码Audio

2022-02-07 18:20:04 3673

原创 Android图形系统介绍及SurfaceView、GLSurfaceView、TextureView、SurfaceTexture、EGLSurface的区别和使用场景

一、背景之前一直好奇一件事当我们把View控件渲染之后Android系统底层是如何把view显示到屏幕上面的。当同时打开多个app时,我们可以看到多个app的内容。Android底层系统到底是如何把多个组件、多个窗口、多个app的界面同时渲染到屏幕上的呢?之前一直在看这方面的知识,发现网上很多都是介绍Android图形系统源码分析的,关于图形系统整个数据流程的理论分析过程很少。最近又搜刮了大量播客,也找到了好多优质的博文,自己也总结下Android图形系统数据流过程的分析。最后也介绍下在应用层多媒体开发中

2022-02-07 18:07:29 6707 1

原创 Android端直播SDK实现方案

概述直播系统的架构总体上分为采集模块、预览模块、处理模块、编码模块、推流模块。把这五个模块串联起来就构成了整个直播系统的数据流。如下图所示:音频采集:采集原始的PCM数据。音频处理:对音频进行混音消除、降噪、自动增益等处理。音频编码:把PCM格式的数据编码为AAC格式。视频采集:相机/屏幕流的采集;YUV格式或者纹理格式。视频处理:对视频进行美颜/滤镜等处理。预 览: 把视频处理后的视频流在屏幕上进行渲染显示。视频编码:把纹理或者YUV格式的原始视频流压缩成H264格式。推 流:把AA

2022-02-07 17:44:29 5930

原创 OpenGL中PBR着色器的实现

背景刚来公司的第一个项目就是通过OpenGL加载汽车的3D模型,UI设计提供了基础色(Base_Color)、粗糙度(roughness)、金属度(metallic),就是按照PBR提供的材质。之前的加载鞋子模型采用的方案是Blinn-Phone光照模型,Blinn-Phone光照模型也可以实现汽车3D模型的效果,实现过程中需要调整漫反射、高光的参数达到一个比较满意效果,与真实的效果相比较很难令人信服。所以汽车3D模型采用PBR技术实现,下面就介绍下Android端PBR Shader的实现,由于PBR理

2021-09-22 21:54:58 2560

原创 基于播放器流程对FFmpeg源码脉络梳理

背景很久以前对FFmpeg的源码脉络详细的梳理过,当时阅读的是雷神的FFmpeg 源码分析的博客文章,最近经常使用FFmpeg进行编解码、解封装等处理,但对FFmpeg内部的脉络只记得一点点它的结构设计及它的功能及API的使用方式,所以就准备了这篇博客。单纯分析FFmpeg的结构设计会非常枯燥,结合FFplay播放器的流程去梳理FFmpeg的脉络应该会起到事半功倍的效果。本人才学疏浅,ffmpeg 工程非常复杂庞大,理解可能有误,还请热心指正。播放器流程梳理我这里把播放器的流程分为9个模块:文件的读

2021-09-22 21:24:12 304 1

原创 OpenGL渲染管线解析

背景:本篇文章主要偏向理论知识的讲解,实践方面后期会进行讲解。opengl的渲染管线中,如果接触3D渲染不多情况下,比如经常做视频滤镜或视频渲染显示的话,经常接触的两个部分就是顶点着色器、片段着色器。如果是做视频渲染的话,这两部分的内容也特别简单,总共也就十几行代码。我们可以从很多地方去摘抄相机流+OpenGL实现渲染的代码,通过把不同地方的滤镜摘抄过来替换掉,就可以实现各种各样的视频滤镜特效了。但当有人问题OpenGL顶点着色器是用来干啥的?OpenGL渲染管线有哪几个步骤?OpenGL每个步骤都分别有

2021-09-22 21:06:44 2145

原创 Android 音视频技术汇总

背景Android端音视频开发已经快6个年头了,回顾这6年的学习、开发经历,中间的酸甜苦辣只有自己知道。现在计划把之前学习的音视频知识及未来计划学习的知识点汇总下加深自己对音视频的全局的理解,同时也给刚入门音视频的开发者提供参考,减少他们的学习时间。音视频技术知识图谱音视频技术知识点讲解视频流获取Camera/Camera录屏(MediaProjection)外接摄像头(USB、UVC) 文件、网络音频流获取AudioRecordOpenSLAAudio视频处理Open

2021-09-18 11:44:21 322

原创 RTSP协议解析-概述

协议简介RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议。RTSP对流媒体提供了诸如暂停,快进等控制,而它本身并不传输数据,数据的传输通过rtp协议。RTSP的作用相当于流媒体服务器的远程控制。服务器端可以自行选择使用TCP或UDP来传送串流内容该协议定义了一对多应用程序如何有效地通过 IP 网络传送多媒体数据。RTSP在体系结构上位于RTP和RTCP之上,它使用TCP或UDP完成数据传输。RTSP使用场景安

2021-09-13 11:15:08 2309

原创 OpenGL踩坑记录

OpenGL踩坑记录3D模型加载3D模型加载在处理3D模型的时候,我们经常的操作是首先创建一个fbo,fbo关联texture,rbo。我们第一次渲染的时候是直接渲染到fbo关联的纹理上,然后经过其他纹理滤镜的处理后,再把它显示出来。这里有几个需要注意的点。3D 纹理离屏渲染渲染一定要关联一个rbo。离屏渲染前打开深度测试,离屏渲染之后一定要关掉深度测试。再进行其他的渲染操作,否则会出现渲染黑屏纹理。...

2020-08-12 13:28:57 540

原创 Android 常见的多线程设计

Android 常见的多线程设计一. Android 上层业务常见的多线程设计二. 一个播放器的多线程设计1. 视频播放器的原理图:2.播放器的多线程设计三. 总结Android端的开发多线程并发编程其实并不是很复杂,因为大多数业务都比较简单,都是从服务器拉去数据,在UI上面进行渲染显示,再加上好多网络库内部都封装好了多线程的处理,我们直接使用就好了,但它的内部实现也比较简单 (线程池 + 回...

2020-03-14 16:47:12 478

原创 Android 端IjkPlayer交叉编译的逻辑分析

Android 端IjkPlayer交叉编译的逻辑分析交叉编译的原理为什么要交叉编译交叉编译的工具Android NDK 支持的编译器Android NDK 提供了两种编译器: GCC、ClangAndroid平台的交叉编译Android NDK 的目录结构高版本NDK toolchiains目录:GCC 编译 FFmpegClang 编译 FFmpegIjkPlayer的交叉编译ijkplaye...

2020-03-14 16:21:06 809

原创 JNI(连接Java代码与原生代码的桥梁)

一、前言我们在学习完AndroidStudio NDK环境3中搭建方式和Android NDK构建系统后,已经明白了如何创建一个简单的Android NDK工程。本篇博客将以前两篇为基础,更深入的了解NDK开发。学习如何通过JNI技术实现Java代码与Native代码的通信;二、知识点概述对于开发者来讲,我们所有的工作都是围绕着数据。不同的数据有不同的数据类型。Java以及C两种语言规定的数...

2019-01-14 17:27:02 694

原创 Android NDK构建系统

一、前言当我们把C/C++代码写好了之后,如何编译成动态库(Java端代码调用)?这就需要我们编写一个构建文档(Android.mk/Application.mk) NDK交叉编译器根据构建文档编译出我们需要的、Java端可以调用的动态库;Android NDK --初始android NDK介绍了android NDK组件:1、ARM、x86和MIPS交叉编译器:我们可以使我们的项目支持一...

2019-01-03 17:28:30 585

原创 AndroidStudio NDK环境3种搭建方式

一、前言如今Android开发IDE都是使用的AndroidStudio,之前我写过一篇文章介绍的是如何在Eclipse中搭建NDK环境 Android NDK --初始android NDK这边博客介绍下在AndroidStudio中搭建NDK环境的三种方式。二、知识点概述本片我们将从以下几点初步认识、创建Android NDK:1.Java加载/调用NDK端的代码;2.本地 c++...

2019-01-02 18:29:06 2039

转载 音视频开发指南

参考: android音视频点/直播模块开发 [总结]视音频编解码技术零基础学习方法 android 音视频开发过程 键盘舞者113的博客转载: Android 音视频开发入门指南Android开发,本身并不是一个可以走得多远的方向,它只是一个平台,提供了许多封装好的API,让大家能够快速开发出针对特定业务的应用。真正有价值的地方就在于Android与具体的业务方向结合,比如...

2018-06-08 14:58:18 1227

转载 C语言SOCKET编程指南

1、介绍Socket 编程让你沮丧吗?从man pages中很难得到有用的信息吗?你想跟上时代去编Internet相关的程序,但是为你在调用 connect() 前的bind() 的结构而不知所措?等等… 好在我已经将这些事完成了,我将和所有人共享我的知识了。如果你了解 C语言并想穿过网络编程的沼泽,那么你来对地方了。2、读者对象这个文档是一个指南,而不是参考书。如果你刚开始

2018-01-31 16:51:53 461

原创 全局变量、静态全局变量、静态局部变量和局部变量的区别

变量可以分为:全局变量、静态全局变量、静态局部变量和局部变量。(1) 按存储区域分,全局变量、静态全局变量和静态局部变量都存放在内存的静态存储区域,局部变量存放在内存的栈区。(2) 按作用域分,全局变量在整个工程文件内都有效;静态全局变量只在定义它的文件内有效;静态局部变量只在定义它的函数内有效,只是程序仅分配一次内存,函数返回后,该变量不会消失;局部变量在定义它的函数内有效,但是函数返回

2018-01-31 16:10:42 425

转载 Android Studio Java代码调试及NDK调试

Android Studio Java代码调试debug模式断点调试写一个简单的调试程序,我们先来一个for循环;设置断点(点击红点位置添加或取消断点) 点击debug模式运行 查看调试面板简单调试step over:一步步往下走 当前程序运行的位置,我们看到i的值已经在程序代码中展示出来了,黄色的代码处,这个是AS的功能,对于我们调试来讲,这简直是

2018-01-24 14:11:13 2631

转载 Android JNI局部引用表溢出:local reference table overflow (max=512)

转载:http://blog.csdn.net/xyang81/article/details/44873769在《JNI局部引用、全局引用和弱全局引用》这篇文章中详细介绍了在JNI中三种引用的使用方式,区别、应用场景和开发注意事项。由于都是理论,看完之后可能印象不够深刻,由其是在开发当中容易出错的地方。所以这篇文章用一个例子说明引用使用不当会造成的问题,以引起大家对这个知识点的重视。首先

2018-01-23 19:47:55 940

原创 Error: Cannot determine signature for Surface

在进行NDK开发时,我们需要向jni层传递Surface,Bitmap, …… 时,就会出现Error:Cannot determine signature for xxxx;原因:the javah tool does not recognize Android classes, so you must add the classpath option to javah command.

2018-01-20 11:11:14 628

转载 [Android NDK]命令行编译C++代码(JNI)的方式(windows和linux通用)

1,假设工程名字叫ProjTest,先建一个ProjTest文件夹,然后在ProjTest目录下新建两个目录:jni和lib,最终结果如下:ProjTest |----jni |----libs2,在jni目录下加入你的C/C++代码,这里测试用的C代码如下:test.c #include #include

2018-01-19 18:08:01 1301

转载 [Android NDK]添加C++11和C++14支持

网上查了一下,大概时间表是这样的:android ndk从2013年开始支持了C++11,从2015年开始支持C++14。设置方法:1、支持标准:在 Android.mk 中加入① c++ 11 标准:LOCAL_CPPFLAGS += -std=c++11② c++ 14标准:LOCAL_CPPFLAGS += -std=c++1y2、支持STL:

2018-01-19 17:58:58 14648

原创 Configure CMake

A CMake build script is a plain text file that you must name CMakeLists.txt and includes commands CMake uses to build your C/C++ libraries. If your native sources don’t already have a CMake build scri

2018-01-19 16:23:49 646

转载 在编译好的SDL2库引入SDL2_image库的编译步骤

一 .前言  由于在使用SDL2开发的过程,需要加载png图片,而SDL2本身不提供加载png图片的功能实现。所以需要在引入SDL2_image库。   如果想查看Android Studio下怎么编译SDL2库,请查看 http://www.cnblogs.com/yongfengnice/p/7827040.html ,因为SDL2_image的编译是基于编译好的SDL2库的基础上添加的。二.

2017-12-16 15:40:41 3824

转载 Android Studio下编译SDL库的步骤

一. 下载并解压SDL源代码下载链接:https://libsdl.org/download-2.0.php二. 导入项目2-1.导入项目, 如图:2-2. 找到下载好的SDL源代码,选择android-project,点击OK,如图2-3. 选择一个空目录,作为导入的Android工程目录,然后点击Next,如图2-4. 如果目录不存在,则弹出下面的提示框,点击OK,创建新目录2-5. 点击Fi

2017-12-16 15:28:29 542

转载 Android APP终极瘦身指南

Android APP终极瘦身指南

2017-11-30 14:10:57 296

转载 ijkplayer程序结构整理

整个程序的结构从文件: ijkplayer_jni.c开始: 参照: static JNINativeMethod g_methods[] = { …… }一、在JNI_OnLoad()/ijkplayer_jni.c 调用ijkmp_global_init()/ff_ffplay.c完成ffmpeg的初始化,调用FFmpegApi_global_init()/ffmpeg_api_jni

2017-11-21 11:31:47 1350

转载 JNI局部引用、全局引用和弱全局引用

本文转载:http://blog.csdn.net/xyang81/article/details/44657385这篇文章比较偏理论,详细介绍了在编写本地代码时三种引用的使用场景和注意事项。可能看起来有点枯燥,但引用是在JNI中最容易出错的一个点,如果使用不当,容易使程序造成内存溢出,程序崩溃等现象。所以讲得比较细,有些地方看起来可能比较啰嗦,还请轻啪!《Android JNI局部引用表溢出:lo

2017-10-21 11:54:06 812

转载 JNI异常处理

文章转载:http://blog.csdn.net/xyang81/article/details/45770551异常简介异常,显而意见就是程序在运行期间没有按照正常的程序逻辑执行,在执行过程当中出现了某种错误,导致程序崩溃。在Java中异常分为运行时异常(RuntimeException)和编译时异常,在程序中有可能运行期间发生异常的逻辑我们会用try…catch…来处理,如果没有处理的话,在运

2017-10-20 15:32:18 350

原创 GLES20.glTexImage2D、GLUtils.texImage2D 使用区别

OpenGL 提供了三个函数来指定纹理: glTexImage1D(), glTexImage2D(), glTexImage3D(). 这三个版本用于相应维数的纹理,我们用到的是 2D 版本: glTexImage2D().函数原型:void glTexImage2D(GLenum target,GLint level,GLint components,GLsizei width, glsizei

2017-10-10 14:34:03 9709 5

转载 shader内置变量和函数

1、uint CreateShader(enum type) : 创建空的shader object;type: VERTEX_SHADER,2、void ShaderSource(uint shader, sizeicount, const **string, const int *length):加载shader源码进shader object;可能多个字符串3、void CompileShad

2017-10-09 14:23:56 383

转载 ffmpeg 新老接口问题及对照集锦

ffmpeg源码包里面有个apichangs文档,里面有各种接口改变的记录,如果你发现接口不能用了,可以去搜索那个文档,可以找到对应的新接口,然后到新接口对应的头文件中找到说明文字网上很多关于ffmpeg (libav)的资料都是N年以前的,而事实上ffmpeg数年来一直在“以时俱进”,因此无论是一些新手,或者号称为老手的人,有时候难免出头痛。。。。。。为了解决大家的头痛的问题,特列一个贴子,把ff

2017-09-04 20:48:08 327

转载 Android引用Library的若干问题(全都是坑啊,一定要注意了)

1.库工程里面的assets文件夹无用,不会被打包到APK2.库工程里面的AndroidManifest.xml无用,要声明Activity,必须写到主工程3.当库工程文件中的资源ID和主工程中的资源ID相同时,主工程的资源ID将会覆盖掉库工程的资源ID4.当主工程所引用的两个库工程中有相同的ID时,Android编译工具会选择一个优先级高的ID 进行合并到主工程,而抛弃另一个工程的ID5.库工程使

2017-08-02 20:12:33 5873 2

转载 Ubuntu环境QT出现:-1: error: cannot find -lGL(已解决)

安装完qt之后,构建项目就会出现:-1: error: cannot find -lGL然后使用 $ locate libGL.so 发现/usr/lib/i386-Linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/mesa/libGL.so.1.2.0再使用 sudo apt-get install libgl1-mesa-dev 一直提示错误,

2017-06-21 23:32:38 2698

原创 Android 小知识

一、创建Dialog时 Dialog dialog = new Dialog(getApplicationContext()); 传入getApplicationContext()上下文在运行期间为什么报错?Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is no

2017-01-05 18:36:00 338

原创 Android NDK --初始android NDK

一、前言Android NDK将用于在Androud平台上的C++开发;Android NDK是SDK的相关工具集,用来扩展Androud SDK的功能,从而使开发人员能够使用机器代码生成的编程语言(如C、C++和汇编语言)实现一些对代码性能要求比较高的模块并将这些模块嵌入到Adroud应用程序中; 从今天起,让我们开启Androud NDK的学习之旅!二、知识点概述本片我们将从以下几点初步认识、

2016-10-23 17:49:55 1001

转载 摄像头Camera视频源数据采集解析

一、前言在视频直播中一般都是两种视频数据源,一个是摄像头数据,一个是录制桌面数据,而一般来说美女妹子直播都是来自于摄像头数据,游戏直播都是录制桌面数据的,那么今天就来看看第一个数据源数据采集分析,Android中使用摄像头的场景很多,在没有直播这个行业出现之前,之前用到摄像头的最多就两个场景,一个是二维码扫描,一个是美颜拍照类的应用。那么这里就来看看Android中的摄像头的用法,以及如何进行数据采

2016-10-16 17:25:35 23564 4

音视频开发Demo

音视频开发的Demo

2016-10-16

AudioRecord/AudioTractorDemo

AudioRecord/AudioTractor实现音频的录制和播放Demo

2016-10-12

DecodeVideoFileDemo

通过MediaExtractor抽取视频文件,然后通过MediaCodec解码,在SurfaceView上播放;

2016-10-11

MediaExtractor抽取视频->MediaMuxer产生视频文件

通过MediaExtractor抽取视频,然后再通过MediaMuxer产生视频文件

2016-10-09

TexttureView实现Camera预览

TexttureView实现Camera预览

2016-09-15

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除