零、前言

1).写了一个安卓的在线播放各个电视台的小demo,放在手机和电视上都能看,但资源写在string.xml里感觉挺low
2).还是转成json吧,维护起来方便些,或放在服务端也挺好,一个一个修改感觉好枯燥,就用代码吧
3).其实这个算很简单的,只是借此复习一下流的操作字符串分割以及json的生成json的解析
4).额外说一点:这里的播放源目前都是可用的哦,使用直播流的软件就能看相应的电视台了
5).2018-10-23日更新:突然发现Vitamio也能播放本地视频,所以将本地视频的路径也转化成这种json格式

本文任务是把下列data.txt解析成json格式:如
  {"name": "CCTV1 综合HD","url": "http://112.50.243.7/PLTV/88888888/224/3221226489/index.m3u8","mdTime": "2018-10-22"},
张风捷特烈.png

data.txt
<item>CCTV1 综合HD★http://112.50.243.7/PLTV/88888888/224/3221226489/index.m3u8</item>
<item>CCTV2 财经HD★http://112.50.243.7/PLTV/88888888/224/3221226554/index.m3u8</item>
<item>CCTV-3 综艺HD★http://183.207.249.5/PLTV/3/224/3221225588/index.m3u8</item>
<item>CCTV4 中文国际★http://112.50.243.7/PLTV/88888888/224/3221226511/index.m3u8</item>
<item>CCTV-5 体育HD★http://183.207.249.15/PLTV/3/224/3221225604/index.m3u8</item>
<item>CCTV-6 电影HD★http://183.207.249.15/PLTV/3/224/3221225548/index.m3u8</item>
<item>CCTV-7 军事与农业HD★http://183.207.249.15/PLTV/3/224/3221225546/index.m3u8</item>
<item>CCTV8 电视剧HD★http://223.110.245.167/ott.js.chinamobile.com/PLTV/3/224/3221227204/index.m3u8</item>
<item>CCTV9 记录HD★http://112.50.243.7/PLTV/88888888/224/3221226566/index.m3u8</item>
<item>CCTV10 科教HD★http://112.50.243.7/PLTV/88888888/224/3221226488/index.m3u8</item>
<item>CCTV11 戏曲HD★http://112.50.243.7/PLTV/88888888/224/3221226493/index.m3u8</item>
<item>CCTV12 HD★http://112.50.243.7/PLTV/88888888/224/3221226623/index.m3u8</item>
<item>CCTV13 新闻HD★http://112.50.243.7/PLTV/88888888/224/3221226507/index.m3u8</item>
<item>CCTV14 少儿HD★http://112.50.243.7/PLTV/88888888/224/3221226497/index.m3u8</item>
<item>CCTV-15 音乐★http://183.207.249.7/PLTV/3/224/3221225568/index.m3u8</item>
<item>安徽卫视HD★http://183.207.249.15/PLTV/3/224/3221225634/index.m3u8</item>
<item>北京卫视HD★http://183.207.249.7/PLTV/3/224/3221225574/index.m3u8</item>
<item>湖南卫视 HD★http://223.110.243.173/PLTV/3/224/3221227220/index.m3u8</item>
<item>浙江卫视 HD★http://223.110.243.173/PLTV/3/224/3221227215/index.m3u8</item>
<item>青海卫视★http://183.207.249.7/PLTV/3/224/3221225580/index.m3u8</item>
<item>山东卫视★http://183.207.249.7/PLTV/3/224/3221225586/index.m3u8</item>
<item>江西卫视★http://183.207.249.15/PLTV/3/224/3221225537/index.m3u8</item>
<item>兵团卫视HD★http://v.btzx.com.cn:1935/live/weishi.stream/playlist.m3u8</item>
<item>东方卫视HD★http://111.48.34.182/huaweicdn.hb.chinamobile.com/PLTV/88888888/224/3221225810/1.m3u8?icpid=88888888&from=1&hms_devid=1143</item>
<item>河北卫视★http://183.207.249.7/PLTV/3/224/3221225602/index.m3u8</item>
<item>新疆卫视★http://183.207.249.15/PLTV/3/224/3221225523/index.m3u8</item>
<item>四川卫视★http://183.207.249.15/PLTV/3/224/3221225570/index.m3u8</item>
<item>西藏卫视★http://183.207.249.15/PLTV/3/224/3221225579/index.m3u8</item>
<item>爱情喜剧★http://183.207.249.15/PLTV/3/224/3221225525/index.m3u8</item>
<item>武林外传★http://dlhls.cdn.zhanqi.tv/zqlive/33765_6qakZ.m3u8</item>
<item>CNTV古装剧场★http://183.207.249.7/PLTV/3/224/3221225527/index.m3u8</item>
<item>动画王国HD★http://183.207.249.15/PLTV/3/224/3221225555/index.m3u8</item>
<item>海外剧场★http://183.207.249.15/PLTV/3/224/3221225547/index.m3u8</item>
<item>完美游戏★http://183.207.249.15/PLTV/3/224/3221225539/index.m3u8</item>
<item>电影轮播★http://112.50.243.7/PLTV/88888888/224/3221226670/index.m3u8</item>
<item>金鹰纪实HD★http://112.50.243.7/PLTV/88888888/224/3221226613/index.m3u8</item>

