WangShuo的专栏

不积跬步,无以至千里;不积小流,无以成江海!

排序:
默认
按更新时间
按访问量

Android——直播推流SDK

概述: 好像有三个月没有更新博客了,年前实在是忙的累成狗啊。。。本想直播功能稳定了就没那么多事了,没想到又要搞魔法短视频功能,马丹,短视频玩成了花啊,撸起袖子干。 现在把我们项目中的直播SDK开源出来,我们是境外直播平台,百万用户,经过半年迭代,SDK已经相当稳定,大家可以放心使用。https...

2018-02-27 19:00:32

阅读数:1588

评论数:13

openGL ES进阶教程(五)制作一个简单的VR播放器,播放全景视频

之前写过全景(VR)图片,和用openGL ES+MediaPlayer 渲染播放视频+滤镜效果这一篇就在之前的基础上实现一个最简单的VR播放器,播放全景视频。概述:全景视频是一种用3D摄像机进行全方位360度进行拍摄的视频,用户在观看视频的时候,可以随意调节视频上下左右进行观看。展示:“身临其境...

2017-08-01 20:44:51

阅读数:2363

评论数:4

ffmpeg实战教程(十)ffmpeg/camera实现最近很火的视频壁纸,相机壁纸

本篇实现一个有意思的玩意儿,视频壁纸,相机壁纸 这玩意好像现在还都是国外版本,哈哈先上图: 视频壁纸 相机壁纸 1.动态壁纸制作的知识:每一个动态壁纸都继承自WallpaperService,其中必须实现的抽象方法onCreateEngine,返回一个Engine对象,实际上所有的绘图与刷...

2017-05-16 10:19:50

阅读数:4146

评论数:1

Android消息传递机制总结

由于直播项目的推流SDK,拉流SDK已经稳定。所以这段时间一直开发业务层新需求。业务层的核心灵魂就是层层的消息传递,今天就来总结一下andorid的应用层的各种消息传递。1.线程间通讯 ——— Handler,HandlerThread等。 2.组件间通信 ——— BroadcastRe...

2017-11-23 15:43:38

阅读数:312

评论数:0

openGL ES进阶教程(六)美颜滤镜之美白,磨皮,红润

网上搜罗了一堆的美颜滤镜效果,可惜尽不如人意。最后偶然看到ios上提供了一个用OC写的美颜滤镜,好吧,改写成Java的试试。好在大学时期搞过一段时间IOS开发,用自己的半吊子的水平,没想到还真改成功了。先上效果图:网上搜涨痘痘的图片,搜到刘涛了,罪过罪过~原图:美颜后:可见有四个可滑动的bar,从...

2017-09-01 20:17:12

阅读数:3688

评论数:4

ffmpeg实战教程(十三)iJKPlayer源码简析

要使用封装优化ijk就必须先了解ffmpeg,然后看ijk对ffmpeg的C层封装! 这是我看ijk源码时候的笔记,比较散乱。不喜勿喷~ijk源码简析:1.ijkplayer_jni.c 封装的播放器JNI层 API,对应java层调用。2.ijkplayer.c ...

2017-07-01 10:34:15

阅读数:2136

评论数:0

openGL ES进阶教程(四)用openGL ES+MediaPlayer 渲染播放视频+滤镜效果

之前曾经写过用SurfaceView,TextureView+MediaPlayer 播放视频,和 ffmpeg avi解码后SurfaceView播放视频 ,今天再给大家来一篇openGL ES+MediaPlayer来播放视频。。。。当年也曾呆过camera开发组近一年时间,可惜那时候没写博...

2017-05-27 09:50:55

阅读数:3112

评论数:3

AndroidN DisplayManagerService源码简析,亮屏流程分析

PowerManagerService源码分析 :http://blog.csdn.net/king1425/article/details/70224476 Android的亮屏流程从android系统结构层次来分可以分为三个流程。App应用唤醒源;Framework层Power结合Displ...

2017-05-25 19:34:24

阅读数:1256

评论数:1

openGL ES进阶教程(三)用openGL实现动态壁纸,就是这么简单

网上动态壁纸的实现教程有很多,但是用openGL实现动态壁纸的教程却是寥寥无几,那么今天就带领大家学习用openGL实现动态壁纸,起一个抛砖引玉吧。在之前曾写过一篇 ffmpeg/camera实现最近很火的视频壁纸,相机壁纸 ,动态壁纸的实现套路已经写了,今天就不追述了。老规矩,先看效果图让大家有...

