自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

老王的技术博客

认真记录认真交流 QQ技术群:451989345

  • 博客(36)

转载 隐私政策

本应用尊重并保护所有使用服务用户的个人隐私权。为了给您提供更准确、更有个性化的服务,本应用会按照本隐私权政策的规定使用和披露您的个人信息。但本应用将以高度的勤勉、审慎义务对待这些信息。除本隐私权政策另有规定外,在未征得您事先许可的情况下,本应用不会将这些信息对外披露或向第三方提供。本应用会不时更新本隐私权政策。 您在同意本应用服务使用协议之时,即视为您已经同意本隐私权政策全部内容。本隐私权政策属于...

2019-07-06 20:58:52 494

原创 基于VMware安装macOS 10.14.5(Mojave)遇到的几点问题

写在前面基于VMware虚拟机安装苹果系统(黑苹果)仅可用于学习研究,不要用于商业用途。安装方法安装方法网上已经介绍的很多了,这里就不再熬述,可以参考如下作者的文章:https://www.applex.net/threads/pc-vmware-macos.92998/要注意的是vmx文件中,如下这条字典的添加: smc.version = "0"否则虚拟器启动会报错。macO...

2019-06-23 10:52:00 5505

原创 在Android Studio 3中自动产生jni头文件的方法

前言最近开发一个需要支持native的项目,开发环境已经迁移到Android Studio,现在的最新版本是3.3.2,前期我在博文 https://blog.csdn.net/ericbar/article/details/80252171 中已经大概描述过eclipse的相关配置方法,总体来说也是大同小异的,无非就是配置ndk路径,在java文件里编写本地方法声明并调用,通过javah产生...

2019-04-08 15:49:35 915 1

原创 在Android Studio中添加com.android.support:design的支持

关于Material DesignGoogle在2015的IO大会上,给我们带来了Material Design的设计规范,同时,也给我们带来了全新的Android Design Support Library,利用这个库在Android上可以做一些相对统一风格的UI界面。导入包如何在Android Studio中导入Android Design Support Library,搜索网络上大...

2019-04-07 10:17:06 17818 5

原创 编译Android版的WebRTC

写在前面最近有兴趣研究一下webrtc,由于这几年一直有基于chromium浏览器的源码开发,在src/third_party下是能看到webrtc的目录的,只是一直没有真正单独编译过webrtc,国庆期间在家闲着编译了一把,现在把步骤记录一下。...

2018-10-17 22:14:05 3524 3

转载 关于FFmpeg里的GPL和LGPL协议

参考博文谢谢博主的分享:http://www.cnblogs.com/findumars/p/3556883.htmlGPL介绍我们很熟悉的Linux就是采用了GPL。GPL协议和BSD, Apache Licence等鼓励代码重用的许可很不一样。GPL的出发点是代码的开源/免费使用和引用/修改/衍生代码的开源/免费使用,但不允许修改后和衍生的代 码做为闭源的商业软件发布和销售。这...

2018-07-17 13:54:34 8662 4

转载 AAC 文件解析及解码流程

原文地址感谢博主的分享, https://blog.csdn.net/wlsfling/article/details/5876016AAC概述AAC是高级音频编码(Advanced Audio Coding)的缩写,出现于1997年,最初是基于MPEG-2的音频编码技术。由Fraunhofer IIS、Dolby Laboratories、AT&T、Sony等公司共同开发,目...

2018-07-16 18:42:49 2955

原创 移植ffplay媒体播放器和sdl2到Android平台

前言前述博文《基于FFmpeg和Android的音视频同步播放实现》中,我们按照自己的方法实现了一个简单的媒体播放器,并做了音视频同步。但是这个程序在播放更多码流时,遇到了一些问题,包括视频解码问题,同步时视频卡顿等。我们在博文《在ubuntu16.04下测试ffplay程序》中也测试过ffplay这个强大的播放器,而我们也知道SDL基于Android平台也有支持,所以我们可以将ffplay和...

2018-06-25 22:52:27 1578 5

原创 基于FFmpeg和Android的音视频同步播放实现