一、生成json字符串

0思路步骤:

1).新建一个maven管理的java项目,引入gson依赖
2).用文件读流+bufferd包装类一行一行读取data.txt,对每行的字符串切割
3).建一个实体类,每读一行将数据加载如实体类
4).将实体类集合输出成Json格式字符串,并通过文件写流+bufferd写出

1.新建一个maven管理的java项目,引入gson依赖
<!-- 为简化set,get,toString代码引入lombok -->
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.2</version><scope>provided</scope>
</dependency><!--gson依赖-->
<dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.8.5</version>
</dependency>
2.文件操作(小demo,异常直接抛了)
public class OnlineVideo {public static void main(String[] args) throws IOException {//读取文件String path = "I:\\Java\\SpringBoot\\small_project\\src\\main\\resources\\data.txt";BufferedReader br = new BufferedReader(new FileReader(path));ArrayList<VideoBean> videoBeans = new ArrayList<VideoBean>();String line = "";while ((line = br.readLine()) != null) {String res = line.split(">")[1].split("<")[0];VideoBean videoBean = new VideoBean();videoBean.setName(res.split("★")[0]);videoBean.setUrl(res.split("★")[1]);videoBean.setMdTime(new SimpleDateFormat("YYYY-MM-dd").format(System.currentTimeMillis()));videoBeans.add(videoBean);}br.close();String json = new GsonBuilder().create().toJson(videoBeans);String target = "I:\\Java\\SpringBoot\\small_project\\src\\main\\resources\\data.json";FileWriter fileWriter = new FileWriter(target);fileWriter.write(json);fileWriter.close();}
}
3.data.json
[{"name": "CCTV1 综合HD","url": "http://112.50.243.7/PLTV/88888888/224/3221226489/index.m3u8","mdTime": "2018-10-22"},{"name": "CCTV2 财经HD","url": "http://112.50.243.7/PLTV/88888888/224/3221226554/index.m3u8","mdTime": "2018-10-22"},{"name": "CCTV-3 综艺HD","url": "http://183.207.249.5/PLTV/3/224/3221225588/index.m3u8","mdTime": "2018-10-22"},{"name": "CCTV4 中文国际","url": "http://112.50.243.7/PLTV/88888888/224/3221226511/index.m3u8","mdTime": "2018-10-22"},{"name": "CCTV-5 体育HD","url": "http://183.207.249.15/PLTV/3/224/3221225604/index.m3u8","mdTime": "2018-10-22"},{"name": "CCTV-6 电影HD","url": "http://183.207.249.15/PLTV/3/224/3221225548/index.m3u8","mdTime": "2018-10-22"},{"name": "CCTV-7 军事与农业HD","url": "http://183.207.249.15/PLTV/3/224/3221225546/index.m3u8","mdTime": "2018-10-22"},{"name": "CCTV8 电视剧HD","url": "http://223.110.245.167/ott.js.chinamobile.com/PLTV/3/224/3221227204/index.m3u8","mdTime": "2018-10-22"},{"name": "CCTV9 记录HD","url": "http://112.50.243.7/PLTV/88888888/224/3221226566/index.m3u8","mdTime": "2018-10-22"},{"name": "CCTV10 科教HD","url": "http://112.50.243.7/PLTV/88888888/224/3221226488/index.m3u8","mdTime": "2018-10-22"},{"name": "CCTV11 戏曲HD","url": "http://112.50.243.7/PLTV/88888888/224/3221226493/index.m3u8","mdTime": "2018-10-22"},{"name": "CCTV12 HD","url": "http://112.50.243.7/PLTV/88888888/224/3221226623/index.m3u8","mdTime": "2018-10-22"},{"name": "CCTV13 新闻HD","url": "http://112.50.243.7/PLTV/88888888/224/3221226507/index.m3u8","mdTime": "2018-10-22"},{"name": "CCTV14 少儿HD","url": "http://112.50.243.7/PLTV/88888888/224/3221226497/index.m3u8","mdTime": "2018-10-22"},{"name": "CCTV-15 音乐","url": "http://183.207.249.7/PLTV/3/224/3221225568/index.m3u8","mdTime": "2018-10-22"},{"name": "安徽卫视HD","url": "http://183.207.249.15/PLTV/3/224/3221225634/index.m3u8","mdTime": "2018-10-22"},{"name": "北京卫视HD","url": "http://183.207.249.7/PLTV/3/224/3221225574/index.m3u8","mdTime": "2018-10-22"},{"name": "湖南卫视 HD","url": "http://223.110.243.173/PLTV/3/224/3221227220/index.m3u8","mdTime": "2018-10-22"},{"name": "浙江卫视 HD","url": "http://223.110.243.173/PLTV/3/224/3221227215/index.m3u8","mdTime": "2018-10-22"},{"name": "青海卫视","url": "http://183.207.249.7/PLTV/3/224/3221225580/index.m3u8","mdTime": "2018-10-22"},{"name": "山东卫视","url": "http://183.207.249.7/PLTV/3/224/3221225586/index.m3u8","mdTime": "2018-10-22"},{"name": "江西卫视","url": "http://183.207.249.15/PLTV/3/224/3221225537/index.m3u8","mdTime": "2018-10-22"},{"name": "兵团卫视HD","url": "http://v.btzx.com.cn:1935/live/weishi.stream/playlist.m3u8","mdTime": "2018-10-22"},{"name": "东方卫视HD","url": "http://111.48.34.182/huaweicdn.hb.chinamobile.com/PLTV/88888888/224/3221225810/1.m3u8?icpid\u003d88888888\u0026#038;from\u003d1\u0026#038;hms_devid\u003d1143","mdTime": "2018-10-22"},{"name": "河北卫视","url": "http://183.207.249.7/PLTV/3/224/3221225602/index.m3u8","mdTime": "2018-10-22"},{"name": "新疆卫视","url": "http://183.207.249.15/PLTV/3/224/3221225523/index.m3u8","mdTime": "2018-10-22"},{"name": "四川卫视","url": "http://183.207.249.15/PLTV/3/224/3221225570/index.m3u8","mdTime": "2018-10-22"},{"name": "西藏卫视","url": "http://183.207.249.15/PLTV/3/224/3221225579/index.m3u8","mdTime": "2018-10-22"},{"name": "爱情喜剧","url": "http://183.207.249.15/PLTV/3/224/3221225525/index.m3u8","mdTime": "2018-10-22"},{"name": "武林外传","url": "http://dlhls.cdn.zhanqi.tv/zqlive/33765_6qakZ.m3u8","mdTime": "2018-10-22"},{"name": "CNTV古装剧场","url": "http://183.207.249.7/PLTV/3/224/3221225527/index.m3u8","mdTime": "2018-10-22"},{"name": "动画王国HD","url": "http://183.207.249.15/PLTV/3/224/3221225555/index.m3u8","mdTime": "2018-10-22"},{"name": "海外剧场","url": "http://183.207.249.15/PLTV/3/224/3221225547/index.m3u8","mdTime": "2018-10-22"},{"name": "完美游戏","url": "http://183.207.249.15/PLTV/3/224/3221225539/index.m3u8","mdTime": "2018-10-22"},{"name": "电影轮播","url": "http://112.50.243.7/PLTV/88888888/224/3221226670/index.m3u8","mdTime": "2018-10-22"},{"name": "金鹰纪实HD","url": "http://112.50.243.7/PLTV/88888888/224/3221226613/index.m3u8","mdTime": "2018-10-22"}
]

二、安卓中的使用

可以放在服务器上,用网络访问,这里就放在assets目录下测试
添加依赖implementation 'com.google.code.gson:gson:2.2.4'

1.json解析的实体类
/*** 作者:张风捷特烈<br/>* 时间:2018/10/22 0022:21:03<br/>* 邮箱:1981462002@qq.com<br/>* 说明:json解析的实体类*/
public class VideoBean {/*** name : CCTV1 综合HD* url : http://112.50.243.7/PLTV/88888888/224/3221226489/index.m3u8* mdTime : 2018-10-22*/private String name;private String url;private String mdTime;public static VideoBean objectFromData(String str) {return new Gson().fromJson(str, VideoBean.class);}public static List<VideoBean> arrayVideoBeanFromData(String str) {Type listType = new TypeToken<ArrayList<VideoBean>>() {}.getType();return new Gson().fromJson(str, listType);}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public String getMdTime() {return mdTime;}public void setMdTime(String mdTime) {this.mdTime = mdTime;}
2.读取data.json,解析成实体类集合
 String json = FileHelper.get().readInAssets(this, "data.json");List<VideoBean> videoBeans = VideoBean.arrayVideoBeanFromData(json);
3.用listView展示数据:
mIdLvVideo.setAdapter(new MyLVAdapter<VideoBean>(this, videoBeans, R.layout.item_text_only) {@Overridepublic void setData(MyLVHolder holder, VideoBean data, int position) {holder.setText(R.id.id_tv_name, data.getName());}
});
listView.png


三、安卓本地视屏路径的获取即json格式转化(权限自理)

1.一个json对象:
  {"dataAdd": "1539940191","duration": 985107,"mdTime": "1539940191","mime": "video/mp4","name": "16_fcntl","size": 32926815,"url": "/storage/emulated/0/linux服务器开发一-基础视频/linux服务器开发一-基础视频5/16_fcntl.mp4"},
2.实体类:VideoBean字段
 private String name;//名称private String url;//路径private String mdTime;//修改时间private Long duration;//时常private Long size;//大小private String mime;//类型private String dataAdd;//添加的时间
3.操作媒体的内容提供者,获取视频信息,并转化为Json
@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_pic100);ButterKnife.bind(this);mList = findVideo();String json = new GsonBuilder().create().toJson(mList);FileHelper.get().writeFile2SD("VideoData.json", json);}private ArrayList<VideoBean> findVideo() {ArrayList<VideoBean> videoBeans = new ArrayList<>();//1.查询获得游标Cursor cursor = getContentResolver().query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, null, "",null, "date_added desc", null);//2.让游标移动,到尾为止while (cursor.moveToNext()) {//获取路径String filePath = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.DATA));//获取时长String duration = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.DURATION));//获取大小String size = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.SIZE));//获取mimeTypeString mime = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.MIME_TYPE));//添加时间String dataAdd = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.DATE_ADDED));//修改时间String dataMod = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.DATE_MODIFIED));//获取名称String name = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.TITLE));VideoBean videoBean = new VideoBean(name, filePath,Long.valueOf(duration), Long.valueOf(size), mime, dataAdd, dataMod);videoBeans.add(videoBean);}return videoBeans;
}
安卓视频操作.png