2017-05-24 20:18:57

阅读数:1613

评论数:0

ffmpeg实战教程(十二)为视频添加/更换背景音乐

2017年,各种关于视频处理的功能层出不穷,现在基本上大多APP都有视频上传播放功能。 然而上传,播放可用的优秀框架有很多,我们在此就不说了。 本篇我们就做一个用ffmpeg给视频添加/更换背景音乐的功能UI界面有两个输入框,第一个填入要加背景音乐的视频文件,第一个要添加音乐的文件。 然后点...

2017-05-22 17:59:14

阅读数:4583

评论数:5

ffmpeg实战教程(十一)手把手教你实现直播功能,不依赖第三方SDK

直播,2016最火的技术之一了,更多的关于直播的知识:http://blog.csdn.net/king1425/article/details/72489272 …这篇我们就不依赖任何集成好的SDK,自己搭建服务器,用ffmpeg+nginx实现手机直播功能先上图:推流的手机拉流的网页和VL播...

2017-05-19 20:24:01

阅读数:6232

评论数:8

关于音视频直播技术的总结

流媒体协议 流媒体协议是服务器与客户端之间通信遵循的规定。当前网络上主要的流媒体协议如图所示。直播平台参数对比 主流互联网视音频平台直播服务的参数对比如图所示:直播技术架构图:可以看到直播的流程可以分为如下几步:采集 —>处理—>编码和封装—>推流到服务器—>服务器流分...

2017-05-18 19:41:15

阅读数:3262

评论数:0

openGL ES进阶教程(二)之全景图片

全景又被称为3D实景,是一种新兴的富媒体技术,其与视频,声音,图片等传统的流媒体最大的区别是“可操作,可交互”。 全景分为虚拟现实和3D实景两种。虚拟现实是利用maya等软件,制作出来的模拟现实的场景,代表有虚拟紫禁城等;3D实景是利用单反相机或街景车拍摄实景照片,经过特殊的拼合,处理,让作者立于...

2017-05-17 20:13:27

阅读数:1800

评论数:1

openGL ES进阶教程(一)之粒子光束

2016AR/VR喊的火热,这些在Android上的实现或多或少与openGL 有关。 OpenGL能做的事情太多了!很多程序也看起来异常复杂。更有可能因为某一步的顺序错误导致最后渲染出错,这是因为,OpenGL和我们现在使用的C++、java这种面向对象的语言不同,OpenGL中的大多数函数使用...

2017-05-17 09:12:46

阅读数:1880

评论数:1

ffmpeg实战教程(九)windows下ffmpeg命令+nginx + rtmp实现推流,拉流。

概述Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。 nginx-rmtp-module是Nginx服务器的流媒体插件。nginx通过rtmp模块提供rtmp服务, ffmpeg推送一个rtmp流到nginx, 然后客户端通过访问nginx来收看...

2017-05-15 14:41:14

阅读数:6657

评论数:4

ffmpeg实战教程(八)Android平台下AVfilter 实现水印,滤镜等特效功能

上一篇我们实现了Android平台解码avi并用SurfaceView播放。 ffmpeg实战教程(七)Android CMake avi解码后SurfaceView显示 本篇我们在此基础上实现滤镜,水印等功能。对ffmpeg不熟的客官看这里:ffmpeg源码简析(一)结构总览 先上两张效果图:...

2017-05-11 11:52:35

阅读数:2410

评论数:4

ffmpeg实战教程(七)Android CMake avi解码后SurfaceView显示

在上一篇文章中实现了Android平台MP4解码YUV数据, 本篇我们实现Android平台解码avi并用SurfaceView播放。先上图看效果:思路: 1.把封装好的视频数据解码为YUV 2.YUV数据转化为RGB。 3.一帧一帧的传给SurfaceView显示出来PS: 其实YUV...

2017-05-10 09:30:58

阅读数:2756

评论数:5

ffmpeg实战教程(六)Android CMake实现解码(MP4转YUV)

在前面的文章中我们用ffmpeg在windows上实现了多种功能,下面系列的文章我们将移植到Android系统上实现。我们将使用最新版:最新版ffmpeg ffmpeg3.3 新版Android studio Android studio2.3...

2017-05-09 11:55:49

阅读数:3844

评论数:3

ffmpeg源码简析(十三)ffmpeg API变更 2009-03-01—— 2017-05-09变更

Add:新增的Change/Rename:修改的Deprecate:过时的。以后很有可能删除。Remove:删除的 The last version increases were: libavcodec: 2015-08-28 libavdevice: 2015-08-28 libavf...

