Android中视频播放器JCVideoPlayerStandard
来源:互联网 发布:苹果打碟软件 编辑:程序博客网 时间:2024/06/05 06:55
JCVideoPlayerStandard是一个使用很简单的视频开源库,而且功能很强大,3行代码实现简单的视频播放
特征:
- 视频全屏和浮动小窗口
- 完全定制ui
- 在
ListView
,ViewPager
和ListView
,ViewPager
和Fragment
其他嵌套片段和视图的情况下,它工作得很好 - Gestrues修改进度和音量
- 适应屏幕尺寸,其中至少视频的宽度或长度是自适应的,而另一个在屏幕上居中
- 进入或退出全屏时不会打扰或改变播放状态
- 重力传感器全自动全屏
- 具有本地视频控制的WebView
- 支持https和rtsp
- 小于100kb
GitHub:https://github.com/lipangit/JieCaoVideoPlayer
效果图(在Listview显示每个视频): 结构图:
还是相同的套路,先使用okhttp获取到json数据,然后解析json数据显示到listview上,这里会使用到okhttp(网络请求库)、Picasso(图片缓存库)和jiecaovideoplayer(视频播放库)
1、导入相应的库
okhttp
Picasso
jiecaovideoplayer
2、activity_main布局添加listview
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.wdl.video_demo.MainActivity"> <ListView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/lv" /></LinearLayout>
3、创建listview的item布局lv_item.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <fm.jiecao.jcvideoplayer_lib.JCVideoPlayerStandard android:layout_marginTop="5dp" android:id="@+id/videoplayer" android:layout_width="match_parent" android:layout_height="200dp"/></LinearLayout>
4、MainActivity.java
public class MainActivity extends AppCompatActivity { public ListView lv; String date; public video_item video; public ArrayList<Map<String, Object>> list = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //listview控件 lv = (ListView) findViewById(R.id.lv); //获取到json数据 initdate(); } private void initdate() { list.clear(); //线程 new Thread(new Runnable() { @Override public void run() { OkHttpClient okHttpClient=new OkHttpClient(); //服务器返回的地址 Request request=new Request.Builder() .url("http://192.168.1.6:8080/date.json").build(); try { Response response=okHttpClient.newCall(request).execute(); //得到数据 date=response.body().string(); //打印出是否得到数据,因为线程中无法执行主线程操作所以我们使用handler Message mes=new Message(); mes.what=2; handler.sendMessage(mes); //解析json数据 JsonJX(date); } catch (IOException e) { e.printStackTrace(); } } }).start(); } public void JsonJX(String date) { //数据是否为空 if (date != null) { try { //数据的解析 JSONObject video_object = new JSONObject(date); String flag = video_object.getString("flag"); if (flag.equals("success")) { JSONArray array = video_object.getJSONArray("activity"); for (int i = 0; i < array.length(); i++) { JSONObject object = array.getJSONObject(i); String video_titie=object.getString("video_title"); String video_url=object.getString("video_url"); String video_pic=object.getString("video_pic"); //存入Map Map<String,Object> map=new HashMap<>(); map.put("title",video_titie); map.put("url",video_url); map.put("pic",video_pic); list.add(map); } } //调用适配器 Message mes=new Message(); mes.what=1; handler.sendMessage(mes); } catch (JSONException e) { e.printStackTrace(); } } else { Message mes=new Message(); mes.what=3; handler.sendMessage(mes); } } public Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what){ case 1: video=new video_item(MainActivity.this,list); lv.setAdapter(video); break; case 2: Log.i("TAG","-------------"+date); break; case 3: Toast.makeText(MainActivity.this,"数据是空的!",Toast.LENGTH_LONG).show(); break; } } }; //监听返回键如果不写视频播放在全屏时点击返回则直接退出. @Override public void onBackPressed() { if (JCVideoPlayer.backPress()) { return; } super.onBackPressed(); } @Override protected void onPause() { super.onPause(); JCVideoPlayer.releaseAllVideos(); }}
5、创建适配器video_item
public class video_item extends BaseAdapter { public Context con; public ArrayList<Map<String,Object>> list; public LayoutInflater inflater; public video_item(Context context, ArrayList<Map<String,Object>> list){ this.con=context; this.list=list; this.inflater=LayoutInflater.from(con); } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @TargetApi(Build.VERSION_CODES.LOLLIPOP) @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView==null){ holder=new ViewHolder(); convertView=inflater.inflate(R.layout.lv_item,null); holder.jcVideoPlayerStandard= (JCVideoPlayerStandard) convertView.findViewById(R.id.videoplayer); convertView.setTag(holder); }else{ holder= (ViewHolder) convertView.getTag(); }//加载视频 holder.jcVideoPlayerStandard.setUp(list.get(position).get("url").toString(), JCVideoPlayerStandard.SCREEN_LAYOUT_NORMAL, list.get(position).get("title").toString()); //判断获取的图片是否为空 if (TextUtils.isEmpty(list.get(position).get("pic").toString())){ //空时 Picasso .with(con) .cancelRequest(holder.jcVideoPlayerStandard.thumbImageView); holder.jcVideoPlayerStandard.thumbImageView. setImageDrawable(con.getResources(). getDrawable(R.mipmap.f));//当图片为空时显示的图片 }else { //这需要的图片是显示在视频没播放的情况下显示的图片 Picasso .with(con) .load(list.get(position).get("pic").toString()) .placeholder(con.getResources().getDrawable(R.mipmap.timg))//图片加载中显示 .into(holder.jcVideoPlayerStandard.thumbImageView); } return convertView; } class ViewHolder{ JCVideoPlayerStandard jcVideoPlayerStandard; }}
最后一步网络权限添加:
<uses-permission android:name="android.permission.INTERNET" />
阅读全文
0 0
- Android中视频播放器JCVideoPlayerStandard
- Android,JCVideoPlayerStandard,节操,视频播放
- JCVideoPlayerStandard的视频播放
- Android中播放视频
- android中播放视频
- Android中使用SurfaceView视频播放器
- Android中使用SurfaceView视频播放器
- Android中使用SurfaceView视频播放器
- Android中自定义VideoView视频播放器
- Android 视频播放器
- android 视频播放器
- android视频播放器
- Android 视频播放器
- android 视频播放器
- android视频播放器
- Android视频播放器
- Android视频播放器
- Android--视频播放器
- WOJ1064-What is Left
- EVC
- Array对象的方法实现(6)----Array.prototype.indexOf(实现常规参数的功能)
- SKU组合查询算法代码-实例二
- 不留痕迹的清除部分history历史命令记录
- Android中视频播放器JCVideoPlayerStandard
- 1017:字符串正反连接
- CCF试题——相邻数对
- 已收录办公界黑马,实用的pdf在线转换器
- God bless me
- torch for Mac OS X安装
- 刘晓庆8段感情都传奇, 当过小三为姜文掏心掏肺现得富商老公进军微电商!
- 装饰器
- HDU 2050 折线分割平面(动态规划(DP) 递推)