自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 收藏
  • 关注

原创 记一次ffmpeg进程阻塞的问题排查过程

ffmpeg进程莫名阻塞,经过排查发现问题可能处在aac编码使用了固定码率导致,加上-qscale:a 4参数后得以解决

2022-02-24 22:14:52 3564

原创 安卓平台文字叠加库freetype的编译

freetype是一款跨平台开源的文字叠加库,支持对图像,视频进行文字叠加.做多媒体开发的小伙伴大概都知道文字叠加是个刚需.所以最近研究了一下freetype库在安卓平台的编译过程.下载freetype 可在https://freetype.org/download.html下载,目前最新版本是2.11.1.配置freetype是一个标准的GNU Autotools生成的项目.其原理是:1 使用configure生成Makefile,2 make. 我们这里要做的就是修改configure的输出参

2022-02-11 12:29:55 3496 1

原创 解决安卓UVCCamera YUY2格式花屏,MTK无法出视频等问题

在维护过程中,我们小心翼翼地进行测试,但是也还是会遇到用户反馈的问题, 摄像头打不开拉,花屏拉,不识别拉… 从侧面说明这个东西的兼容性是比较难以搞定的.需要进行大量测试和适配

2022-01-24 21:27:06 5602 1

原创 安卓执法仪录像之进程间共享内存

通常情况下,如果在录像过程中APP崩溃了,就会导致录像文件损坏,可能前面录的数据就丢了.但是如果做了进程隔离的话,主进程发生异常崩溃,不影响录像进程.而录像进程功能相对单一简单,不会导致崩溃.当主进程崩溃时,录像进程可以检测到,这时及时停止当前的录像,录像正常结束,就可以播放.

2022-01-22 21:47:11 2912

原创 安卓执法仪编码器之同步/异步模式

MediaCodec 异步编码 阻塞 编码效率 执法记录仪 安卓执法仪

2022-01-11 13:07:58 2654

原创 执法记录仪录像模块的设计

执法记录仪 安卓录像 预录 延录 叠加 录像完整性 录像分段

2022-01-09 23:41:16 2172

原创 解决UVCamera stopPreview阻塞崩溃以及无法识别摄像头等bug