2017-05-09 10:43:32

阅读数:2396

评论数:2

学openGL必知道的图形学知识

OpenGL基本原理OpenGL是将用数学语言和色彩等信息描述的三维空间物体通过计算转换成二维图像并显示出来的程序库。三维空间中的对象被描述成一系列的顶点(用来定义几何对象)或像素(用来定义图像)。 OpenGL对数据进行几个步骤的处理将其转换成像素,这些像素存放帧缓冲区中形成最终需要的图形。O...

2017-05-08 17:23:10

阅读数:1780

评论数:0

JNI高阶知识总结

JNI与NDK的关系NDK可以为我们生成了C/C++的动态链接库,JNI是java和C/C++沟通的接口,两者与android没有半毛钱关系,只因为安卓是java程序语言开发,然后通过JNI又能与C/C++沟通,所以我们可以使用NDK+JNI来实现“Java+C”的开发方式。JNIEnv与Java...

2017-05-08 12:24:31

阅读数:906

评论数:0

ffmpeg实战教程(五)libswscale,libavfilter实践指南

1.libswscale实现YUV转RGBlibswscale里面实现了各种图像像素格式的转换。libswscale使用起来很方便,最主要的函数只有3个: (1) sws_getContext():使用参数初始化SwsContext结构体。 (2) sws_scale(...

2017-05-05 16:59:18

阅读数:1518

评论数:0

ffmpeg实战教程(四)格式转换如MP4转MKV等

知识延伸:I,P,B帧和PTS,DTS的关系基本概念:I frame :帧内编码帧 又称intra picture,I 帧通常是每个 GOP(MPEG 所使用的一种视频压缩技术)的第一个帧,经过适度地压缩,做为随机访问的参考点,可以当成图象。I帧可以看成是一个图像经过压缩后的产物。P frame:...

2017-05-05 10:37:47

阅读数:3374

评论数:0

ffmpeg实战教程(三)音频PCM采样为AAC,视频YUV编码为H264/HEVC

音频PCM采样数据编码为压缩码流(MP3,WMA,AAC等)简单介绍一下流程中各个函数的意义:av_register_all():注册FFmpeg所有编解码器。avformat_alloc_output_context2():初始化输出码流的AVFormatContext。avio_open():...

2017-05-04 20:28:15

阅读数:2398

评论数:0

ffmpeg实战教程(二)用SDL播放YUV,并结合ffmpeg实现简易播放器

我们先实现用SDL播放YUV数据先来了解一下基本概念SDL基本函数: [初始化] * SDL_Init(): 初始化SDL。 * SDL_CreateWindow(): 创建窗口(Window)。 * SDL_CreateRenderer(): 基于窗口创建渲染器(Render)。...

2017-05-04 15:33:08

阅读数:3410

评论数:0

ffmpeg实战教程(一)Mp4,mkv等格式解码为h264和yuv数据

FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。而网上对这些功能的使用大多是基于命令行的。这不利于我们深入学习定制化ffmpeg,今后我将写一系列的用代码实现这些功能的教程供大家学习。这系列的前部分我打算写在windows上的实现,后部分写移植到Android...

2017-05-04 12:16:41

阅读数:9634

评论数:8

ffmpeg源码简析(十二)FFMPEG中的主要结构体总结

FFMPEG中结构体很多。最关键的结构体可以分成以下几类:a) 解协议(http,rtsp,rtmp,mms)AVIOContext,URLProtocol,URLContext主要存储视音频使用的协议的类型以及状态。URLProtocol存储输入视音频使用的封装格式。每种协议都对应...

2017-05-02 14:54:21

阅读数:738

评论数:0

android源码分析——事件输入流程MotionEvent事件处理流程

Input事件输入系统之应用MotionEvent触摸事件处理流程 输入事件一般分为KeyEvent按键事件,和MotionEvent触摸事件,也就是我们平时说的touch事件,事件的传递流程相当复杂庞大, 我们先暂时绕开那个庞大的系统来谈谈上层应用如何接收到MotionEvent事件然后处理...

2017-05-02 09:52:16

阅读数:978

评论数:0

细数Android5.0到Android7.X 多媒体技术新特性

Android 5.0 行为变更媒体播放如果您要实现显示媒体播放状态或传输控件的通知,请考虑使用新的 Notification.MediaStyle 模板,而不是自定义 RemoteViews.RemoteView 对象。无论您选择使用哪个方法,请务必将通知的可见性设为 VISIBILITY_PU...

