Http Live Streaming 实现iphone在线播放视频[转]
http://hi.baidu.com/lphack/item/83865611c5f82c8988a956df
本人新手,难免会出错,请各位指点!
最近要做一个项目,是通过iphone来播放工厂摄像头录制的视频达到监控设备的目的,要求可以实现点播和直播
对于视频流的操做其实一无所知,但是老同事给我开了一个头,给了我几篇文章,关于苹果http live streaming 流媒体技术的,于是我就从这里入手了。
先讲讲前提基础:
我的系统是:雪豹

需要实现目标是:
把获得的ts格式的视频,切片成一系列ts文件,在iphone上实现在线播放
好开始了
========================完美分隔符=============================================
HLS简介
简单来说,Http Live Streaming (HLS)技术就是视频切片技术用于在线播放,也就是使用Http渐进下载视频播放。
因为最早要播放视频,是需要整个文件下载完成后,然后在本地播放。后来出现了流媒体传输技术,才实现了在线播放视频。而HLS就是其中一种。
之所以称之为视频切片,是因为,HLS技术是需要把获得的视频流(我这里得到的是现成的ts视频文件,如果不是应该需要通过ffmpeg转换吧),然后通过工具切成一系列ts文件(最好每段10秒),最好,同时会生成一个.m3u8的文件,其实m3u8就是一个索引文件,是一个文本,里面记载了一系列ts文件的索引,这些全都放在web服务器。最后通过iphone访问服务器上m3u8的地址,就可以在线播放视频了。
再讲讲传输的过程,当访问服务器上m3u8文件时,iphone就开始根据这个索引里面的顺序,逐段下载那一系列ts文件,一般下载第一个ts后缓冲结束开始播放,然后后台继续下载,这样循序渐进,达到在线播放的效果。
下面给出一些参考文章,会有详细的说明的,深入了解HLS的概念还是很有必要的
苹果官方阐述 (英)
苹果官方阐述(中),有遗漏
明了的阐述:HTTP Live Streaming (HLS) 视频直播技术
09年老外的文献:iPhone HTTP Streaming with FFMpeg and an Open Source Segmenter
11年国内的基于那老外的实现:苹果http视频点播技术
以上文章可能有点乱,稍微看看,有个了解就行。
如何实现HLS
由于我得到的是现成的ts文件,那么就省到了使用ffmpeg转换格式的步骤了。HLS关键的是如何切割视频。可以使用mediaStreamSegmenter和mediaFileSegmenter。前者是分割网络上流媒体的,后者是分割本地文件。苹果还有开源的segmenter,可以注册开发者账号后去论坛下载,可以移植到linux吧。但是对于我还算是比较庆幸,我的系统已经内置了mediaStreamSegmenter(在终端中输入),于是我就直接用这个吧。其他的我并没有研究。
开始使用mediaStreamSegmenter。对于详细的mediaStreamSegmenter参数使用请参考这里:
manpagez: man(manual) pages & moreman mediastreamsegmenter(1)
我在终端中使用的是如下命令:
mediastreamsegmenter -b http://10.137.103.199/segstream -f /Library/WebServer/Documents/segstream 10.137.103.199:1234
当然这样不会有任何结果的。
mediaStreamSegmenter的使用指南中我们发现,一定要指定[address:port], 那这个怎么来呢?现在就扯开话题讲一下这个ip和端口吧。
由于他要一个address和port,那么我就查了下资料,给我的苹果机配了服务器,然后自己访问自己。方法如下:
系统偏好设置--->共享--->勾选WEb共享, 那结果就如下:

这就就设置了服务器,因为系统已经集成了Apatch服务器,至于上面两个访问地址,对应的是不同的目录,详细可以参考那个问号按钮。
好了回到正题,这样配置完了后,我发现依然不能使用那个命令来分割文件,关键是连 那个port该写什么都不知道。
几经周折,发现如下文章,帮我解决了,
Having trouble setting up mediastreamsegmenter on Mac OS X 10.6
他说mediaStreamSegmenter需要一个udp的网络环境,才可以抓去流媒体。需要使用VLC这个播放软件创造udp网络环境。我用的是vlc 1.1.11版本的。
然后使用VLC播放我的流文件(可能这样就创造了一种网络流的环境,我是这么认为的),最后终端中就出来了一连串的提示,一切都这么美妙。然后再去看我的目录/Library/WebServer/Documents/segstream ,就出来了一系列ts文件和m3u8文件:

最后使用iphone模拟器中mediaPlayer(自己下的)的来访问我这个服务器目录下的m3u8就ok了,如下:
                   
这样就实现了iphone的在线视频播放了
当然这样的操作只是用手工的分割视频,肯定不符合要求的,但是至少为一无所知的我打开了一条路,让我可以进一步的去探索,这文章只能算是有提示作用,写在这里希望能给同样被HLS困扰的同志们一点点帮助。
顺便提示一下:听过VLC不只是一个开源的播放软件,还可以作为服务器软件,可能它就可以直接实现格式转换和分割任务,所以下面就要好好研究一下VLC了。
这里贡献一篇文章:http://wiki.videolan.org/Documentation:Streaming_HowTo/Streaming_for_the_iPhone
Http Live Streaming 实现iphone在线播放视频[转]的更多相关文章
- 群晖synology的Video Station无法通过浏览器在线播放视频
		
