android开发之音视频(一)

转载请标明出处:
http://blog.csdn.net/AnalyzeSystem/article/details/78489729
本文出自Analyzesystem的博客

做android端音视频项目开发有几个月了,来做个小结


开发框架选取

android手机有很多自带播放器不支持流媒体播放、音频格式等因素,为此开发需要采用成熟开源框架或自己修改FFmpeg,长为人熟知的开源框架有一下几款:

  • vitamio
  • SmarterStreaming
  • GSYVideoPlayer
  • PLDroidPlayer
  • ijkplayer
    …………………….

    vitamio 要收费,七牛PLDroidPlayer 修改底层源码不方便(由于项目是视频监控行业,很多定制需求,要求能高度定制底层源码),最后采取bilibili开源的ijkplayer,GSYVideoPlayer虽然封装的很好,但是不适合手里项目。

关于ijkplayer so库编译,最好别再window下进行,容易出现符号占位符等问题。编译好后分别在 对应目录生成三个so库和一个.aar文件,依赖如果出现.aar 相关的类找不到(aar没有更新),而自己又确定有的情况下,可参考tip


gradle.properties

/***true:启用 build cache,反之禁用。如果这个参数未设置,默认是禁用 build cache.***/

android.enableBuildCache= 

当你遇到视频播放出来了但没声音,多数是音频格式支持问题,默认脚本没有添加太多的格式支持,需要自己修改,具体操作可参考issues

ijkplayer demo提供的仅TextureView渲染的才能截图,产品要求视频仿萤石云,能手势缩放拖拽、截图、、录像、语音对讲等功能,没办法视频播放器控件只能自己想办法,所幸找到了一个开源库ScaleVideoView

https://github.com/yushiwo/ScaleVideoView

视频相关功能博主这儿有专业人员修改ijkplayer源码,在IMediaPlayer为博主提供可调用函数以及相关接口监听器,修改ScaleVideoView源码以及so库依赖,添加相应函数调用即可。

Tip: 未播放过的视频也可以通过修改ijkplayer底层实现获取第一帧图(用于设置封面CoverView)

关于视频相关的控制统一称为控制器,控制器相关自动隐藏显示动画相关代码块如下

import android.view.View;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;

/**
 * Created by idea on 2017/10/23.
 */

public class TranslateAnimationHelper {

    private static void translateX(View view, int translateStartX,int translateEndX){
        Animation animation = new TranslateAnimation(translateStartX*view.getMeasuredWidth(), translateEndX*view.getMeasuredWidth(), 0, 0);
        animation.setDuration(500);
        animation.setRepeatCount(0);//动画的重复次数
        animation.setFillAfter(true);//设置为true,动画转化结束后被应用
        view.startAnimation(animation);//开始动画
    }

    private static void translateY(View view,int translateStartY,int translateEndY){
        Animation animation = new TranslateAnimation(0, 0,translateStartY*view.getMeasuredHeight(),translateEndY*view.getMeasuredHeight());
        animation.setDuration(500);
        animation.setRepeatCount(0);//动画的重复次数
        animation.setFillAfter(true);//设置为true,动画转化结束后被应用
        view.startAnimation(animation);//开始动画
    }

    public static void hideTopView(View view){
        TranslateAnimationHelper.translateY(view,0,-1);
    }

    public static void showTopView(View view){
        TranslateAnimationHelper.translateY(view,-1,0);
    }

    public static void hideBottomView(View view){
        TranslateAnimationHelper.translateY(view,0,1);
    }

    public static void showBottomView(View view){
        TranslateAnimationHelper.translateY(view,1,0);
    }

    public static void hideLeftView(View view){
        TranslateAnimationHelper.translateX(view,0,-1);
    }

    public static void showLeftView(View view){
        TranslateAnimationHelper.translateX(view,-1,0);
    }

    public static void hideRightView(View view){
        TranslateAnimationHelper.translateX(view,0,1);
    }

    public static void showRightView(View view){
        TranslateAnimationHelper.translateX(view,1,0);
    }

    public static void toggleVisibility(View left,View top,View right,View bottom,boolean isHide){
        if(isHide){
            hideView(left,top,right,bottom);
        }else{
            showView(left,top,right,bottom);
        }
    }

    private static void showView(View left, View top, View right, View bottom) {
        if(left!=null){
            hideLeftView(left);
        }

        if(top!=null){
            hideTopView(top);
        }

        if(right!=null){
            hideRightView(right);
        }

        if(bottom!=null){
            hideBottomView(bottom);
        }
    }

    private static void hideView(View left, View top, View right, View bottom) {
        if(left!=null){
            showLeftView(left);
        }

        if(top!=null){
            showTopView(top);
        }

        if(right!=null){
            showRightView(right);
        }

        if(bottom!=null){
            showBottomView(bottom);
        }
    }


}

录像回放关联的时间轴控件,采用开源控件TimeRule,不过源码需要二次修改


// https://github.com/dingyongxiang/TimeRulers

最终实现效果图



本篇仅为概述,如有雷同请忽略,下一篇博客进入主题..

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值