前言在以前的博文中,我们通过FFmpeg解码,并基于OpenGL ES完成了视频的渲染,也完成了基于OpenSL ES实现的native音频注入播放。 本文将这两部分代码进行合并,并实现音视频的同步播放。实现需求基于FFmpeg实现视频解码,并通过OpenGL ES进行渲染;基于OpenSL ES进行PCM注入播放;播放时进行音视频同步;关于音视频同步原理本文不...

2018-06-23 22:16:57 2952 2

原创 基于FFmpeg和OpenSL ES的Android音频播放器实现

前言在博文https://blog.csdn.net/ericbar/article/details/80509887中,我们实现了通过FFmpeg解码,并基于OpenGL ES完成了视频的渲染。本文我们将基于OpenSL ES完成native音频的注入播放。 OpenSL ES也是The Khronos Group Inc组织制定的一个音频规范,网上资料很多,在Android SDK代码里...

2018-06-04 22:15:04 1198 4

原创 通过FFmpeg解码和OpenGL的YUV转RGB实现Android视频播放

前言在我的博文 https://blog.csdn.net/ericbar/article/details/80506390 中,我们在Android平台上,实现了通过FFmpeg在native(C/C++)层进行视频解码,并通过OpenGL实现了硬件渲染工作,减少CPU的消耗,提高整个视频播放的性能。 但是,FFmpeg解码后的YUV视频数据,仍然是通过软件方式转成RGB565的,效率极其...

2018-05-30 17:21:33 2244

原创 基于FFmpeg解码和OpenGL ES渲染的Android视频播放

前言在我的博文 https://blog.csdn.net/ericbar/article/details/80416328 中,我们在Android平台上,实现了通过FFmpeg在native(C/C++)层进行视频解码,并通过SurfaceView(基于ANativeWindow)实现了图像的显示。 实际上,我们也可以通过OpenGL来进行硬件的渲染工作,减少CPU的消耗,提高整个视频播...

2018-05-30 14:36:23 6400 8

转载 OpenGL之EGL入门知识

参考博文本来材料参考下述博文,感谢作者 : https://blog.csdn.net/ba_jie/article/details/6370701概述EGL是由Khronos Group提供的一组平台无关的API,它的主要功能如下: 1. 和本地窗口系统(native windowing system)通讯; 2. 查询可用的配置; 3. 创建OpenGL ES可用的“绘...

2018-05-30 10:48:34 7515

转载 FFmpeg视频解码中的YUV420P格式

参考文章在做基于FFmpeg解码的视频播放时,需要涉及到帧数据存储的YUV与RGB格式,所以了解了一下,参考下述博文。 https://blog.csdn.net/lanxiaziyi/article/details/74139729#avframe-%E4%B8%8E-yuv420%E9%82%A3%E4%BA%9B%E4%BA%8B发展史视网膜存在三种视锥细胞,分别含有对红...

2018-05-30 10:16:42 12784 2

转载 图像色彩编码YUV(YCbCr)的基本知识

参考地址https://www.cnblogs.com/lifan3a/articles/4930182.htmlYUV与YCbCr的定义YCbCr是DVD、摄像机、数字电视等消费类视频产品中,常用的色彩编码方案。YCbCr 有时会称为 YCC。YCbCr 在模拟分量视频(analog component video)中也常被称为 YPbPr。YCbCr不是一种绝对色彩空间,是YUV压...

2018-05-30 09:39:34 5027 1

原创 基于FFmpeg和SurfaceView实现Android原生窗口(ANativeWindow)的视频播放

实现需求只演示视频解码和显示,不进行音频解码,也不做音视频同步,每一帧视频之间通过固定延时来间隔,所以视频播放时存在偏慢和偏快的问题;基于FFmpeg来进行解码,而不是基于Android自带的MediaPlayer播放器,也不基于Android的mediacodec硬件解码;视频显示层,在JAVA层基于SurfaceView,在原生(本地C/C++)层基于ANativeWindow来实现...

2018-05-23 21:58:37 8258 12

原创 基于eclipse进行ndk开发的环境配置

