现在的Android智能手机都会提供视频的功能。大部分的应用中,视频分享已成为主要的信息载体。2020年,视频将占到数据中心和终端用户传输总流量的85%,比如抖音,快手等都是用户量非常大的视频应用。由此可见视频服务的重要性。
目录
二、实践案例(视频播放)
(一) 视频服务开发及详解
-
安卓开发视频服务是一种为安卓移动设备开发视频播放、上传、下载等功能的服务。这种服务可以让用户方便地观看、上传和下载视频,并可以为用户提供更好的用户体验。
视频服务通常包括以下功能:
- 视频播放器:一种可用于播放视频文件的应用程序,支持多种视频格式,例如MP4,
-
AVI等。
2、视频上传:一个应用程序,允许用户将视频文件上传到云服务或服务器上,以与其他用户共享。
3、视频下载:用户可以通过应用程序下载喜欢的视频文件到他们的设备上离线观看。
4、视频库:一个视频库可以为用户提供许多不同主题的视频和频道,并可以根据用户喜好进行个性化推荐。
5、推荐引擎:可以通过收集和分析用户的数据并挖掘其兴趣和需求,来为他们推荐更好的视频和频道,并为他们个性化定制服务,提高用户留存和使用量。
以上这些功能都是安卓开发视频服务的重要组成部分,也是开发者在开发视频应用程序时需要考虑和实现的功能。
- Android视频服务优缺点
-
优点:
1. 视频服务的需求量很大,可以满足用户在观看、上传、下载等方面的需求,因此开发安卓视频服务应用具有很大的商业价值。
2. 安卓视频服务应用程序易于安装,用户可以在自己的设备上快速安装并使用。
3. 安卓视频服务应用程序具有更高的开放性和自由度,开发者可以自由选择视频播放器、服务平台、数据存储等不同的组件实现不同的功能。
4. 安卓视频服务应用程序具有更高的可定制性,可以将应用程序的UI和功能按照不同的业务需求进行定制。
5. 安卓视频服务应用程序通常具有更高的社交互动性,可以通过社交分享、评论、点赞等功能增加用户粘性,提高用户留存率。
缺点:
1. 安卓视频服务应用程序需要考虑兼容性问题,因为不同的安卓设备硬件、软件版本等因素可能会影响应用程序的运行效果。
2. 安卓视频服务应用程序需要处理大量的视频数据,需要考虑数据传输、存储、管理等方面的问题。
3. 安卓视频服务应用程序需要考虑法律和版权问题,为了避免违法和侵权的行为,应该采取一定的版权保护措施。
4. 安卓视频服务应用程序需要考虑用户体验问题,因为不同用户对视频服务的需求和偏好可能不同,需要针对不同用户提供不同的服务。
二、实践案例(视频播放)
播放视频文件其实并不比播放音频文件复杂,主要是使用VideoView类来实现的。这个类将视频的显示和控制集于一身,使得我们仅仅借助它就可以完成一个简易的视频播放器。ViedoView的用法和MediaPlayer也比较类似,主要有以下常用方法:
方法名 功能描述
setVideoPath()
设置要播放的视频文件的位置
start()
开始或继续播放视频
pause()
暂停播放视频
resume()
将视频重头开始播放
seekTo()
从指定的位置开始播放视频
isPlaying()
判断当前是否正在播放视频
getDuration()
获取载入的视频文件的时长
- 视频服务开发及详解
-
下面我们通过一个实际的例子来学习以下,新建PlayVideoTest项目,然后修改activity_main.xml中的代码,如下所示:
-
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/play" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Play" /> <Button android:id="@+id/pause" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="pause" /> <Button android:id="@+id/replay" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="replay" /> </LinearLayout> <VideoView android:id="@+id/video_View" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>
在这个布局文件中,首先放置了3个按钮,分别用于控制视频的播放、暂停和重新播放。然后在按钮下面又放置了一个VideoView,稍后的视频就将在这里展示。
接下来修改MainActivity中的代码,如下所示:
-
public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button mPlay; private Button mPause; private Button mReplay; private VideoView mVideoView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){ ActivityCompat.requestPermissions(MainActivity.this,new String[]{ Manifest.permission.WRITE_EXTERNAL_STORAGE},1); } else{ initVideoPath(); } } private void initVideoPath() { File file = new File(Environment.getExternalStorageDirectory(),"movie.mp4"); mVideoView.setVideoPath(file.getPath()); //指定视频文件的路径 } @Override public void onRequestPermissionsResult (int requestCode, String[] permissions, int[] grantResults) { switch (requestCode) { case 1: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { initVideoPath(); } else { Toast.makeText(this, "拒绝权限将无法使用程序", Toast.LENGTH_SHORT).show(); finish(); } break; default: } } private void initView() { mPlay = (Button) findViewById(R.id.play); mPause = (Button) findViewById(R.id.pause); mReplay = (Button) findViewById(R.id.replay); mVideoView = (VideoView) findViewById(R.id.video_View); mPlay.setOnClickListener(this); mPause.setOnClickListener(this); mReplay.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.play: if (!mVideoView.isPlaying()){ mVideoView.start(); //开始播放 } break; case R.id.pause: if (!mVideoView.isPlaying()){ mVideoView.pause(); //暂停播放 } break; case R.id.replay: if (!mVideoView.isPlaying()){ mVideoView.resume(); //重新播放 } break; } } @Override protected void onDestroy() { super.onDestroy(); if(mVideoView!=null){ mVideoView.suspend(); } } }
这部分代码相信你理解起来很轻松,首先在onCreate()方法中同样进行了一个运行时权限处理,因为视频文件将会放在SD卡上。当用户同意授权了之后就会调用initVideoPath()方法来设置视频文件的路径,这里我们需要事先在SD卡的根目录下放置一个名为movie.mp4的视频文件。
下面看一下各个按钮的单击事件中的代码。当点击Play按钮时会进行判断,如果当前并没有正在播放视频,则调用start()方法开始播放。当点击pause按钮时会判断,如果当前视频正在播放,则调用pause()方法暂停播放。当点击replay按钮时会判断,如果当前视频正在播放,则调用resume()方法从头播放视频。
最后在onDistory()方法中,我们还需要调用一下suspend()方法,将VideoView所占用的资源释放掉。
另外,仍然始终要记得在AndriodManifest.xml文件中声明用到的权限,如下所示:
-
现在将程序运行到手机上,会先弹出一个权限申请对话框,同意授权之后点击一下play按钮,就可以看到视频已经开始播放了,如下图所示:
-
上图为VideoView播放视频的效果,点击pause按钮可以暂停视频的播放,点击replay按钮可以从头播放视频。
另外需要注意,VideoView并不是一个万能的视频播放工具类,它在视频格式的支持以及播放效率方面都存在着较大的不足。所以,如果想要仅仅使用VideoView就编写出一个功能非常强大的视频播放器是不太现实的。但是如果只是用于播放一些游戏的片头动画,或者某个应用的视频宣传,使用VideoView还是绰绰有余的。