iOS开发笔记,简单实现视频音频的边下边播

老是在网上看别人的博文,受益不浅,从没本身写过,今天分享一点小经验,第一次写技术博客,但愿对同行的ios猿们有所帮助。
 
先介绍一下本身的状况:一年ios开发,http协议不太懂,大约知道断点下载http请求头里的几个字段什么做用。(因此比我基础好的童鞋能够尽管放心的看我这篇博文)
 
直接切入主题,要实现的功能是:
一、ios视频音频边缓存边播放,缓存时能够在已下载的部分拖拽进度条。
二、缓存到一半退出,再次播放同一地址的视频时,视频继续下载,而且缓存进度已经走到上一次下载的位置。
三、不管是下载到一半退出仍是下载完退出,已缓存的数据都存到本身指定的一个路径。若是已下载完,下次播放时能够再也不走网络,直接播放本地文件。
四、一个有总时间,缓冲进度,播放进度的sliderbar。
(具体效果看唱吧4.1版本之后的视频效果吧)
 
用到的几个类:
一、ASIHttpRequest
二、MPMoviePlayerController
三、HTTPServer(https://github.com/robbiehanson/CocoaHTTPServer)
 
灵感来源是这篇文章, http://hi.baidu.com/suifeng_89/item/603cb0b95bb796ff62388e88
实现步骤:
一、先开一个request去下载要播放的视频文件
二、在本地开一个http server,拼一个本地地址(http://127.0.0.1:xxxx/xxx.mp4),丢给MPMoviePlayerController播放。
三、本地的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中读。
 
大约思路就是这样,不想写太多东西,由于实际本身写的代码真的不多。仍是留个思路,真正的实现由你们本身研究,总之实现起来挺简单的,最终效果也很好,你们各类放心就行了。
 
后面遇到了几个问题小说一下
一、HTTPServer不支持iOS4,好像是用到了一个gcd相关的函数不支持,由于目前咱们ios4的用户比较少了,ios7都出来了,就直接把ios4的用户抛弃了,这里也没有深究。
二、MPMoviePlayerController是直接能够播放mp3的,由于咱们还须要播放音频,并且是同一个页面,若是全用MPMoviePlayerController是最好的,由于不须要切换播放器,虽然看起来有点拙。但后来发现点问题,就是播放音频的时候,有的mp3不能拖拽,当你更改音频的播放时间的时候,MPMoviePlayerController直接中止了,但有的音频是能够的,最后研究好像是mp3码率或者格式的问题,由于咱们已经有不少mp3了,再替换以前的mp3不太现实,最后的实现就是音频用avplayer播,缓冲进度用MPMoviePlayerController的,你能够想象代码写的多么脏。。若是你们只作视频或者刚开始作的话,最好把这个问题研究一下,这里我也没有深究。
 
好了就到这里,总之实现起来比较简单,以前在android上就据说过这样的实现,只是没有发现ios上能直接播网络音频的播放器,网上的demo也比较少,因此当本身研究出来的时候就比较迫切的给你们分享出来。但愿能给你们带来帮助,也但愿会有更好的实现方案出来。有问题给我留言或@个人微博~
 
 
 
 
题外话,若是我在这里说“我喜欢葛晓倩”是否是有点不厚道,哈哈,最近想追一个女孩,但本身的表现有点拙,为本身攒点人品,努力~加油!!你们加油!!!
 
 
 
qq:84056724   原本只是想分享一下经验,不常常上博客园,有感兴趣的童鞋能够加我qq
 
另外修正以上几个问题,HTTPServer只是用到了几个ios4不支持的函数,注掉就能够了,运行木有问题。MPMoviePlayerController播放mp3的问题一直没解,后来咱们播放mp3就用的avplayer,只是找到了得到音频总长度的方法,因此音频的播放仍是能够有缓冲进度的。最近确实没时间作demo,等作出来给你们分享一下。      2013-9-17
 
 
由于一直很忙,没有时间作demo,这里有一童鞋写的代码,能够先研究一下,欢迎加好友交流
http://code4app.com/ios/5292c381cb7e8445678b5ac2
2014-2-19
 
 
捎带招聘信息一枚:
唱吧招聘:资深iOS、Android工程师,或者是你都不知道本身是只神马工程师但自认是个牛B工程师的工程师。高档写字楼,大波美女同事,按期东莞出差,以上这些咱们都没有,你有的只是参与到一个改变身边产业的赌博(信不信由你,欢迎当面辩论)和也就那么回事儿不管如何想用工资凑够买房首付也是痴心妄想但凑或还个月供还能勉强吃上馒头咸菜的待遇。简历投到zhouguixin#changba.com,推荐自荐成功送5s,欢迎转发
相关文章
相关标签/搜索