群晖synology的Video Station无法通过浏览器在线播放视频 http://www.hangge.com/blog/cache/detail_419.html
 - Loadrunner脚本开发-基于HTTP协议的流媒体视频在线播放服务器性能测试
		
脚本开发-基于HTTP协议的流媒体视频在线播放服务器性能测试 by:授客 QQ:1033553122 目的 实现基于http协议的流媒体在线视频播放,服务器性能测试脚本,模拟用户浏览器方式在线播放 ...
 - Android播放器推荐:可以播放本地音乐、视频、在线播放音乐、视频、网络收音机等
		
下载链接:http://www.eoeandroid.com/forum.php?mod=attachment&aid=MTAxNTczfGMyNjNkMzFlfDEzNzY1MzkwNTR8 ...
 - 爱斯达M2C服装定制系统介绍—在线播放—优酷网,视频高清在线观看
		
爱斯达M2C服装定制系统介绍-在线播放-优酷网,视频高清在线观看 视频: 爱斯达M2C服装定制系统介绍
 - 使用Vitamio打造自己的Android万能播放器(5)——在线播放(播放优酷视频)
		
前言 为了保证每周一篇的进度,又由于Vitamio新版本没有发布, 决定推迟本地播放的一些功能(截图.视频时间.尺寸等),跳过直接写在线播放部分的章节.从Vitamio的介绍可以看得出,其支持http ...
 - 使用Vitamio打造自己的Android万能播放器(7)——在线播放(下载视频)
		
前言 本章将实现非常实用的功能——下载在线视频.涉及到多线程.线程更新UI等技术,还需思考产品的设计,如何将新加的功能更好的融入到现有的产品中,并不是简单的加一个界面就行了,欢迎大家交流产品设计和技术 ...
 - 解决ubuntu下firefox无法在线播放音频和视频的问题
		
原因 Ubuntu 为了规避专利和版权问题,很多东西没有预装,比如音视频解码器AAC. 那么为什么明明 Ubuntu 上没有AAC解码器, Chrome 却可以正常播放呢,自然的想法是 Chrome ...
 - 【实战问题】【3】iPhone无法播放video标签中的视频
		
问题:视频都是MP4格式,视频可以在手机上正常播放.video标签中的视频在安卓点击可以播放,但在iPhone无法播放 解决方案: 1,视频编码格式问题,具体iPhone手机支持的是哪些格式可见官方的 ...
 - 阿里云oss视频上传不能在线播放,js,javascript,在线播放器,插件
		
网页视频播放插件 发现阿里云oss储存,上传了视频不能在线播放. 解决方法:使用插件播放即可解决. <html> <head> <meta charset="u ...
 
随机推荐
- Ubuntu的复制粘贴操作及常用快捷键(摘自网络)
			
Ubuntu的复制粘贴操作 终端最大化快捷键:crtl + win + 上 1.最为简单,最为常用的应该是鼠标右键操作了,可以选中文件,字符等,右键鼠标,复制,到目的地右键鼠标,粘贴就结束了. 2.快 ...
 - Java面试题:栈和队列的实现
			
面试的时候,栈和队列经常会成对出现来考察.本文包含栈和队列的如下考试内容: (1)栈的创建 (2)队列的创建 (3)两个栈实现一个队列 (4)两个队列实现一个栈 (5)设计含最小函数min()的栈,要 ...
 - nagios 监控shell脚本
			
线上应用shell脚本 参考链接:http://os.51cto.com/art/201301/376725.htm 0--各方面都正常,检查成功完成. 1--资源处于警告状态.某个地方不太妙. 2- ...
 - Hyperledger Fabric快速上手
			
安装go curl -O https://storage.googleapis.com/golang/go1.10.2.linux-amd64.tar.gz tar -xvf go1.10.2.lin ...
 - 自定义第三方YUM源
			
1.切换到cloudboot系统目录中 2.拷贝repodata目录的*-repo.xml文件到系统目录下 3.删除系统目录的repodata目录 4.编辑repo.xml内容,base添加rpm包包 ...
 - FTP协议完全详解
			
1. 介绍 FTP的目标是提高文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可靠高效地传送数据.虽然我们也可以手工使用它,但是它的主要作用是供程序使用的.在阅读本文之前最好能够阅读TC ...
 - mysql索引之二:数据结构及算法原理
			
摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ...
 - MYSQL数据库索引类型都有哪些?
			
索引类型: B-TREE索引,哈希索引•B-TREE索引加速了数据访问,因为存储引擎不会扫描整个表得到需要的数据.相反,它从根节点开始.根节点保存了指向子节点的指针,并且存储引擎会根据指针寻找数据.它 ...
 - PyCharm中按住Alt键,可以选择一个指定列表,然后对这个数列进行操作,比如删除,增加等等
 - Oracle 2套rac集群指向单机多实例的复制搭建
			
Oracle 2套rac集群指向单机多实例的复制搭建 由于环境限制,现在需要把2套rac集群通过dg复制指向远端的单机多实例上面. rac指向第一个实例的前面已经有文档 这里直接添加第二个实例的复制搭 ...