写在开头虽然我们在其他的博文中(如https://blog.csdn.net/ericbar/article/details/76602720和https://blog.csdn.net/ericbar/article/details/80229592),早就见识了ndk的强大,也基于ndk环境编译出了我们需要的libffmpeg.so库,但是如果想要在Android设备运行包含这些so的应用...

2018-05-09 21:49:22 2805 3

原创 基于ndk-r16b编译Android平台的FFmpeg-3.4.2和FFmpeg-4.0动态库

问题来源基于NDK编译Android平台的FFmpeg动态库,这件事情我们早在去年就做过了,详细的可以参考我的博文: https://blog.csdn.net/ericbar/article/details/76602720, 但是FFmpeg的基线版本以及ndk编译链是不断更新的,近期我打算基于最新的FFmpeg版本和ndk版本编译libffmpeg.so时,又遇到了麻烦,各种编译问题...

2018-05-07 19:20:58 2045 2

原创 关于媒体编解码以及封装那点事

前言从事音视频相关研究的工程师,免不了涉及编码,解码,复用(封装),解复用(解封装)等概念,还可能涉及到播放器,编码器等程序或硬件。现在火爆的互联网直播,小视频还有各种P2P视频通话等,其基本原理都十分类似。播放器媒体流图从上图可以看出,通用的播放器(如FFmpeg中的ffplay)设计都遵循这样的媒体流过程。 Source代表媒体源,有可能是来自本地设备(U盘,移动硬盘,文...

2018-04-10 17:25:48 1222

转载 Linux下pthread_once()函数

函数声明int pthread_once(pthread_once_t *once_control, void (*init_routine) (void));本函数使用初值为PTHREAD_ONCE_INIT的once_control变量保证init_routine()函数在本进程执行序列中仅执行一次。例子#include <semaphore.h>#inc...

2018-04-10 13:22:52 3425

原创 FFmpeg庖丁解牛系列之dict模块

关于dict模块由于C语言不像C++和JAVA,没有key/value键值对的高级实现,所以FFmpeg专门写了一个dict模块(AVDictionary字典)用于简单的key/value存储。dict模块相对比较简单,其代码实现主要位于如下两个文件:libavutil/dict.clibavutil/dict.h我们还是按照套路先分析头文件dict.h的内容。文件开头注释部分首先介...

2018-04-10 11:19:48 587

原创 FFmpeg庖丁解牛系列之option模块

关于option模块option是FFmpeg中另一个很基础的模块,相对于log模块,代码量上要复杂一些。主要代码实现在如下两个文件中:libavutil/opt.clibavutil/opt.h关于AVOptions的介绍,直接参考log.h里的头文件注释吧: AVOptions provide a generic system to declare options o...

2018-04-09 23:02:29 1014

原创 FFmpeg庖丁解牛系列之log模块

引子注:本文代码基于FFmpeg-3.4.2av_log日志系统是FFmpeg里最基本的一个模块,主要提供控制台打印输出,与此相关的源文件主要有如下几个:libavutil/log.clibavutil/log.hlibavutil/bprint.clibavutil/bprint.h其中,bprint是底层打印buffer管理,通过av_bprint相关接口将待打印的内...

2018-03-28 12:59:50 260 2

原创 C语言带颜色的printf/fprintf打印

引子C语言中默认的printf打印都是一种颜色的,有时候为了突出显示其中的信息,避免重要的警告(warning)和错误(error)信息淹没在其他不重要的log中,有必要区别不同信息级别的字体颜色。格式printf("\033[字背景颜色;字体颜色m字符串\033[0m" );例如,printf("\033[47;31mThis is a color test.\0...

2018-03-22 12:01:17 10737 2

原创 C语言中的fprintf和printf区别在哪?

原型fprintf的函数原型为:int fprintf( FILE *stream, const char *format, [ argument ]...);而printf的函数原型为:int printf( const char *format [, argument]... );所以fprintf是将字符输出到流(文件)的,printf是输出到标准输出设备(std...

2018-03-16 11:48:13 13794

原创 C99标准里的inttypes.h头文件

来源在查看代码时看到如下类型:fprintf(stderr, "\033[%"PRIu32";3%"PRIu32"m%s\033[0m", (color[level] >> 4) & 15, color[level] & 15, str);其中的PRIu32是什么意思?上网搜了一下才知道是C...

2018-03-15 23:22:25 8135

原创 C语言结构体初始化的四种方法

定义struct InitMember{ int first; double second; char* third; float four;};方法一:定义时赋值struct InitMember test = {-10,3.141590,"method one",0.25};需要注意对应的顺序,不能错位。方法二:定义后逐个...

2018-03-15 17:17:19 134756 12

原创 C语言中可变参数的使用方法

写在前面其实,可变参数这个东东自从入门C语言开始就一直在使用,最经典的就是printf打印输出。不论是从事嵌入式开发,还是搞Android的NDK开发,经常会用到可变参数输出log,但是很多时候是用别人封装好的API,而忽略了事情的本质。需求平时我们写C语言函数时,一般是固定参数的,但是像打印输出格式化内容时,其参数个数就不确定了,类似如下:printf("This is ...

2018-03-14 22:45:51 1937

原创 至简播放器ffplay工作原理

下载,编译及运行参考博文 http://blog.csdn.net/ericbar/article/details/79382783 即可完成ffplay的基本测试。 如果要进行GDB调试,需要先编译一个带GDB信息的执行文件,编译前修改配置选项,./configure --prefix=ffout --disable-stripping --disable-optimiza...

2018-03-13 19:19:43 1552

原创 在ubuntu16.04下测试ffplay程序

下载FFmpeg及SDL源码离上次博文发布已经有一段时间了,这次我们来测试一下强大的FFmpeg播放器程序ffplay,它是FFmpeg原生附带的。 本文编写时,FFmpeg的最新版本是3.4.2,从官网ffmpeg.org上下载ffmpeg-3.4.2.tar.xz源码,通过如下命令解压:tar xvf ffmpeg-3.4.2.tar.xzffplay.c的源码在fftools目...

2018-02-26 23:02:53 2370 7

原创 基于NDK编译Android平台的FFmpeg动态库

需求FFmpeg在Linux平台(如Ubuntu)上的支持已经比较完善了,如前述文章介绍 http://blog.csdn.net/ericbar/article/details/73702061,我们很容易就可以基于FFmpeg+SDL实现一个播放器,比如FFmpeg自带的ffplay程序,就可以实现音视频的解码播放。 现在基于Android手机的媒体应用场景也愈发增多起来,比如流行的直播技术

2017-08-03 09:14:59 2840 2

原创 基于FFmpeg和SDL1.2的极简播放器实现

思路基于FFmpeg写一个播放器,其实十分的简单。实际上,主要是对FFmpeg的API的封装,同时,我们需要将音视频通过主机呈现出来,所以还依赖于平台的SDL库,整体步骤和思路如下: 1. 编译用于音视频解码的FFmpeg库; 2. 编译用于音视频呈现的SDL库; 3. 编写主程序完成对音视频的整个调度过程;编译FFmpeg库这个步骤在《与FFmpeg的初次邂逅》(http://blog.cs

2017-06-25 11:17:01 1085 2

原创 FFmpeg之Hello World

本文基于FFmpeg的库函数实现Hello World的打印输出。

2017-04-19 22:54:03 704

原创 FFmpeg的代码结构和编译系统

介绍FFmpeg的目录结构以及编译系统

2017-04-17 22:30:08 473

原创 与FFmpeg的初次邂逅

有了FFmpeg的编译环境后,需要来和FFmpeg来一次邂逅了,简单的下载,编译,测试就是本文的目的。

2017-04-10 10:53:09 2152

原创 搭建FFmpeg的编译开发环境(VMware+Ubuntu)

准备工作为了方便学习和研究FFmpeg,我们必须有一个合适的开发试验环境。FFmpeg默认是基于Linux环境来开发的,在类Linux操作系统里,编译会变得更加的简单。如果你对Linux不熟悉,可以参阅相关书籍。 首先,我们需要准备开发环境,一般的,在Windows里安装VMware虚拟机,这里选择安装的是12.5的版本VMware-workstation-full-12.5.1-4542065.

2017-04-09 22:09:50 1234

空空如也

空空如也

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