本文转自:http://blog.csdn.net/jyt0551/article/details/56942795 对于一个裸的RTSP URL,存放在播放列表上略显单调与枯燥.大家可以看到EasyPlayer在播放完视频后会保存一帧图片到列表上. 那么这个功能是如何做到的呢? 如果自己实现解码的话,比如使用ffmpeg解码,这种情况下,将视频帧解码,再编码成jpeg保存下来,应该不是什么难事.相信大多数播放器都是这样处理的. H264格式的视频码流=>解码=>YUV格式的视频帧=>压…
一般对于一个播放器,应该支持如下几种显示模式: 等比例,最大化区域显示,不裁剪 等比例,最大区域显示,裁剪 拉伸显示,铺满全屏 要实现这几种显示模式,其实只要对播放控件的布局进行些许调整即可.那EasyPlayer是怎么实现的呢? EasyPlayer使用一个PlayFragment进行视频播放.该类实现了一个setScaleType的方法来进行显示模式设定(或切换). public void setScaleType(@IntRange(from = ASPACT_RATIO_INSIDE,…
1.儿子Activity在启动过程中的流程组件 在Android Activity启动过程http://blog.csdn.net/jltxgcy/article/details/35984557一文中,我们已经具体分析了Activity的启动过程,对于子Activity组件在进程内的启动过程.我们仅仅分析它们之间的不同. 主要是2处.1是不须要创建新的任务栈.2是不须要创建新进程和子线程.表如今上一篇文章的总图中.就是没有第4步.并且第5步指向的Laucher子线程. 第1点,体如今例如以下代…
本文为博主原创,未经允许不得转载: 在应用ajax的过程中,当我们再前台提交请求的时候,如果服务端响应事件比较长,就会导致需要等很长时间在前台才能接受到服务端返回的 响应结果,往往会导致用户重复点击按钮,进行重复请求,如何可以避免这种情况发生,ajax提供了一个beforeSend属性,用这个既可以避免这种 情况发生. 用这个属性可以定义客户端向服务端请求过程中的事件,比如在请求过程中禁用请求按钮的属性,或定义请求加载状态等, 实现的代码如下: function exportData(){ $.…
本文转自EasyDarwin开源团队成员John的博客:http://blog.csdn.net/jyt0551/article/details/73310641 EasyPlayer 是一款小而美的RTSP安卓播放器.具有起搏快.延迟底.兼容性好的特点,而且支持抓拍.录像等实用功能. 好了,我就在此简单介绍一下播放器的代码结构吧! 播放 简单来说,EasyPlayer就是一个典型的生产者.消费者模式案例,如下图所示: 首先,创建音视频消费者线程.线程刚开始,会等待音视频数据帧,根据音视频相关信…
最近在EasyDarwin开源群里,有不少用户私信需求,要做一种能够多端同屏的系统,细分下来有屏幕采集端和同屏端,屏幕采集端细想也就是一个低延时的流媒体音视频服务器,同屏端也就是一个低延时的播放器,负责播放屏幕采集端的视频,实现操作的实时同屏,这种服务可以非常广泛应用于教育课堂(教师进行同步操作演示教学,不仅一个教室的学生可以同时上课,多个教室也可以由一个老师同时上课了).无纸化会议(主讲人进行演讲稿的演示与操作,与会人员进行同步观看,再配合级联服务器,可以实现多地区的同步文档共享了).广告投放…
本文转自EasyDarwin开源团队成员Penggy的博客:http://www.jianshu.com/p/feeb107b6657 最近遇到在 iOS 平台上实时播放 AAC 音频数据流, 一开始尝试用 AudioQueue 直接解 AAC 未果, 转而将 AAC 解码为 PCM, 最终实现了 AAC 实时流在 iOS 平台下的播放问题. AAC 转 PCM 需要借助解码库来实现, 目前了解到有两个库能干这个事 : faad 和 ffmpeg. faad 算是轻量级的解码库, 编译出来全平台…
package com.developmenttools.customui.activity; import java.util.HashSet;import java.util.Set; import com.developmenttools.listener.HomeClickListener;import com.yzx.tools.CustomLog; import android.app.Activity;import android.content.BroadcastReceiver…
可以明确,现在没有直接方法可以获得ListView中每一行EditText的值. 解决方案:重写BaseAdapter,然后自行获取ListView中每行输入的EditText值. 大概算法:重写BaseAdapter.getView函数,用一个数组存储EditText中的值,根据position即数组下标,在getView中动态更新EditText和动态获取EditText中的值.因为ListView中的item是复用的,如果不动态清空或动态获取EditText中值,就会出现数据紊乱,或者没数…
一.前提条件: 已经部署好了Android UiAutomator测试环境. 二.在部署Genymotion时遇到了两类问题: 1.通过eclipse打开一个模拟设备,然后将编译好的jar包push到手机/data/local/tmp/目录时报错: G:\adt-bundle-windows-x86-20140702\android-workspace\Demo1>adb push G:\adt-bundle-windows-x86-20140702\android-workspace\Demo…