zoukankan      html  css  js  c++  java
  • HLS协议分析实现与相关开源代码

        苹果定义的HLS协议,广泛运用在现在很多的流媒体服务器和客户端之间,用以传输直播电视数据流。
        具体的协议参照    http://tools.ietf.org/html/draft-pantos-http-live-streaming-10    我这里对HLS的客户端协议做一个简单的综述。
     
        HLS协议其实也是基于HTTP的流媒体协议,我们知道传统的流媒体协议有这么几个,http渐进下载、RTSP、MMS等等,简单说一下几个的区别,描述的可能不是很准确。HTTP一般用于大段连续的视频下载,一般需要下载一部分之后才可以开始播放,这种一般的用于视频点播等,也就是服务器上已经真实的存在这个数据流了;RTSP配合RTP一般用于局域网的数据传播,但也不绝对,开源的PJSip工程的SIP绘画就是RTSP,有些电台也采用了RTSP;MMS是微软的协议,一般多数的网络电台采用这个协议。
        而HLS巧妙的将数据流切片,比如以10s钟一段,一般以TS封装H264和AAC数据,这10s就好比是H264视频的编码序列,这个segment的数据流不会和其他的segment的流有任何编码上的参考,所以可以独立解码,那么对于客户端来讲,就可以随时请求直播数据流,最多只有10s的时间延迟。
        HLS的请求流程是(只是简述,后续文章将根据具体的地址详细解析):
        1、http请求m3u8的url
        2、服务端返回一个m3u8的播放列表,这个播放列表是实时跟新的,一般一次给出3段数据的url
        3、客户端解析m3u8的播放列表,再按序请求每一段的url,获取ts数据流
     
        网上相关的资料很多,我这里就不具体描述了。我介绍一下目前实现了HLS协议的开源项目,首先是VLC,VLC里面的httplive.c实现了HLS协议;然后是ffmpeg的applehttp.c或者新版的hls.c;当然android的代码里面也有类似协议的实现。
        我参照ffmpeg和vlc的相关代码,编写了一个hls_proxy的代码,见我的github链接    https://github.com/jgfntu/hls_proxy    之所以说是代理,是因为HLS里数据是一段一个url,那么如果用普通的播放接口函数,如mediaplayer,那么一段10s结束后,则必须重新启动mediaplayer,这肯定是不行的。
        我利用开源的小型web server mongoose     https://github.com/valenok/mongoose    代码实现一个http server,结合libcurl的库作为http的下载接口,然后将数据入队列,利用mongoose将其以http的形式流化给android的mediaplayer,当然,这个需要android系统能够解析http的ts数据流(在android上采用HLS proxy的原因是,国内很多的视频服务器如CNTV、PPTV、LETV和搜狐等对HLS协议的实现有些不同,原生的android代码不一定兼容得到,或者有些机型的BSP没有实现HLS的协议);如果是在ubuntu上,利用VLC也可以验证这个hls_proxy的功能。
        另外,网上出名的一个基于VLC的android版本faplayer,见   https://github.com/tewilove/faplayer   ,其作者tewilove本身也是VLC的开发者之一,android版中的android_audiotrack和androidsurface等都有参与,很是崇拜,不过其已经不更新faplayer了,已经是一年多前的VLC版本了,不过VLC官方已经出了测试版的android版本,不过我运行之后总是觉得没有老的vlc的faplayer流畅,性能瓶颈我没有去跟踪。结合新版的VLC,我对faplayer做了更新,支持4.0以上的音视频,主要也就是跟新了audiotrack和androidsurface,地址是    https://github.com/jgfntu/faplayer   ,我对faplayer的HLS部分做了一定的修改,以便更好的实现各大视频服务器商的HLS直播。

    =========================================================================================================
    2013-07-27 发布可可电视1.3.0.apk
    可以到各大市场下载,如小米商店、百度手机助手、腾讯应用宝、木蚂蚁、豌豆夹等等,提供一个链接,欢迎下载试用!
    http://app.xiaomi.com/detail/39492
     
  • 相关阅读:
    设计模式学习总结系列应用实例
    【研究课题】高校特殊学生的发现及培养机制研究
    Linux下Oracle11G RAC报错:在安装oracle软件时报file not found一例
    python pro practice
    openstack python sdk list tenants get token get servers
    openstack api
    python
    git for windows
    openstack api users list get token get servers
    linux 流量监控
  • 原文地址:https://www.cnblogs.com/yulang314/p/3735955.html
Copyright © 2011-2022 走看看