音视频
文章平均质量分 74
narkang
一切的成功都是背后的努力和汗水
展开
-
音视频系列--OpenSL ES基础用法总结
一、前置OpenSL ES全称为Open Sound Library for Embedded Systems,及嵌入式音频加速标准。OpenSL ES是无授权费、跨平台、针对嵌入式系统封精心优化的硬件音频加速API。它为嵌入式移动多媒体设备上的本地应用程序开发提供了标准化、高性能、低响应时间的音频功能实现方法,同时还实现了软/硬件音频性能的直接跨平台部署,降低了执行难度。在Android中,High Level Audio Libs是音频Java层API输入输出,属于高级API,相对来说,OpenS原创 2021-05-02 13:18:24 · 1508 阅读 · 1 评论 -
音视频系列--CLion搭建SDL和FFmpeg环境(Window)
一、环境搭建1.1、软件下载最近用CLion搭建了FFmpeg和SDL的环境,方便学习下CLion链接包含破解文件链接:https://pan.baidu.com/s/18ZkHu9urnbSL-ssgWbjTjQ提取码:1tun复制这段内容后打开百度网盘手机App,操作更方便哦编译器用的MinGW,配置如下SDL下载地址FFmpeg下载地址注意, FFmpeg和SDL目录中bin,include,lib中文件都要拷贝到MinGW的对应目录中,不然编译会找不到1.2、CM原创 2021-04-16 19:28:15 · 931 阅读 · 0 评论 -
音视频系列--OpenGL美颜特效
美颜分两种高斯模糊美颜需要手动保留细节部分,不适合,但是高斯模糊美颜效果比较好通道磨皮美颜1.蓝通道 更容易保存视频的细节信息2.高反差保留3.叠加4.调rgb曲线 二次曲线美颜的本质去痘一般是高斯模糊美颜之后,再进行通道美颜precision mediump float;//顶点着色器传递过来的坐标varying mediump vec2 aCoord;//采样uniform sampler2D vTexture;vec2 blurCoordinates[20];/原创 2021-03-10 22:40:47 · 1328 阅读 · 0 评论 -
音视频系列--OpenGL+FBO录制视频
上一篇讲了用OpenGL纹理渲染摄像头数据,这一篇打算利用上一篇的开发成果,录制视频。一、FBO前面讲的利用OpenGL纹理渲染的Camera数据是直接显示到屏幕的,但是在直播推流时候是不能这么做的,这时候得把用OpenGL渲染出来的数据放到一个容器中,然后用这个容器的数据去显示到屏幕,或者录制,或者去直播推流就行了。这个容器就是这里要介绍的FBO(Frame Buffer object),离屏缓存。我们需要对纹理进行多次渲染采样时,而这些渲染采样是不需要展示给用户看的,所以我们就可以用一个单独的缓原创 2021-03-06 15:17:47 · 1037 阅读 · 0 评论 -
音视频系列--OpenGL纹理+CameraX滤镜渲染
上一篇写了OpenGL基础理论最近趁着空余时间把OpenGL纹理学习了,然后结合CameraX做了下滤镜效果,还是打算记录下学习效果。关于纹理的介绍可以学习这篇文章一、CameraRender数据源使用CameraX,没有Camera2代码的复杂,CameraX的使用比较简单,之前写的这篇文章有过CameraX的介绍使用,这里不做过多赘述了。public class CameraRender implements GLSurfaceView.Renderer, Preview.OnPreview原创 2021-03-06 11:00:08 · 1311 阅读 · 3 评论 -
音视频系列--OpenGL基础理论概念
一、OpenGLOpenGL是一种图形应用程序编程接口(Application Programming Interface,API)。它是一种可以对图形硬件设备特性进行访问的软件库,OpenGL被设计为一个现代化的、硬件无关的接口,因此我们可以在不考虑计算机操作系统或窗口系统的前提下,在多种不同的图形硬件系统上,完全通过软件的方式实现OpenGL的接口。二、OpenGL EShttps://www.khronos.org/opengles/OpenGL® ES is a royalty原创 2021-02-06 17:23:05 · 592 阅读 · 0 评论 -
音视频系列--rtmp直播推流学习(软编)
x264编译#!/bin/bashNDK=/home/ruby/Desktop/android-ndk-r21dexport TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64export API=21function build{ ./configure \ --prefix=$PREFIX \ --disable-cli \ --enable-static \ --enable-pic \原创 2021-01-28 22:45:58 · 979 阅读 · 0 评论 -
音视频系列--rtmp直播推流学习(硬编)
上一篇介绍了怎么搭建流媒体服务器,这一篇打算利用这个流媒体服务器,实现rtmp音视频的推流服务。实现效果如下,右边是模拟器推流端,左边是利用vlc来测试推流情况。直播源是使用MediaProjection来实现,之前有学习怎么用它投屏。rtmp介绍下载地址rtmp导入#子文件cmakelist#关闭ssl 不支持rtmps rtmp 加密 传递一变量 进制 加密验证set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DNO_CRYPTO" )file(GL原创 2021-01-20 13:41:54 · 1143 阅读 · 1 评论 -
音视频系列--Camera2+MediaCodec制作相互投屏效果
接着之前写的 音视频系列–MediaProjection+MediaCodec制作简单投屏效果,继续使用Camera2+MediaCodec来制作相互实时投屏效果,为后面的直播学习打下基础。一、效果模拟器作为客户端,手机作为服务端,用模拟器实时接收的手机投屏数据,如果是两个手机可以相互投屏。整个过程使用Camera2来获取数据,获取的数据通过MediaCodec编码,使用H264协议,传输通过WebSocket来实现,接收端接收到数据之后解码,然后通过TextureView渲染,大概是这么一个流程原创 2021-01-10 13:07:25 · 1222 阅读 · 5 评论 -
音视频系列--音频基本操作(音频裁剪,音频和音频混合,音频和视频混合)
前面介绍了音频的基本原理,这篇文章继续来总结下音频的基本操作,包括裁剪,混音和音频和视频的混合操作。一、裁剪下面Demo将一段输入mp3文件,根据startTime和endTime,进行裁剪,先解码成PCM文件,然后转码成WAV//解码成PCM文件public void decodeToPCM(String musicPath, String outPath, int startTime, int endTime) throws Exception { if (endTime < s原创 2021-01-10 10:03:43 · 1318 阅读 · 0 评论 -
音视频系列--音频基本理论
一、何为声音中学物理中我们知道,声音是物体振动产生的声波。声音通过介质(空气、固体、液体)传入到人耳中,带动听小骨振动,经过一系列的神经信号传递后,被人所感知。声音是一种波。物体振动时会使介质(如空气)产生疏密变化,从而形成疏密相见的纵波。既然声音是波,那么我们就可以用图的形式来表示它。给定空间中某一点,该点的空气疏密随时间的变化如下:波形图下图是一个正弦波,其周期为0.002s,频率为500HZ。频率(音调):声音1秒内周期性变化的次数人耳的听觉范围在20Hz-20kHz。 低频的声音原创 2021-01-05 22:04:40 · 1519 阅读 · 0 评论 -
音视频系列--MediaProjection+MediaCodec制作简单投屏效果
最近学习了使用MediaProjection+MediaCodec来制作简单的投屏效果,感觉作为练手Demo还是算合适的,趁此记录下学习效果。一、效果大概流程如下效果和手机投屏到电脑上差不多,整个过程使用MediaProjection来录制屏幕,录制好的数据通过MediaCodec获取编码好的数据,使用H265协议,传输通过WebSocket来实现,大概是这么一个流程,下面记录下实现过程。二、MediaProjection屏幕录制首先还是获取MediaProjectionManager,然后原创 2020-12-22 22:49:24 · 2764 阅读 · 1 评论 -
音视频系列--MediaProjection录屏生成H264和H265文件
一、前言想要分析H264或者H265文件,就需要生成对应文件来分析,当然可以通过FFmpeg来操作,操作命令可以参考这里,这里打算使用MediaProjection录频来生成下H264或H265文件。二、MediaProjection2.1、获取MediaProjectionManager使用之前别忘了申请权限 public boolean checkPermission() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.原创 2020-12-21 15:29:23 · 1217 阅读 · 0 评论 -
音视频系列--哥伦布编码和H264片段sps解析宽高信息
H.264码流中的NALU进行了一个简单的划分,标出了NALU的类型和长度等信息。因为我们在解析SPS和PPS中要使用到指数哥伦布编码的解析,所以有必要了解一下指数哥伦布编码。一、指数哥伦布编码(理论篇)指数哥伦布码(Exponential-Golomb code, 即Exp-Golomb code)是熵编码的一种编码方式,正常来说,可以拓展为k阶,但是在H264中使用的是0阶指数哥伦布编码,在H.264中使用ue(v)表示0阶无符号指数哥伦布编码的解码过程,用se(v)表示0阶有符号指数哥伦布编码过原创 2020-12-20 22:22:33 · 1015 阅读 · 0 评论 -
音视频系列--H264编解码总结
一、概述H264,通常也被称之为H264/AVC(或者H.264/MPEG-4 AVC或MPEG-4/H.264 AVC)对摄像头采集的每一帧视频需要进行编码,由于视频中存在空间和时间的冗余,需要用算法来去除这些冗余。H264是专门去除这些冗余的算法,我们把这种算法称为H264编码。H264的出现就是为了创建比以前的视频压缩标准更高效的压缩标准,使用更好高效的视频压缩算法来压缩视频的占用空间,提高存储和传输的效率,在获得有效的压缩效果的同时,使得压缩过程引起的失真最小。MPEG-4 AVC和H.26翻译 2020-12-20 19:26:05 · 6757 阅读 · 0 评论 -
音视频系列--cmake学习
之前写过一篇cmake的简单使用,这次准备详细总结下cmake的相关使用。一、什么是库库是写好的,成熟的,可以复用的代码,一般程序运行都需要依赖许多底层库文件。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行,库有两种:静态库(.a、.lib)和动态库(.so,.dll)。静态、动态是指链接,将一个程序编译成可执行程序步骤如下:c或cpp文件程序编译过程一步到位编译:gcc main.c -o main预处理 -E (.i) 编译 -S (.s) 汇编-c (.o)翻译 2020-12-05 19:46:42 · 623 阅读 · 0 评论 -
音视频系列--c++语言学习(常函数,友元函数,继承,多继承,虚函数和纯虚函数)
一、常函数既要使数据能在一定范围内共享,又要保证它不被任意修改,可使用const。1 .用const修饰的声明数据成员称为常数据成员2 .用const修饰的声明成员函数称为常成员函数3 .用const修饰的定义对象称为常对象变量或对象被const修饰后其值不能被更新。因此被const修饰的变量或对象必须要进行初始化。1.1、常数据成员有两种声明形式:const int cctwl;int const cctwl;//不能省略数据类型,可以添加 public private等访问控制原创 2020-11-27 21:23:23 · 352 阅读 · 0 评论 -
音视频系列--c++语言学习(构造函数、拷贝构造函数、explicit、new、内存分布)
一、构造函数1.1、构造函数和析构函数由来类的数据成员不能在类的声明时候初始化使用构造函数处理对对象的初始化。1 .构造函数是一种特殊的成员函数,与其他函数不同,不需要用户调用它,而是创建对象的时候自动调用。2 .析构函数是对象不再使用的时候,需要清理资源的时候调用。1.2、构造函数和析构函数基本语法1.2.1、构造函数1.C++中的类需要定义与类名相同的特殊成员函数时,这种与类名相同的成员函数叫做构造函数;2.构造函数可以在定义的时候有参数;3.构造函数没有任何返回类型。4.构原创 2020-11-22 23:27:40 · 200 阅读 · 0 评论 -
音视频系列--c++语言学习(内联函数,默认参数,函数重载,函数指针,宏定义防止多次导入,this)
一、内联函数c++从c中继承的一个重要特征就是效率。假如c++的效率明显低于c的效率,那么就会有很大的一批程序员不去使用c++了。在c中我们经常把一些短并且执行频繁的计算写成宏,而不是函数,这样做的理由是为了执行效率,宏可以避免函数调用的开销,这些都有预处理来完成。但是在c++出现之后,使用预处理宏会出现两个问题:1 c中也会出现,宏看起来像一个函数调用,但是会有隐藏一些难以发现的错误。和实际的函数调用不一致2 面向对象是c++特有的,预处理器不允许访问类的成员,也就是说预处理器宏不能用作类原创 2020-11-22 18:08:32 · 187 阅读 · 0 评论 -
音视频系列--c++语言学习(类和对象,命名空间,cin和cout,引用)
从语法上看,C语言是C++ 的一部分,C语言代码几乎不用修改就能够以C++ 的方式编译。学了C语言就相当于学了C++的一半,从C语言转向C++时,不需要再从头开始,接着C语言往下学就可以。一、类和对象C++ 是一门面向对象的编程语言,理解 C++,首先要理解类(Class)和对象(Object)这两个概念。C++ 中的类(Class)可以看做C语言中结构体(Struct)的升级版。结构体是一种构造类型,可以包含若干成员变量,每个成员变量的类型可以不同;可以通过结构体来定义结构体变量,每个变量拥有相同的原创 2020-11-22 13:04:21 · 758 阅读 · 1 评论 -
音视频系列--c语言学习(二级指针,函数指针,复杂指针函数,字符串,常量指针,文件操作)
一、指针间传值详解1.1、值传递行参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参 -> 形参),参数的值只能传入,不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。1.2、指针传递形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行操作。1.3、引用传递形参相当于是实参的“别名”,对形参的操作其实就是对实参的操作,在引用传递过程中,被调函数的形式参数虽然也作为局部变量在栈中开辟了内存空间,但是原创 2020-11-15 16:46:06 · 303 阅读 · 0 评论 -
音视频系列--c语言学习(结构体,指针,位运算,内存管理,异常指针)
C语言是学习音视频开发必须要掌握的,当然也没有必要学得多么深,只需要掌握常用的一些用法就可以了,这里记录下常用的语法。一、结构体1.1、结构体类型的定义struct Person{ char name[64]; int age;};typedef struct { char name[64]; int age;}Person;注意:定义结构体类型时不要直接给成员赋值,结构体只是一个类型,编译器还没有为其分配空间,只有根据其类型定义变量时,才分配空间,有空间后原创 2020-11-09 00:02:32 · 686 阅读 · 0 评论 -
FFmpeg4.2.2 交叉编译
这两天一直在编译FFmpeg库,实话真是踩坑不少,也知道了遇见问题该如何排错,所以还是打算记录下,也算是一个总结.百度了解FFmpeg环境和下载1 .CentOs 82. android-ndk-r17c3. ffmpeg-4.2.2注意要下载linux版的ndk,在获取下载链接时候,通过wget下载到linux中Configure帮助选项查看帮助选项 ./configur...原创 2020-01-21 17:37:20 · 2897 阅读 · 1 评论 -
音视频系列--Shell脚本编程入门
说句题外话,19年互联网整体环境不太好,裁员挺严重的,现在真的能有一个稳定的工作已经算是可以了,前些年的互联网热潮已经过去了,再也不是那种会四大组件就可以随便进入一家公司的年代了,现在找工作不仅要会使用某个东西,而要知道里面的实现原理,需要有一个比较强的技术实力,才能找到一份符合自己愿望的公司。所以程序员就是要时刻保持一个学习的心态,对于除了自己工作中用到东西,更需要对工作之外的东西学习,学到老,...原创 2020-01-18 14:40:10 · 522 阅读 · 0 评论