流媒体
文章平均质量分 71
「已注销」
这个作者很懒,什么都没留下…
展开
-
解决安卓UVCCamera YUY2格式花屏,MTK无法出视频等问题
在维护过程中,我们小心翼翼地进行测试,但是也还是会遇到用户反馈的问题, 摄像头打不开拉,花屏拉,不识别拉… 从侧面说明这个东西的兼容性是比较难以搞定的.需要进行大量测试和适配原创 2022-01-24 21:27:06 · 6011 阅读 · 1 评论 -
解决UVCamera stopPreview阻塞崩溃以及无法识别摄像头等bug
UVCCamera是基于安卓的一个USB外接摄像头调用项目,该项目允许安卓设备在不需要root的情况下打开外接USB摄像头进行预览,获取视频帧.最近在基于UVCCamera适配一款设备的时候出现了问题:该设备始终无法打开一款摄像头(项目必须要适配这款摄像头),作为对比,我的安卓手机就没有任何问题.作为一个负责任的开发人员,我只好硬着头皮肝下去.并最终解决了这个问题.经过研究,发现UVCCamera项目确实有这些缺点:兼容性不是太好,经常出现不同的手机,或者不同摄像头上面表现不一致的问题;停止预览(原创 2021-11-01 17:55:49 · 3174 阅读 · 11 评论 -
在EasyPlayerPro上实现一键平稳切换视频源的功能
经常会遇到这样的需求,播放器支持动态切换视频源.典型的应用就是在电视上切换频道了.市面上的播放器,在切换视频源时,可能需要将当前播放器release,再创建新的来进行加载,这样基本都存在闪一下黑屏的问题,个人感觉不是很好.那如何使得这两个视频平稳过度呢,比如在先一个视频未渲染之前,先停留在前一段视频的最后一帧画面(或许再加上个磨砂效果),会不会更好些?下面就简单介绍一下实现原理与方法.原理就是给视频原创 2017-09-16 16:37:51 · 942 阅读 · 0 评论 -
EasyRTMP手机直播推流到EasyDSS进行RTMP直播过程中分辨率反复切换崩溃问题解决
前篇博客介绍了Android EasyRTMP App的一些功能以及简单实现.这篇博客介绍一下我们遇到的一个BUG,以及它的出现原因,解决方式.这个bug是在切换分辨率的时候,偶尔会出现App崩溃.我们经过不断测试发现在低分辨率切换至高分辨率的时候更容易出现,后来查看日志,发现打印的日志比较奇怪,是一些Native层的崩溃,并没有任何堆栈信息展示:--------- beginning of cra原创 2017-10-07 14:34:04 · 2070 阅读 · 0 评论 -
EasyPlayer支持H265视频解码
之前有博客介绍了android端H265硬解码的实现,见文章:http://blog.csdn.net/jyt0551/article/details/74502627 现在我们介绍一下在EasyPlayer端如何实现H265解码. 我们的策略是,在能支持硬解码的手机上使用硬解码,但是如果手机不支持,那也可以使用软解码来实现. 我们可以通过编译ffmpeg,使能hevc解码库,从而支持265的原创 2017-10-08 08:37:57 · 8907 阅读 · 0 评论 -
EasyCameraPro在直播过程中不发送START_STREAM_ACK响应的bug解决
EasyCameraPro在直播过程中不发送START_STREAM_ACK响应的bug解决EasyCameraPro是一款按需直播的RTMP协议流媒体推送APP.EasyCameraPro在启动后,登录到EasyDSS服务器,在收到视频播放请求后,启动推送,并由服务器转发给播放端进行播放.当播放端停止播放时,服务器会给EasyCameraPro发送停止视频的命令,这时候,EasyCameraPro原创 2017-10-21 13:43:32 · 507 阅读 · 0 评论 -
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 · 865 阅读 · 0 评论 -
EasyPlayer显示模式设置
一般对于一个播放器,应该支持如下几种显示模式:等比例,最大化区域显示,不裁剪等比例,最大区域显示,裁剪拉伸显示,铺满全屏要实现这几种显示模式,其实只要对播放控件的布局进行些许调整即可.那EasyPlayer是怎么实现的呢? EasyPlayer使用一个PlayFragment进行视频播放.该类实现了一个setScaleType的方法来进行显示模式设定(或切换).public void se原创 2017-12-25 14:19:50 · 2417 阅读 · 0 评论 -
Android UVC外接摄像头推送-EasyPusher
最近EasyPusher针对UVC摄像头做了适配.我们结合了UVCCamera与EasyPusher,支持将UVC摄像头的视频推送到RTSP服务器上.在此特别感谢UVCCamera这个牛逼的项目!来看看是怎么操作UVC摄像头的吧.我们实现了一个专门检测UVC摄像头的服务:UVCCameraService类,主要代码如下:监听mUSBMonitor = new USBMonitor(this, new原创 2017-12-25 15:49:21 · 4072 阅读 · 0 评论 -
使用EasyPusher SDK进行便捷开发
基于EasyPusher sdk库工程(即library module)实现一个推送客户端非常简单便捷,因为sdk端已经将各种烦人的状态维护\错误检查\权限判定\UI同步等功能都实现了,开发者仅仅只需要实现若干接口即可.让我们看看如何实现一个Pusher吧!首先我们介绍一下Pusher sdk的封装用到了哪些技术.Android Architecture ComponentsAndroid ar原创 2017-12-25 19:50:01 · 2320 阅读 · 1 评论 -
EasyPlayer支持YUV数据导出功能
我们可能会遇到这样的功能,播放一个视频的同时,再把这个视频推送出去,或者对视频数据进行智能分析等处理.这样我们就迫切需要得到视频的原始数据.基于这个需求,EasyPlayer增加了获取视频YUV数据的功能. 它的原理是这样的:Created with Raphaël 2.1.2EasyPlayerClientEasyPlayerClientDecoderDecoderYUVYUV读取媒体...原创 2018-02-10 10:44:01 · 800 阅读 · 2 评论 -
EasyDarwinGo拉转推功能之拉流
拉转推是一个很有意义的功能,它可将一个独立的RTSP数据源“拉”到服务器,再通过转发协议转发给多个客户端,或者通过EasyDarwin的本地存储功能进行存储。国内大多摄像机都支持RTSP协议,通过拉转推可将第三方摄像机接入到EasyDarwin服务器。IPCEasyDarwin第三方RTSP源本地存储Client1Client2Client3拉流拉流ffmpeg转发转发转发IPCEasyDar...原创 2018-11-17 18:36:25 · 3263 阅读 · 2 评论 -
EasyPlayer支持x86和arm64 ABI
不久之前,EasyPlayer仅支持armeabi-v7a版本的abi——怎么说呢——通常可以满足需求了。因为安卓对于ABI的支持是做了兼容的,非arm架构的,可以通过某种方法兼容ARM架构的动态库。但是这样的确会损害一些性能。。本着精益求精的态度,我们打算再支持一些主流的CPU架构,典型的就是arm64和x86了。主要涉及到下面一些库的修改: - libEasyRTSPClient - lib原创 2017-08-15 23:29:20 · 935 阅读 · 0 评论 -
ffmpeg的编译选项浅析
熟悉ffmpeg的同学都知道在编译ffmpeg的时候,可以”定制”一些模块,只使能需要的模块,不使能多余的模块。比如如果我们需要一个视频编码库,可能只使能x264就足够了,用这句:–enable-libx264.如果需要解析RTSP协议,那只使能rtsp模块,用这句:–enable-demuxer=RTSP.这样一来可以提高我们的编译速度,二来编译出来的库或者可执行文件也不会很大。想必每个人初次接触原创 2017-08-10 22:49:00 · 1774 阅读 · 0 评论 -
EasyPlayer实现视频的局部缩放、平移功能(类似快手视频)
EasyPlayer实现视频的局部缩放、平移功能(类似快手视频)在预览图片的时候,利用手势控制图片的缩放、平移,已经是智能手机时代最基本的操作。而对于视频,很少有播放器支持这样的操作。实际上,在观看视频的时候,我们可能会想观看某个区域的局部细节,需要把该区域放大来观看,EasyPlayer播放器基于这样的需求,提供了局部放大的功能。感谢github上开源库PhotoView,它在ImageView原创 2017-02-20 23:31:37 · 7013 阅读 · 0 评论 -
EasyPlayer声音自动停止、恢复,一键静音等功能
我们在开发播放器时,可能会需要静音或者降低音量的功能。比如说某款音乐播放器,当在后台播放时,如果此时有另外的系统通知声音发出,可能播放器会把音量降低,系统声音结束后,再调高;如果有来电了,播放器可能会把音乐暂停,等通话结束后再继续播放。还有,比方说我们在某个场合放个视频,不料音量很大,会引来很多目光(很尴尬),这时候可能我们需要一键静音的功能。那这些功能我们应该如何实现呢?Android播放声音的类原创 2017-03-08 00:01:37 · 4685 阅读 · 1 评论 -
基于EasyPlayer和EasyPusher实现安卓平台的双向视频对讲
EasyPlayer是播放RTSP视频的屠龙刀,而EasyPusher又是推送RTSP的倚天剑,那将这两个神兵利器合起来,岂不是很厉害!基于这个思路,我们实现了一款视频对讲APP,称之为EasyVideoTalk。原创 2017-04-19 22:18:21 · 3025 阅读 · 1 评论 -
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 · 10671 阅读 · 1 评论 -
EasyPlayer Android 结构浅析
EasyPlayer 是一款小而美的RTSP安卓播放器。具有起搏快、延迟底、兼容性好的特点,而且支持抓拍、录像等实用功能。 好了,我就在此简单介绍一下播放器的代码结构吧!播放简单来说,EasyPlayer就是一个典型的生产者、消费者模式案例,如下图所示:首先,创建音视频消费者线程。线程刚开始,会等待音视频数据帧,根据音视频相关信息,初始化Decoder和Render。EasyPlayer的视频用M原创 2017-07-04 14:15:20 · 1130 阅读 · 0 评论 -
Android H.265硬解码&EasyPlayerPro
H.265编码算法作为新一代视频编码标准,在编码效果上有了很大的进步,同样清晰度的视频,265要比264有着更低的码率。关于265对比264的优越性,网上有更专业的文章来作分析,我也仅对这两种算法略知皮毛,因此不多阐述。基于其更高的压缩比,H.265适用于安防行业再合适不过了!因为安防行业每天都有着海量的视频数据在产生,同时需要实时传输、分析、存储…在带宽和存储成本依然昂贵的今天,我们极度需要更低的原创 2017-07-05 21:09:13 · 13905 阅读 · 7 评论 -
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 · 954 阅读 · 0 评论 -
EasyPusher工程解构简析
EasyPusher主要有三部分组件组成:采集,编码,叠加,上传.在这个基础上同时支持本地存储\后台预览的功能.主要业务模块与相关类之间的关系如图所示:Created with Raphaël 2.1.0StreamActivityStreamActivity摄像头线程摄像头线程BackgroundCameraServiceBackgroundCameraService编码线程编码线程PusherP原创 2017-07-09 13:46:49 · 1178 阅读 · 0 评论 -
EasyPlayerPro基于FFMPEG实现播放同时进行录像的功能
之前有博客专门介绍了EasyPlayer的本地录像的功能,简单来说,EasyPlayer是一款RTSP播放器,它将RTSP流里的音视频媒体帧解析出来,并用安卓系统提供的MediaMuxer类进行录像.那EasyPlayerPro可以这样实现吗?答案是不太现实,因为Pro支持绝大多数的流媒体协议,并不单单是RTSP协议,包括hTTP\RTSP\RTMP\HLS\FILE等格式都支持.要将这些数据分别解原创 2017-07-09 15:56:37 · 1899 阅读 · 1 评论 -
EasyPusher/EasyRTMP摄像头偏暗的问题解决
在我们测试EasyPusher/EasyRTMP的过程中发现有些设备预览时,明显偏暗!在稍微暗点的环境中几乎很难看清东西…额,这是怎么回事呢?又是安卓设备的兼容性问题,头疼!好吧,停止抱怨,撸起袖子开始干.对,我们想到了.把摄像头的scene设置成了一个比较亮的模式对吧?下面是摄像头可能支持的模式,这么多我逐一试试:SCENE_MODE_AUTOSCENE_MODE_ACTIONSCENE_MO原创 2017-07-22 13:32:15 · 1062 阅读 · 0 评论 -
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 · 7256 阅读 · 1 评论 -
YUV格式转换、旋转
做过流媒体开发的人应该对YUV数据不陌生,YUV将视频帧编码成Y(亮度)、U(蓝色)、V(红色)三个分量,在内存中,Y分量长度为w*h,U、V分量长度一般为w/2 * h/2。基本上从摄像头采集到的视频数据都属于这种格式。在此主要介绍下YUV的一些格式间相互转换和视频帧旋转的实现。基于三个分量在内存中的排列方式,YUV又分为多种不同的格式。在工作中我遇到过最多的,有如下四种格式: - NV21原创 2016-12-23 20:13:14 · 2599 阅读 · 3 评论