直接切入主题,要实现的功能是:
1、ios视频音频边缓存边播放,缓存时可以在已下载的部分拖拽进度条。
2、缓存到一半退出,再次播放同一地址的视频时,视频继续下载,并且缓存进度已经走到上一次下载的位置。
3、无论是下载到一半退出还是下载完退出,已缓存的数据都存到自己指定的一个路径。如果已下载完,下次播放时可以不再走网络,直接播放本地文件。
4、一个有总时间,缓冲进度,播放进度的sliderbar。
(具体效果看唱吧4.1版本以后的视频效果吧)
用到的几个类:
1、ASIHttpRequest
2、MPMoviePlayerController
3、HTTPServer(https://github.com/robbiehanson/CocoaHTTPServer)
灵感来源是这篇文章,http://hi.baidu.com/suifeng_89/item/603cb0b95bb796ff62388e88
实现步骤:
1、先开一个request去下载要播放的视频文件
2、在本地开一个http server,拼一个本地地址(http://127.0.0.1:xxxx/xxx.mp4),丢给MPMoviePlayerController播放。
3、本地的server当收到请求时去那个正在下载的文件中读数据即可。
断点下载全由ASIHttpRequest实现了,缓冲的效果用的是MPMoviePlayerController的,它自带了总时间,已缓冲的总时间,当前时间,整个播放的过程就用MPMoviePlayerController。sliderbar是自己写的,因为iOS自带的不支持缓冲进度,例子:(https://github.com/Zedenem/UICircularSlider),把圆的改成长长的不难吧。。
自己曾尝试过在iOS上用socket server实现本地服务器,各种失败。后来查到MPMoviePlayerController的请求机制是基于http断点下载那一套逻辑的,不像android的socket。HTTPServer已经支持各种断点下载上传。
只是有一点需要自己实现:当httpserver接受到MPMoviePlayerController的请求时,server要先返回一个请求包含了整个视频文件的大小。然后MPMoviePlayerController才会不断请求本地的服务器取数据。我的实现是这样的。当要比方某个视频文件的时候,先开启一个request去下载,当收到文件总大小的时候,存到本地的一个dictionary中,request继续下载,然后打开localserver,拼一个本地url给player,让他自动播放。当localserver收到请求时,根据要请求的文件去本地读文件的实际大小,返回给player,然后player就可以播放了。
HTTPServer自己已经实现了断点下载的逻辑,你可以给他设置一个DocumentRoot,进来的文件请求会直接到这个目录下读文件的数据,他默认的实现获得文件总大小的逻辑是直接用NSFileManager去取文件的总大小,而这里我们需要去自己存到本地的dictionary中读。
大约思路就是这样,不想写太多东西,因为实际自己写的代码真的很少。还是留个思路,真正的实现由大家自己研究,总之实现起来挺简单的,最终效果也很好,大家各种放心就好了。
后面遇到了几个问题小说一下
1、HTTPServer不支持iOS4,好像是用到了一个gcd相关的函数不支持,因为目前我们ios4的用户比较少了,ios7都出来了,就直接把ios4的用户抛弃了,这里也没有深究。
2、MPMoviePlayerController是直接可以播放mp3的,因为我们还需要播放音频,而且是同一个页面,如果全用MPMoviePlayerController是最好的,因为不需要切换播放器,虽然看起来有点拙。但后来发现点问题,就是播放音频的时候,有的mp3不能拖拽,当你更改音频的播放时间的时候,MPMoviePlayerController直接停止了,但有的音频是可以的,最后研究好像是mp3码率或者格式的问题,因为我们已经有很多mp3了,再替换之前的mp3不太现实,最后的实现就是音频用avplayer播,缓冲进度用MPMoviePlayerController的,你可以想象代码写的多么脏。。如果大家只做视频或者刚开始做的话,最好把这个问题研究一下,这里我也没有深究。
如何用MPMoviePlayerController缓存在线视频:
  1. 在iOS本地开启Local Server服务,然后 MPMoviePlayerController请求本地Local Server服务。

  2. 本地Local Server服务再不停的去对应的视频地址获取视频流。

  3. 本地Local Server请求的时候,就可以把视频流缓存在本地。

iOS 视频边下边播相关推荐

  1. 0930 视频边下边播/蓝牙库/阿里博客/afnetworking详细/小程序工具

    iOS视频边下边播–缓存播放数据流 简书: http://www.jianshu.com/p/990ee3db0563 简单易用的蓝牙库,基于CoreBluetooth的封装,并兼容ios和mac o ...

  2. [iOS]仿微博视频边下边播之滑动 TableView 自动播放

    注意:框架已经迭代到2.0版本,我重新架构了整个框架,API 也得到了更好的设计,我为 2.0 版本的实现写了一篇文章 [iOS]如何重新架构 JPVideoPlayer ?.此文中的实现思路仍然是一 ...

  3. [iOS]仿微博视频边下边播之滑动TableView自动播放

    Tips:这次的内容分为两篇文章讲述 01.[iOS]仿微博视频边下边播之封装播放器 讲述如何封装一个实现了边下边播并且缓存的视频播放器. 02.[iOS]仿微博视频边下边播之滑动TableView自 ...

  4. iOS开发之仿微博视频边下边播之自定义AVPlayer播放器, 边下边播解剖。视频处理流程,建立连接-请求数据-统筹数据-解码数据-视频呈现

    Tips:这次的内容分为两篇文章讲述 01.[iOS]仿微博视频边下边播之封装播放器 讲述如何封装一个实现了边下边播并且缓存的视频播放器. 02.[iOS]仿微博视频边下边播之滑动TableView自 ...

  5. 仿微博视频边下边播之封装播放器

    来源:NewPan(@盼盼_HKbuy) 链接:http://www.jianshu.com/p/0d4588a7540f Tips:这次的内容分为两篇文章讲述 01.[iOS]仿微博视频边下边播之封 ...

  6. php音视频边下边播,封装bilibili播放器,自定义边下边播和缓存功能

    image 本项目使用播放器是ijkplay, 并且进行封装和修改主要功能: 1.重新编辑ijkplay的so库, 使其更精简和支持https协议 2.自定义MediaDataSource, 使用ok ...

  7. Android 视频边下边播,MP4头信息在后调整头信息

    mp4视频有两种格式,一种视频头信息在前,这种直接可以先缓存头信息,然后直接边下边播,还有一种是头信息在最后,这种情况下则需要处理mp4的头信息,并调整mp4的格式. mp4文件的格式如下图 图1 从 ...

  8. 实现视频边下边播(视频MOOV信息前置)

    (由于时间久,忘记原链接,仅把自己现在实现方式写出以供参考:) public class QtFastStart {public static boolean sDEBUG = false; priv ...

  9. java 视频边下边播,VideoViewDemo android 播放器,支持边下边播 238万源代码下载- www.pudn.com...

    文件名称: VideoViewDemo下载 收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 194 KB 上传时间: 2014-09-19 下载次数: 5 详细说明:a ...

  10. java 视频边下边播,android 边下边播放mp3完美实现(有缓冲和播放进度效果)

    [实例简介] android 边下边播放mp3完美实现,有缓冲和播放进度效果. [实例截图] [核心代码] MusicPlayer ├── __MACOSX │   └── MusicPlayer │ ...

最新文章

  1. pandas使用apply函数基于条件(if condition)生成新的数据列
  2. 对PostgreSQL的prepared statement的深入理解
  3. VMware和NVIDIA推出新一代混合云架构
  4. java开发安全问题_Java 安全开发需要了解什么?
  5. 【html、CSS、javascript-9】jquery-选择器及过滤器
  6. 关于java中Exception异常
  7. 宗成庆《文本数据挖掘》学习笔记:第一章绪论
  8. 移动端浏览器识别PHP,PHP判断访客是否移动端浏览器访问
  9. 长江水位查询天气查询
  10. 威力导演注册机|威力导演(Cyberlink PowerDirector)15破解工具下载
  11. 什么是OTG,手机OTG的用途
  12. 「Linux-基础」CentOS8 权限管理
  13. MapReduce--实现手机流量分析
  14. 新系统上线的注意事项
  15. (附源码)Springboot校园二手交易平台 毕业设计191637
  16. python服务端开发调试日志系统_Python Django项目日志查询系统
  17. 博弈论——1218:取石子游戏
  18. 小飞鱼软件 大型生产企业设备档案管理系统介绍(图文)
  19. 小议和浅谈 《龙族》的经典设计(一)
  20. java时间段收费_Java实现免费时段计算

热门文章

  1. 树状数组————(神奇的区间操作)蒟蒻都可以看懂,因为博主就是个蒟蒻...
  2. swift 下标 subscript
  3. SpringMVC类型转换遇到的问题
  4. 软件推荐(6):滴答清单
  5. 使用 Envoy 和 AdGuard Home 阻挡烦人的广告
  6. 计算机如何添加usb平板电脑,平板电脑没有usb接口怎么办
  7. [SugerTangYL] 时钟管理(分频器、倍频器、锁相环)Verilog
  8. 计算机属性资源管理器已停止工作,资源管理器已停止工作,详细教您怎么解决资源管理器已停止工作...
  9. 微信自定义菜单java_java微信开发API第四步 微信自定义个性化菜单实现
  10. Swing学习01:Swing是什么