admin管理员组文章数量:1566678
开源万能解码框架解决
1.ffmpeg
多媒体视频处理工具FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。
国内很多手机客户端都是集成这个开源框架
http://www.oschina/p/ffmpeg/
没有Android版本
2.VLC
VLC多媒体播放器(最初命名为VideoLAN客户端)是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影音光盘及各类流式协议。它也能作为unicast或 multicast的流式服务器在IPv4或 IPv6的高速网络连接下使用。它融合了FFmpeg计划的解码器与libdvdcss程序库使其有播放多媒体文件及加密DVD影碟的功能。
官网:http://www.videolan/
有Android版本
http://www.videolan/vlc/download-android.html
3.Vitamio 万能解码框架,在Android和IOS平台上直接使用。
Vitamio 能够流畅播放720P甚至1080P高清MKV,FLV,MP4,MOV,TS,RMVB等常见格式的视频,还可以在 Android 与 iOS 上跨平台支持 MMS, RTSP, RTMP, HLS(m3u8) 等常见的多种视频流媒体协议,包括点播与直播。
里面封装了ffmpeg
集成Vitamio项目中来
1.把案例运行起来
2.关联vitamio库
3.当系统播放器播放出错的时候,跳转到VitamioVideoPlayer万能播放器中播放
4.重新activity_vitamio_video_player.xml,里面VideoView改成Vitamio的VideoView,并且自定义VitamioVideoView
5.初始化万能解码框架
Vitamio.isInitialized(getApplicationContext());
6.到Vitamio的包
7.把Vitamio用到的权限拷贝到功能清单文件
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
8.把Vitamio需要配置的Activity拷贝到当前工程的功能清单文件
<!-- Don't forgot InitActivity -->
<activity
android:name="io.vov.vitamio.activity.InitActivity"
android:configChanges="orientation|screenSize|smallestScreenSize|keyboard|keyboardHidden|navigation"
android:launchMode="singleTop"
android:theme="@android:style/Theme.NoTitleBar"
android:windowSoftInputMode="stateAlwaysHidden" />
软件解码
硬件解码,通常是在CPU芯片集成- 系统的API
Android 开发者文档指南https://developer.android.google/guide/topics/media-apps/media-apps-overview?hl=zh-cn
安卓前后端连接教程
-
首先需要安装postman软件,用于测试后端接口
-
用IEDA打开后端的工程并运行,观察controller文件夹下的文件,controller这一层是接受前端请求的。这里按照一个数据表一个文件进行分类。
-
后端接口的类别主要有3种,根据接口函数的参数前方@的不同分别@RequestBody、@RequestParam和上传文件型。如下图所示
-
先学会这3种不同的类型在postman中如何测试连接通信,然后再从普遍性到特殊性,在AS里面进行前后端通信。
共同的地方:不管是哪种类型的,都是用POST方法发送,并且在地址栏里填写接口的地址方式都是一样的,有2级路径,如下图所示
不同之处:
类别1——Body型:以Comment中的add接口为例子
先去resources目录下的mapper目录下打开对应的Mapper.xml文件夹,这里面写的是操作数据库时的SQL语句。可以看到这里有个id为add的语句块,这是add接口收到请求后会执行的SQL语句。
在postman中,先选择Body,然后点击raw,再将格式切换为JSON,在编辑区写出JSON格式的文本,JSON文本中的键名就是SQL语句中#{}里面的变量名,键值就是你要传进去的变量值,这里一定要打开数据库看清楚对应字段的类型。如下图所示:
确认无误后点击SEND按钮,会发现IDEA运行日志中出现刚刚进行的SQL操作的结果,刷新数据库会发现该记录被添加到数据库中了,这样就成功了!(因为这是insert操作,接口函数的返回类型是void,所以postman这边不会有结果显示)
类型2——Param类型:以comment中的listByUid接口为例
这种类型非常简单,只需要看controller层就行了!在postman中先点击Params,然后在下面添加KEY,这里的KEY就是接口函数的参数,在VALUE里填入你需要传入的值。
确认无误后点击send按钮,可以看到IDEA运行日志里出现了SQL查询结果,postmna这边的结果区也显示出了JSON格式的结果,这样就成功了!(注意,这里返回的是JSON数组,后面在AS里前端获取返回值时对数组or单个元素的操作是不同的)
类型3——上传文件型:以comment的upload_img接口为例子
这种类型的接口需要看controller层和service层,请同时打开service文件夹下的impl文件夹下的对应的Service文件!下图所示是service层中找到的对应操作的函数,可见文件会被上传到后端工程文件夹下的upload文件夹下的comment_img文件夹下
打开postman,选择POST方法,地址栏输入对应的接口的路径,然后选择Body,选择form-data,在KEY这边先选择类型为File。
之后再在KEY里填入file,VALUE里选择一个你要上传的文件
确认无误后,点击send按钮,可以看到postman里收到返回的信息,code200,并且body这边有上传后的文件在服务器上的文件名,这样就成功了!
我们可以去comment_img文件夹下看看有没有刚刚上传的文件,果然是有的,hhh
- 在android studio里写发送post请求的代码。postman的普遍性规律测试通过后,AS里使用后端接口的道理是一样的,postman里怎么发送post请求,AS也跟着学就行了!
三种类型的共同点:以下是代码模板
上图例子是按钮按下后发送一个POST请求,首先要创建一个Thread,网络请求操作较慢,所以要在子线程里操作,在主线程里发送网络请求会造成堵塞,APP可能会崩溃的。其次是网络请求的操作要放在try语句里,毕竟网络通信不一定成功的。最后需要注意的是子线程不能直接更新UI,要在子线程里操作UI,需要借助runOnUiThread
不同点:
类型1——Body型:以Comment中的add接口为例子
我们知道它在postman中是这样发送post请求的
转换为AS发送请求的代码如下所示,红框中是类型1——body型发送的请求的方式。(因为这个后端接口没有返回值,所有不需要考虑获取后端的返回值)
运行一下APP点击对应的按钮发送POST试试,看到IDEA和数据库这边都有反应,成功啦!
类型2——Param型:以comment中的listByUid接口为例
在postman中是这样发送post请求给这个接口的
那么在AS中,代码如下图所示,如下图所示进行发送:
运行APP,点击对应的按钮试试,发现AS的日志里成功打印出从后端获取过来的值,成功!
类型3——上传文件型:以comment的upload_img接口为例子
在postman中是这样发送请求的
切换到AS,如下图代码所示将文件上传到后端接口上
运行APP点击相应的按钮确认一下,看看日志,文件夹里都有了,说明成功!
文件上传注意事项:
- 大文件上传比较慢,前端应该想办法控制一下,在文件上传成功前不要让用户觉得好像没在上传,于是狂点上传按钮导致上传了好几份文件,上传的过程以及上传成功后最好加一些UI上的提示。
- 上传文件的接口只是上传文件而已,数据库里保存文件路径的字段还需要调用其他相应的接口去修改哦!
- 小心安卓权限问题,这里打开需要上传的文件时是需要存储空间权限的!
还有这个路径只是个例子,在vlog++项目中需要用下图所示的Environment.getExternalStorageDirectory()来获取文件所在的路径
其他注意事项:
- 后端接口返回值都是JSON格式的,有的是JSON数组,有的是单个JSON元素。前端在接收后端返回过来的JSON文本后将其转换为JSON时需要小心这一点。
字符串转JSON数组后再遍历取值的方法:
字符串直接转为JSON对象进行取值的方法
- 有时候有些操作需要调用多个接口,因为1个接口不够满足需求。
情况1:先调用接口A,接口A操作成功后才能调用接口B,有严格的先后关系
不需要创建2个子线程,在一个子线程里可以先后发送POST请求
情况2:接口A和接口B可以同时操作,没有先后关系
如下图所示,创建两个并列的线程,即可同时发送多个POST给不同的后端接口
版权声明:本文标题:山东大学项目实训十五——开源万能解码框架解决 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1726868258a1087695.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论