后记:捷文规范

1.本文成长记录及勘误表
项目源码 日期 备注
V0.1--无 2018-10-22 小案例Josn字符串的生成
V0.2--无 2018-10-23 添加本地视频路径转化为json格式的方法
2.更多关于我
笔名 QQ 微信 爱好
张风捷特烈 1981462002 zdl1994328 语言
我的github 我的简书 我的CSDN 个人网站
3.声明

1----本文由张风捷特烈原创,转载请注明
2----欢迎广大编程爱好者共同交流
3----个人能力有限,如有不正之处欢迎大家批评指证,必定虚心改正
4----看到这里,我在此感谢你的喜欢与支持

小案例Josn字符串的生成相关推荐

  1. 【小案例】字符串转换为数字数据类型的三种方法

    <script>var string="88.96"; var num=string*10; console.log(string,num,typeof num);&l ...

  2. 微信小程序业务-字符串生成二维码(weapp-qrcode)

    微信小程序业务-字符串生成二维码(weapp-qrcode) 前言 邂逅weapp-qrcode 基本使用 详细参数 小程序组件中使用 image属性详解 想使用网络图片? 参考地址 前言 在小程序项 ...

  3. php 快递单号生成规则,Thinkphp 生成订单号小案例

    Thinkphp 生成订单号小案例小伙伴们在日常的商城项目开发中,都会遇到订单号生成的问题,今天呢思梦PHP就带领大家去解读一下生成订单号的问题!首先,订单号我们要明确它有有3个性质:1.唯一性 2. ...

  4. Canvas绘图在微信小程序中的应用:生成个性化海报

    Canvas绘图在微信小程序中的应用:生成个性化海报 如极客时间的一些实现案例: 基础语法 Canvas本质是一个可以使用脚本(通常为JavaScript)来绘制图形的 HTML 元素,默认大小为30 ...

  5. Spring IOC与DI、反射的理解 含小案例说明

    阅览了很多篇博文,对于Spring IOC和DI看到很多人介绍的感觉都很含糊,读完之后还是觉得混淆的不行,也有的人认为DI是IOC的另一种说法-emm,可能个人理解不同吧,我的观点并不然.但这种东西, ...

  6. Unity制作随机数字抽奖小案例

    Unity制作随机数字抽奖小案例 1. 搭建 UI 界面 2. 实现思路 2-1. 创建 RandomNumber 类 [挂载在每个抽奖格子(Numbers下面的Image)] 2-2. 创建 Sta ...

  7. SSM实现登录注册的小案例(手把手喂饭)

    SSM实现登录注册的小案例 温馨提示 为了您有更好的阅读体验,原文链接如下,长理小生:https://lixingweiblog.github.io/Pages SpringMVC+Spring+My ...

  8. VUE入门+5个小案例

    本文是我心血来潮学习Vue框架所做的笔记,也供童鞋们学习参考.作为后端的开发人员,学习前端的Vue框架只是单纯地去了解下前端框架的内容,所以并没有深入地去学习,因此本文只适合Vue入门的童鞋哦.由于我 ...

  9. 分析初识vue小案例

    前言 我们已经写好了一个案例:初识vue小案例 接下来我们就分析初识vue小案例 容器和vue实例是一一对应的! 容器和vue实例应该是一一对应的,不允许出现一对一或者一对多 下面是一个一个容器对多个 ...

