Android中,我们可以直接使用MediaRecord来进行录像,但是在很多适合MediaRecord并不能满足我们的需求,比如我们需要对录制的视频加水印或者其他处理后,所有的平台都按照同一的大小传输到服务器等。用Android4.1增加的API MediaCodec和Android 4.3增加的API MediaMuxer进行Mp4视频的录制。
音视频编解码用到的MediaCodec是Android 4.1新增的API,音视频混合用到的MediaMuxer是Android 4.3新增的API。
github上十二款最著名的Android播放器开源项目-https://www.jianshu.com/p/53581512ba3f
VideoPlayerManager-https://github.com/danylovolokh/VideoPlayerManager介绍:帮助控制MediaPlayer类的项目。可以方便的在ListView和RecyclerView中使用MediaPlayer。它还能跟踪滚动列表当前可视范围最大的item,并提供回调的api。
推流拉流同时进行-https://github.com/huangjingqiang/jjdxm_ijkplayer-master
列表上自动播放视频:JiaoZiVideoPlayer,autovideoplayer播放器;
–SDK性能的指标Android:
GC:可以通过GC日志记录,Mirror GC和Full GC的频次和时间,Full GC*会造成比较明显的卡顿,需要评估
UI Loop就是VSync Loop:反映SDK对App流畅度的影响,理论上60 fps是最流畅的值。
Memory:反映SDK占用内存的大小
CPU Usage:反映SDK占用计算资源的大小
SDK性能的指标iOS:
UI Loop:反映SDK对App流畅度的影响,理论上60 fps是最流畅的值。
Memory:反映SDK占用内存的大小
CPU Usage:反映SDK占用计算资源的大小
1)影响视频清晰度的指标:帧率;码率;分辨率;量化参数(压缩比)
2)影响视频流畅度的指标:码率;帧率
3)其他重要指标,直播是流量和性能的消耗大户:耗电量;发热(不好量化,大部分情况发热和耗电量正比,可以使用耗电量暂时替代)。
短视频系统开发为了实现更好的用户体验,需要支持用户对短视频内容进行暂停、继续等操作,而且短视频内容的循环和自动滑动播放也是优化用户体验的开发重点,接下来我们就一起来看看在短视频系统开发中,以上的操作是如何实现的吧。
暂停、继续播放视频
对于短视频系统开发中短视频的暂停、播放,在空布局的播放器中加入播放按钮,初始化播放器时对布局点击事件进行处理,判断如果正在播放,点击暂停并显示按钮;反之,则进行播放,隐藏按钮,还可设置。
private void init(){
mTextureViewContainer.setOnClickListener(new OnClickListener(){
Override
public void onClick(View v){
if(getGSYVideoManager().isPlaying()){
getGSYVideoManager().pause();
mStartButton.setVisibility(View.VISIBLE);
}else{
getGSYVideoManager().start();
mStartButton.setVisibility(View.GONE);
}
}
});
}
循环、自动滑动视频播放
在短视频开发中,如果想实现短视频内容循环,则需要在播放完毕后重新播放,或者设置播放器的循环播放参数为true即可;如若想自动滑动播放下一条视频,则对视频播放回调的事件中监听完成事件,结合RecyclerView的滑动事件即可完成。
Override
public void onAutoComplete(String url,Object...objects){
super.onAutoComplete(url,objects);
if(!isLoopPlay){
if(mCurrentPosition+1<mLittleVideoAdapter.getItemCount()){
mRvLittleVideo.smoothScrollToPosition(mCurrentPosition+1);
}
}
}
短视频软件开发,实现简单的轮播图效果
一、代码示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible"content="IE=edge">
<meta name="viewport"content="width=device-width,initial-scale=1.0">
<title>轮播图效果</title>
<link rel="stylesheet"href="css/index.css">
</head>
<body>
<div class="swiper">
<div class="img_container">
<img src="image/1.png"alt="">
<img src="image/2.png"alt="">
<img src="image/3.png"alt="">
</div>
<div class="num_container">
<button>1</button>
<button>2</button>
<button>3</button>
</div>
</div>
<script>
let img_container=document.querySelector(".img_container");
let btns=document.querySelectorAll("button");
for(let i in btns){
btns<i>.onclick=function(){
//0*640
//1*640
//2*640
img_container.style.transform=translate(${-640*i}px)
;
}
}
</script>
</body>
</html>
二、样式
*{
margin:0px;
padding:0px;
}
.swiper{
width:640px;
height:320px;
/border:1px solid red;/
overflow:hidden;/超出部分隐藏/
position:relative;
}
.img_container{
width:1920px;
height:320px;
display:flex;
transition:transform 0.3s;/设置过渡效果/
}
/*.img_container:hover{
transform:translate(-640px);
}*/
.img_container img{
width:640px;
height:320px;
}
.num_container{
position:absolute;
bottom:0px;
}
.num_container button{
width:30px;
height:30px;