2017-04-28 16:23:26

阅读数:3420

评论数:0

Android Multimedia实战(六)音频 MediaRecorder和AudioRecord录音与MediaPlayer和AudioTrack播放

录制声音MediaRecorder和AudioRecord 区别MediaRecorder和AudioRecord都可以录制音频,区别是MediaRecorder录制的音频文件是经过压缩后的,需要设置编码器。并且录制的音频文件可以用系统自带的Music播放器播放。 而AudioRecord录制的...

2017-04-28 15:25:23

阅读数:1338

评论数:0

Android Multimedia实战(五)MediaCodec编码解码实例解析

MediaCodec概述MediaCodec是一个Android原生的编解码器。 简单的来说,MediaCodec可以把摄像头采集的数据流编码为H264格式,这个过程是压缩过程。也可以把H264格式解码在surface类的控件上显示。我们先来看一下Android系统中解码器的命名,软解码器通常是...

2017-04-28 12:00:46

阅读数:2086

评论数:0

Android Multimedia实战(四)MediaProjection实现截图,与MediaMuxer实现录屏为MP4,Gif格式

MediaProjection可以用来捕捉屏幕,具体来说可以截取当前屏幕和录制屏幕视频 (5.0以上)先总结下系统是如何实现组合键截屏的: 都应该知道Android源码中对按键的捕获位于文件PhoneWindowManager.java中 当满足按键条件时会用一个mHandler 开始pos...

2017-04-27 15:15:43

阅读数:3759

评论数:0

Camera源码解析之数据传递

MTK Camera HAL 层数据传递主要三模块:一:预览(StartPreview)二:拍照(TakePicture)三:回传(PreviewCallBack)一:预览(StartPreview)AP层下达预览指令后如何获取数据,数据是什么格式的,最后拿到数据后 是如何去预览,以下分为四部分...

2017-04-27 09:26:53

阅读数:497

评论数:0

Android Multimedia实战(三)基于MediaExtractors与MediaMuxer的视频分离与合成

上篇介绍了mp4parser合成视频功能:http://blog.csdn.net/king1425/article/details/70805960 ,这篇使用Android原生API实现视频的分离与合成MediaExtractors将视频多信道的分离出来,比如声音和图像分隔出来 1. J...

2017-04-26 20:59:09

阅读数:1326

评论数:0

Android Multimedia实战(二)使用MediaRecorder实现分段录制视频,mp4parser合成视频功能

1.MediaRecorder类介绍: MediaRecorder类是Android sdk提供的一个专门用于音视频录制,一般利用手机麦克风采集音频,摄像头采集图片信息。 MediaRecorder主要函数:setAudioChannels(int numChannels) 设置录制的音频通道数...

2017-04-26 16:00:10

阅读数:2684

评论数:0

android Multimedia实战(一)详解SurfaceView,TextureView之播放视频的四种方式

在Android中,我们有四种方式来实现视频的播放: 1、使用其自带的播放器。指定Action为ACTION_VIEW,Data为Uri,Type为其MIME类型。2、使用VideoView来播放。在布局文件中使用VideoView结合MediaController来实现对其控制。3、使用Med...

2017-04-25 20:24:36

阅读数:3860

评论数:0

ffmpeg源码简析(十一)libavformat,libavcodec,libavutil

libavformatavformat.h 文件 定义识别文件格式和媒体类型库使用的宏、数据结构和函数,通常这些宏、数据结构和函数在此模块内相 对全局有效allformat.c 文件 简单的注册/初始化函数,把相应的协议,文件格式,解码器等用相应的链表串起来便于查找。cutils.c 文件...

2017-04-25 10:40:33

阅读数:699

评论数:0

ffmpeg源码简析(十)libswscale中的SwsContext,sws_scale()

libswscale是一个主要用于处理图片像素数据的类库。可以完成图片像素格式的转换,图片的拉伸等工作。 libswscale常用的函数数量很少,一般情况下就3个:sws_getContext():初始化一个SwsContext。sws_scale():处理图像数据。 sws_freeConte...

2017-04-25 09:46:01

阅读数:1357

评论数:1

ffmpeg源码简析(九)av_log(),AVClass,AVOption

1.av_log()av_log()是FFmpeg中输出日志的函数。随便打开一个FFmpeg的源代码文件,就会发现其中遍布着av_log()函数。一般情况下FFmpeg类库的源代码中是不允许使用printf()这种的函数的,所有的输出一律使用av_log()。 av_log()的声明位于liba...