最新文章

  1. C++拾趣——C++11的语法糖auto
  2. 关于IPC入侵的一些细节
  3. RTCPeerConnection.onicecandidate属性
  4. python 存储图片 alpha_保存时Matplotlib图形面颜色alpha(背景色、透明度)
  5. python中的def语句输出1000以内的回文_各种方法测试回文的性能[Python]
  6. Android开发学习路线图
  7. ESP8266串口转wifi模块AT指令调试TCP通信
  8. 微信小程序强制更新版本
  9. 华氏温度转换为摄氏温度,c语言实例一
  10. 年轻人,不要太浮躁,静下心来听听【钢琴曲】
  11. [一亩三分地] 答题答案总结
  12. 如何建立个人网站服务器篇
  13. 当python遇上echarts (三)绘制3D图表
  14. Django 基础(6)-路由Routers-SimpleRouter-DefaultRouter、 action装饰器、URL路径参数
  15. fairyGUI的学习记录2
  16. 文件属性(三)——st_uid属性和st_gid属性
  17. 学习笔记:python爬虫(第一次写笔记,多多包涵)
  18. 打开工控机电源而计算机没有反应,工控机的维修方法
  19. Android加密算法
  20. 查询sick编码器型号是否支持hiperface接口方法,软件支持所有带此接口sick编码器

热门文章

  1. 基于Springboot+vue电影院会员管理系统(源代码+数据库+文档)025
  2. cadence allegro番外:制作含表贴焊盘封装
  3. Fiddler抓包实验
  4. 论媒体融合之运营融合
  5. 自定义springboot组件--基于模板模式对原生springboot的rabbitmq组件进行扩展
  6. 人,就这一辈子,开心就好 (转)
  7. python内置函数sum_Python内置函数sum____用来返回数值型序列中所有元素之和。
  8. springboot+uniapp(vue) 微信公众号h5开发
  9. Shell编程面试题4_批量创建Linux用户并设置密码
  10. 微博服务器又炸了,快来看看如何一步步构建高并发的网站