UVCCamera是基于安卓的一个USB外接摄像头调用项目,该项目允许安卓设备在不需要root的情况下打开外接USB摄像头进行预览,获取视频帧.最近在基于UVCCamera适配一款设备的时候出现了问题:该设备始终无法打开一款摄像头(项目必须要适配这款摄像头),作为对比,我的安卓手机就没有任何问题.作为一个负责任的开发人员,我只好硬着头皮肝下去.并最终解决了这个问题.经过研究,发现UVCCamera项目确实有这些缺点:兼容性不是太好,经常出现不同的手机,或者不同摄像头上面表现不一致的问题;停止预览(

2021-11-01 17:55:49 2838 11

原创 EasyDarwin服务器的配置文件的使用说明

EasyDarwin是一款高性能开源RTSP流媒体服务器,基于go语言研发,维护和优化:RTSP推模式转发、RTSP拉模式转发、录像、检索、回放、关键帧缓存、秒开画面、RESTful接口、WEB后台管理、分布式负载均衡,基于EasyDarwin构建出了一套基础的流媒体云视频平台架构!配置文件类型EasyDarwin提供了默认配置文件和指定自定义配置文件的两种方式,详细说明见下表:配置...

2018-12-08 15:51:27 7105

原创 EasyDarwinGo拉转推功能之拉流

拉转推是一个很有意义的功能,它可将一个独立的RTSP数据源“拉”到服务器,再通过转发协议转发给多个客户端,或者通过EasyDarwin的本地存储功能进行存储。国内大多摄像机都支持RTSP协议,通过拉转推可将第三方摄像机接入到EasyDarwin服务器。IPCEasyDarwin第三方RTSP源本地存储Client1Client2Client3拉流拉流ffmpeg转发转发转发IPCEasyDar...

2018-11-17 18:36:25 3192 2

原创 EasyDarwinGo录像功能发布

EasyDarwin服务器现在使用Go版本实现了。最新的代码提交,已经支持了推流(或者拉流)的同时进行本地存储。本地存储的原理,是在推流的同时启动ffmpeg作为一路Client来做存储。ffmpeg在demux和mux的工作方面已经十分成熟,我们没必要再重复发明轮子。因此这种做法十分取巧而且简单有效,也不会侵入原来的代码架构。如下图所示:RTSP摄像机EasyDarwin本地存储推流使用f...

2018-11-17 15:43:47 52116 26

原创 EasyPlayer支持YUV数据导出功能

我们可能会遇到这样的功能,播放一个视频的同时,再把这个视频推送出去,或者对视频数据进行智能分析等处理.这样我们就迫切需要得到视频的原始数据.基于这个需求,EasyPlayer增加了获取视频YUV数据的功能. 它的原理是这样的:Created with Raphaël 2.1.2EasyPlayerClientEasyPlayerClientDecoderDecoderYUVYUV读取媒体...

2018-02-10 10:44:01 762 2

原创 使用EasyPusher SDK进行便捷开发

基于EasyPusher sdk库工程(即library module)实现一个推送客户端非常简单便捷,因为sdk端已经将各种烦人的状态维护\错误检查\权限判定\UI同步等功能都实现了,开发者仅仅只需要实现若干接口即可.让我们看看如何实现一个Pusher吧!首先我们介绍一下Pusher sdk的封装用到了哪些技术.Android Architecture ComponentsAndroid ar

2017-12-25 19:50:01 2287 1

原创 Android UVC外接摄像头推送-EasyPusher

最近EasyPusher针对UVC摄像头做了适配.我们结合了UVCCamera与EasyPusher,支持将UVC摄像头的视频推送到RTSP服务器上.在此特别感谢UVCCamera这个牛逼的项目!来看看是怎么操作UVC摄像头的吧.我们实现了一个专门检测UVC摄像头的服务:UVCCameraService类,主要代码如下:监听mUSBMonitor = new USBMonitor(this, new

2017-12-25 15:49:21 3976

原创 EasyPlayer视频源切换

EasyPlayer现在支持多视频源快速切换了,我们介绍一下是如何实现的. 这个需求通常应用在一个客户端需要查看多个视频源的情况,比如多个监控场景轮播.由于EasyPlayer的播放端已经放在Fragment了,这使得SDK层可以对好多应用层的代码做以封装,这样尽可能给开发者带来方便.比如,两个视频源切换的时候,只需要创建两个PlayFragment,然后对这两个Fragment进行显示切换,如代

2017-12-25 14:53:17 1796

原创 EasyPlayer显示模式设置

一般对于一个播放器,应该支持如下几种显示模式:等比例,最大化区域显示,不裁剪等比例,最大区域显示,裁剪拉伸显示,铺满全屏要实现这几种显示模式,其实只要对播放控件的布局进行些许调整即可.那EasyPlayer是怎么实现的呢? EasyPlayer使用一个PlayFragment进行视频播放.该类实现了一个setScaleType的方法来进行显示模式设定(或切换).public void se

2017-12-25 14:19:50 2202

原创 EasyPlayer延迟再优化策略

EasyPlayer延迟再优化策略EasyPlayer是一款专门针对RTSP协议进行过优化的播放器.其中两个我们引以为傲的的优点就是起播快和低延迟.最近我们遇到一些需求,其对延迟要求非常苛刻,于是我们再把代码捡起来,针对之前的播放策略进行再优化,果然又发现一些可以更改的地方,于是又对性能进行了一次压榨,再一次降低了延迟.主要优化内容如下:提高解码线程的优先级.一个不容忽视且容易被人忽略的事实,就是

2017-11-25 15:54:26 1384

原创 EasyCameraPro在直播过程中不发送START_STREAM_ACK响应的bug解决

EasyCameraPro在直播过程中不发送START_STREAM_ACK响应的bug解决EasyCameraPro是一款按需直播的RTMP协议流媒体推送APP.EasyCameraPro在启动后,登录到EasyDSS服务器,在收到视频播放请求后,启动推送,并由服务器转发给播放端进行播放.当播放端停止播放时,服务器会给EasyCameraPro发送停止视频的命令,这时候,EasyCameraPro

2017-10-21 13:43:32 472

原创 EasyRTMP 1.3.17.1014版本更新

EasyRTMP 1.3.17.1014版本更新这个版本主要更新了如下内容:关于界面调整.由于业务需求,app的关于界面需要同时起到我们产品宣传的作用,因此我们决定将关于界面内容更完善些,于是乎就改成如下这样子: 这个界面使用了ConstrantLayout进行布局.其代码如下:<?xml version="1.0" encoding="utf-8"?><layout xmlns:app="ht

2017-10-14 16:31:12 834

原创 EasyPlayer支持H265视频解码

之前有博客介绍了android端H265硬解码的实现,见文章:http://blog.csdn.net/jyt0551/article/details/74502627 现在我们介绍一下在EasyPlayer端如何实现H265解码. 我们的策略是,在能支持硬解码的手机上使用硬解码,但是如果手机不支持,那也可以使用软解码来实现. 我们可以通过编译ffmpeg,使能hevc解码库,从而支持265的

2017-10-08 08:37:57 8764

原创 EasyRTMP手机直播推流到EasyDSS进行RTMP直播过程中分辨率反复切换崩溃问题解决

前篇博客介绍了Android EasyRTMP App的一些功能以及简单实现.这篇博客介绍一下我们遇到的一个BUG,以及它的出现原因,解决方式.这个bug是在切换分辨率的时候,偶尔会出现App崩溃.我们经过不断测试发现在低分辨率切换至高分辨率的时候更容易出现,后来查看日志,发现打印的日志比较奇怪,是一些Native层的崩溃,并没有任何堆栈信息展示:--------- beginning of cra

2017-10-07 14:34:04 2031

原创 Android EasyRTMP 介绍

EasyRTMP是什么?EasyRTMP是一个EasyDarwin配套使用,也可以单独使用的RTMP推送库,通过EasyRTMP我们就可以避免接触到稍显复杂的RTMP推送流程,只需要调用EasyRTMP的几个API接口,就能轻松、稳定地把流媒体音视频数据推送给Red5、Ngnix、crtmpserver等RTMP服务器.我们有专门的使用EasyRTMP library 实现的安卓版本的EasyRTM

2017-10-07 11:54:30 1638 1

原创 在EasyPlayerPro上实现一键平稳切换视频源的功能

经常会遇到这样的需求,播放器支持动态切换视频源.典型的应用就是在电视上切换频道了.市面上的播放器,在切换视频源时,可能需要将当前播放器release,再创建新的来进行加载,这样基本都存在闪一下黑屏的问题,个人感觉不是很好.那如何使得这两个视频平稳过度呢,比如在先一个视频未渲染之前,先停留在前一段视频的最后一帧画面(或许再加上个磨砂效果),会不会更好些?下面就简单介绍一下实现原理与方法.原理就是给视频

2017-09-16 16:37:51 864

原创 EasyPusher 结合Android Architecture Component便捷开发二

上一篇博客我们简单介绍了一下Android Architecture Component的相关概念与知识点,这篇博客我们将介绍一下如何根据其改造EasyPusher.EasyPusher的业务逻辑模块是MediaStream类,该类实现摄像头的开启关闭,音频采集的开启关闭,推送的开始和停止的功能.我们先看看EasyPusher主界面原来的一些关键处理逻辑: 1. onCreate里面进行权限检查,

2017-09-12 12:28:00 533

原创 EasyPusher 结合Android Architecture Component便捷开发一

在今年的Google I/O大会上,Google 发布了一个新的概念:Android Achitecture Component,即基于安卓的一系列更加便捷开发的基础库,主要包括便捷的生命周期管理和便捷的数据存储.这篇文章我们来看看使用其中的生命周期管理模块,如何使得EasyPusher更加便于开发和集成.我们先认识一下开发一款类似EasyPusher这种基于摄像头的APP存在的痛点.我们需要关注如

2017-09-11 23:02:23 452

原创 EasyPusher "permission denied for window type 2006" 错误处理

EasyPusher之前在某个版本,应客户要求支持动态获取权限功能, 将targetSdkVersion改为了23,结果后来发现,会在一些设备上会崩溃.经后台采集日志后发现错误如下图:原来有些手机在安卓6.0系统对TYPE_SYSTEM_OVERLAY这种格式的VIEW进行了限制,只有系统级应用才有权限来创建这种窗口.毕竟这样的窗口可以不受用户限制,比如app退出后,窗口还可以继续展示.而EasyP

2017-09-09 13:07:33 2837

原创 EasyPlayer支持x86和arm64 ABI

不久之前,EasyPlayer仅支持armeabi-v7a版本的abi——怎么说呢——通常可以满足需求了。因为安卓对于ABI的支持是做了兼容的,非arm架构的,可以通过某种方法兼容ARM架构的动态库。但是这样的确会损害一些性能。。本着精益求精的态度,我们打算再支持一些主流的CPU架构,典型的就是arm64和x86了。主要涉及到下面一些库的修改: - libEasyRTSPClient - lib

2017-08-15 23:29:20 860

原创 ffmpeg的编译选项浅析

熟悉ffmpeg的同学都知道在编译ffmpeg的时候,可以”定制”一些模块,只使能需要的模块,不使能多余的模块。比如如果我们需要一个视频编码库,可能只使能x264就足够了,用这句:–enable-libx264.如果需要解析RTSP协议,那只使能rtsp模块,用这句:–enable-demuxer=RTSP.这样一来可以提高我们的编译速度,二来编译出来的库或者可执行文件也不会很大。想必每个人初次接触

2017-08-10 22:49:00 1684

原创 ffmpeg probe过程总结

fffmeg 通过avformat_open_input函数来打开媒体流.在这个函数中,首先做一些初始化工作,并设置一些option(比如ffplay 里面传入的一些参数),再调用init_input进行probe.我们在这里简单介绍一些probe的过程.// Open input file and probe the format if necessary. */static int init_

2017-08-09 23:14:15 7145 1

原创 EasyPusher 华为手机硬编码 [OMX.IMG.TOPAZ.Encoder] failed to set input port definition parameters.

EasyPusher 作为一款RTSP推送利器, 在发布伊始,很快获得了广大人民群众的一致好评.但是也有一些用户反映:EasyPusher在我的华为手机上会闪崩!一开始我是表示怀疑的:不可能,你给我截个图看看!结果用户拍了一段小视频,尼玛,还真闪退,尴尬. 经过后来拿到日志,发现有这样一些打印信息: [OMX.IMG.TOPAZ.Encoder] failed to set input p

2017-08-09 21:54:13 2207 2

原创 EasyPusher/EasyRTMP摄像头偏暗的问题解决

在我们测试EasyPusher/EasyRTMP的过程中发现有些设备预览时,明显偏暗!在稍微暗点的环境中几乎很难看清东西…额,这是怎么回事呢?又是安卓设备的兼容性问题,头疼!好吧,停止抱怨,撸起袖子开始干.对,我们想到了.把摄像头的scene设置成了一个比较亮的模式对吧?下面是摄像头可能支持的模式,这么多我逐一试试:SCENE_MODE_AUTOSCENE_MODE_ACTIONSCENE_MO

2017-07-22 13:32:15 1033

原创 BUG修复:EasyPlayer卡在首帧的bug修改

最近发现某些手机在运行EasyPlayer播放视频时,会停留在第一帧画面,虽然有码率预示着接收端没有问题,但是画面却卡着不动.一般来讲,这个现象有三种原因导致:没有接收到视频帧;解码器出错,只解出了第一帧图像;时间戳计算有误,导致长时间sleep;那逐一排查下.首先在媒体帧回调的地方下个断点,发现的确有视频帧接收到,并且视频帧最终正常地push到解码的队列当中了,说明第一个假设不成立.其次,

2017-07-22 11:33:03 586

原创 EasyPlayerPro基于FFMPEG实现播放同时进行录像的功能

之前有博客专门介绍了EasyPlayer的本地录像的功能,简单来说,EasyPlayer是一款RTSP播放器,它将RTSP流里的音视频媒体帧解析出来,并用安卓系统提供的MediaMuxer类进行录像.那EasyPlayerPro可以这样实现吗?答案是不太现实,因为Pro支持绝大多数的流媒体协议,并不单单是RTSP协议,包括hTTP\RTSP\RTMP\HLS\FILE等格式都支持.要将这些数据分别解

2017-07-09 15:56:37 1790 1

原创 EasyPusher工程解构简析

EasyPusher主要有三部分组件组成:采集,编码,叠加,上传.在这个基础上同时支持本地存储\后台预览的功能.主要业务模块与相关类之间的关系如图所示:Created with Raphaël 2.1.0StreamActivityStreamActivity摄像头线程摄像头线程BackgroundCameraServiceBackgroundCameraService编码线程编码线程PusherP

2017-07-09 13:46:49 1142

原创 Android cookieManager & OKHttp以及EasyPlayerPro的媒体流的认证的实现

Android通过CookManager来管理Cookie。在发送\响应过一个HTTP请求之后, CookManager首先将响应里的Set-cookie字段parse成一个Cookie列表,并存储到本地;然后每次请求时,都从本地获取到这个Cookie列表,并将其组装成字符串(Cookie=”’),设到请求的header里。OKHttp发送请求时从本地读取Cookie并添加到请求的Header里

2017-07-08 10:37:48 913

原创 Android H.265硬解码&EasyPlayerPro

H.265编码算法作为新一代视频编码标准,在编码效果上有了很大的进步,同样清晰度的视频,265要比264有着更低的码率。关于265对比264的优越性,网上有更专业的文章来作分析,我也仅对这两种算法略知皮毛,因此不多阐述。基于其更高的压缩比,H.265适用于安防行业再合适不过了!因为安防行业每天都有着海量的视频数据在产生,同时需要实时传输、分析、存储…在带宽和存储成本依然昂贵的今天,我们极度需要更低的

2017-07-05 21:09:13 13669 7

原创 EasyPlayer Android 结构浅析

EasyPlayer 是一款小而美的RTSP安卓播放器。具有起搏快、延迟底、兼容性好的特点,而且支持抓拍、录像等实用功能。 好了,我就在此简单介绍一下播放器的代码结构吧!播放简单来说,EasyPlayer就是一个典型的生产者、消费者模式案例,如下图所示:首先,创建音视频消费者线程。线程刚开始,会等待音视频数据帧,根据音视频相关信息,初始化Decoder和Render。EasyPlayer的视频用M

2017-07-04 14:15:20 1052

原创 Android MediaMuxer录像(支持G711音频)

Android平台的MediaMuxer是个非常好的录像库,它能将H.264视频+AAC音频存储成.mp4格式的文件,而且稳定性、同步效果都非常好。MediaMuxer在安卓版的EasyPlayer和EasyPusher都用到了该方法来进行本地录像。作者也写过两篇针对性的博客来做介绍,参考: http://blog.csdn.net/jyt0551/article/details/60152344

2017-05-27 23:48:01 10556 1

原创 基于EasyPlayer和EasyPusher实现安卓平台的双向视频对讲

EasyPlayer是播放RTSP视频的屠龙刀,而EasyPusher又是推送RTSP的倚天剑,那将这两个神兵利器合起来,岂不是很厉害!基于这个思路,我们实现了一款视频对讲APP,称之为EasyVideoTalk。

2017-04-19 22:18:21 2950 1

原创 EasyPlayer声音自动停止、恢复,一键静音等功能

我们在开发播放器时,可能会需要静音或者降低音量的功能。比如说某款音乐播放器,当在后台播放时,如果此时有另外的系统通知声音发出,可能播放器会把音量降低,系统声音结束后,再调高;如果有来电了,播放器可能会把音乐暂停,等通话结束后再继续播放。还有,比方说我们在某个场合放个视频,不料音量很大,会引来很多目光(很尴尬),这时候可能我们需要一键静音的功能。那这些功能我们应该如何实现呢?Android播放声音的类

2017-03-08 00:01:37 4558 1

转载 一些有用的bash命令记录汇总

Renaming/moving files with suffixes quickly:cp /home/foo/realllylongname.cpp{,-old}This expands to:cp /home/foo/realllylongname.cpp /home/foo/realllylongname.cpp-oldJust to point out that to do the rev

2017-03-07 21:00:54 603 1

空空如也

空空如也

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

TA关注的人

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