HLS学习(三)HLSDownloader源码分析(2)相关的数据结构

相关的数据结构



    下面介绍HLSDownloader中和HLS协议相关的一些数据结构,它们的关系需要参考下面的图





    如果不存在Master PlayList,那么它是下面的形式


Master PlayList



   Master PlayList也叫做一级索引,它里面存放了Media PlayList的信息,对照下面的实例进行分析会比较好理解

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1064000
1000kbps.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=564000
500kbps.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=282000
250kbps.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2128000
2000kbps.m3u8   
     bandwidth指定视频的比特率;
     PROGRAM-ID无需关注;
     每个#EXT-X-STREAM-INF的下一行就是二级index文件的路径,路径可以是绝对路径也可以是相对路径;
     客户端可以自己判断目前的网络带宽,来决定播放哪一个视频流

// Master PlayList,也就是一级索引
struct hls_master_playlist {
    char *url; // PlayList的URL
    char *source; 
    int count; // Media PlayList的数量
    struct hls_media_playlist *media_playlist;
};



Media PlayList


    Media PlayList也叫做媒体索引文件、或者二级索引文件,它里面存放了TS媒体文件的信息,对照下面的实例进行分析会比较好理解

#EXTM3U
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-TARGETDURATION:10
#EXTINF:10,
2000kbps-00001.ts
#EXTINF:10,
2000kbps-00002.ts
#EXTINF:10,
2000kbps-00003.ts
#EXTINF:10,
2000kbps-00004.ts
... ...
#EXTINF:10,
2000kbps-00099.ts
#EXTINF:10,
2000kbps-00100.ts
#ZEN-TOTAL-DURATION:999.66667
#ZEN-AVERAGE-BANDWIDTH:2190954
#ZEN-MAXIMUM-BANDWIDTH:3536205
#EXT-X-ENDLIST
     #EXTINF表示每个ts切片的视频文件的时长
     #EXT-X-TARGETDURATION指定当前视频流中切片文件的最大时长,即这些ts切片的时长不能超过这个值
     #EXT-X-PLAYLIST-TYPE-VOD 表示当前的视频不是一个直播流,而是点播流
     #EXT-X-ENDLIST表示这个视频结束,这个标志也说明了当前的流是一个非直播流

// Media PlayList,也就是二级索引文件,或者媒体索引文件
struct hls_media_playlist {
    char *url;
    char *source;
    unsigned int bitrate; // 比特率
    bool encryption; // 是否加密
    int encryptiontype; // 加密的类型
    int count; // TS文件的数量
    int target_duration; // 所有的TS文件的时长总和
    struct hls_media_segment *media_segment; // TS文件
    struct enc_aes128 enc_aes; // 安全密钥
    hls_media_playlist():media_segment(NULL),url(NULL),source(NULL){
    }
};



TS媒体文件信息

// TS媒体片段的信息
struct hls_media_segment {
    std::string url; // URL
    int sequence_number; // 序号
    struct enc_aes128 enc_aes; // 加密信息
    //std::shared_ptr<ByteBuffer> seg;
    hls_media_segment(){

    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值