2017-04-25 09:19:05

阅读数:674

评论数:0

ffmpeg源码简析(八)解码 av_read_frame(),avcodec_decode_video2(),avformat_close_input()

1.av_read_frame()av_read_frame()的作用是读取码流中的音频若干帧或者视频一帧。例如,解码视频的时候,每解码一个视频帧,需要先调用 av_read_frame()获得一帧视频的压缩数据,然后才能对该数据进行解码(例如H.264中一帧压缩数据通常对应一个NAL)。通过av...

2017-04-24 20:42:13

阅读数:1101

评论数:0

ffmpeg源码简析(七)解码-avformat_open_input,avformat_find_stream_info()

1.avformat_open_input打开媒体的的过程开始于avformat_open_input,因此该函数的重要性不可忽视。在该函数中,FFMPEG完成了:输入输出结构体AVIOContext的初始化;输入数据的协议(例如RTMP,或者file)的识别(通过一套评分机制):1判断文件名的后...

2017-04-24 20:05:42

阅读数:1112

评论数:0

ffmpeg源码简析(六)编码-av_write_frame(),av_write_trailer()

1.av_write_frame()av_write_frame()用于输出一帧视音频数据,它的声明位于libavformat\avformat.h,如下所示。int av_write_frame(AVFormatContext *s, AVPacket *pkt); 简单解释一下它的参数的含义:...

2017-04-24 19:35:45

阅读数:868

评论数:0

ffmpeg源码简析(五)编码——avformat_alloc_output_context2(),avcodec_encode_video2()

1.avformat_alloc_output_context2()在基于FFmpeg的视音频编码器程序中,该函数通常是第一个调用的函数(除了组件注册函数av_register_all())。avformat_alloc_output_context2()函数可以初始化一个用于输出的AVForma...

2017-04-24 19:22:42

阅读数:717

评论数:0

ffmpeg源码简析(四)avcodec_find_encoder(),avcodec_open2(),avcodec_close()

avcodec_find_encoder()和avcodec_find_decoder()avcodec_find_encoder()用于查找FFmpeg的编码器,avcodec_find_decoder()用于查找FFmpeg的解码器。 avcodec_find_encoder()的声明位于l...

2017-04-24 17:28:49

阅读数:728

评论数:0

ffmpeg源码简析(三)av_malloc(),AVIOContext,AVFrame,avio_open2()等

内存操作的常见函数位于libavutil\mem.cav_malloc()av_malloc()是FFmpeg中最常见的内存分配函数。av_malloc()的代码可以简化成如下形式。void *av_malloc(size_t size) { void *ptr = NULL; ...

2017-04-24 17:07:46

阅读数:996

评论数:0

ffmpeg源码简析(二)av_register_all(),avcodec_register_all()

av_register_all()该函数在所有基于ffmpeg的应用程序中几乎都是第一个被调用的。只有调用了该函数,才能使用复用器,编码器等。av_register_all()调用了avcodec_register_all()。avcodec_register_all()注册了和编解码器有关的组件...

2017-04-24 16:00:03

阅读数:1451

评论数:1

ffmpeg源码简析(一)结构总览

未毕业通过校招进入了某做机的公司从事camera方面的工作。比较悲剧的是做了将近一年的Camera之后,正要研究Camera上下层打通任督二脉的时候,公司架构调整加上OS版本大变动,被调到了多媒体组(不过也好,我对编码解码这块也是向往已久)。以前大学的时候用vitamio写过一个播放器项目,后来i...

2017-04-24 14:24:00

阅读数:5074

评论数:6

android系统—储存知识源码分析

1.存储相关名词:RAM Ramdom Access Memory 随机存取存储器 ROM Read Only Memory ROM image 只读存储器镜像 NAND Flash flash内存的一种2.OBBOBB:Opaque Binar...

2017-04-24 09:30:41

阅读数:1911

评论数:0

ffmpeg必知道的知识点

ffmpegFFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code...

2017-04-22 10:04:36

阅读数:4676

评论数:0

windows下编译最新版ffmpeg3.3-android,并通过CMake方式移植到Android studio2.3中

windows下编译最新版ffmpeg3.3win下编译: 1.下载安装MinGW:http://sourceforge.net/projects/mingw/files/ 2.下载yasm http://yasm.tortall.net/Download.html 3.下载 ffmpeg:...

2017-04-21 20:34:02

阅读数:5576

评论数:25

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