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 ...
随机推荐
- 苹果手机 iTunes 资料备份到另一手机
百度教程 https://jingyan.baidu.com/article/d621e8da332e602865913f8e.html 直接使用iTunes将老手机的资料备份, (可能需要关闭手机定 ...
- 2、通过HBase API进行开发
一.将HBase的jar包及hbase-site.xml添加到IDE 1.到安装HBase集群的任意一台机器上找到HBase的安装目录,到lib目录下下载HBase需要的jar包,然后再到conf目录 ...
- Linux 配置静态Ip地址
注:所有红色字体标注均为 Linux 的 操作命令 ! 1, 使用root账户登录系统 2, 可以先使用 ifconfig : 查看网卡信息 eth0 为默认的第一个网卡 , 如果有第二个就会显示 ...
- Avalon总线概述
Nios系统的所有外设都是通过Avalon总线与Nios CPU相接的,Avalon总线是一种协议较为简单的片内总线,Nios通过Avalon总线与外界进行数据交换. Avalon总线接口分类 可分为 ...
- nextSibling VS nextElementSibling
2. nextSibling vs nextElementSibling { //FF { 在Firefox中,link2的nextSibling并不是link3,因为两者之间有一个换行符. 这被认为 ...
- 加载Firefox 和 chrome 浏览器配置
Firefox: Chrome:
- java代码关于匿名内部类和接口的方法使用
总结:主要是多个按钮实现监听时,能够响应不同的事件 以上步骤我们可以用多种方法实现.但人们通常用二种方法.第一种方法是只利用一个监听器以及多个if语句来决定是哪个组件产生的事件:第二种方法是使用多个内 ...
- Android Binder机制中的异步回调
“Binder通信是同步而不是异步的”,但是在实际使用时,是设计成客户端同步而服务端异步. 看看Framwork层的各service类java源码便会知道,在客户端调用服务端的各种方法时,通常会传递一 ...
- 【phonegap】下载文件
<!-- 打包的时候phonegap自己会添加这个文件--> <script type="text/javascript" charset="utf-8 ...
- ILMerge最佳实践
背景 为了生成的代码更加简捷,复制方便,常常会把多个可执行文件合并成一个. 方案 Project=>Properties=>Build Events=>Edit Post-build ...