live_m3u8

发布时间:2019-07-09 09:31:09编辑:auto阅读(4193)

    #EXTM3U

    #EXT-X-VERSION:3

    #EXT-X-TARGETDURATION:5

    #EXT-X-MEDIA-SEQUENCE:1465827036

    #EXTINF:5.000,

    #EXT-X-PROGRAM-DATE-TIME:2016-07-11T03:07:04Z

    CHANNEL00000001/1660800/_1.ts

    #EXTINF:5.000,

    #EXT-X-PROGRAM-DATE-TIME:2016-07-11T03:07:09Z

    CHANNEL00000001/1660800/_2.ts

    #EXTINF:5.000,

    #EXT-X-PROGRAM-DATE-TIME:2016-07-11T03:07:14Z

    CHANNEL00000001/1660800/_3.ts



    将上述m3u8文件保存为live.m3u8,放到Apache文档目录下,用VLC播放以下网址:

    http://localhost/live.m3u8

    测试发现,开始播放的第一个文件不是_1.ts,多次测试后发现:

    只要列表中的文件超过三个,播放的总是列表中的最后三个文件


    live m3u8文件列表是需要实时更新的,我们做测试的话,可以先在最后面加上#EXT-X-ENDLIST,这个方法经测试有效,但这样已经不是live m3u8模式


    live m3u8更新规则


    live m3u8文件列表需要不断更新,更新规则:

    移除一个文件播放列表中靠前的(认为已播放的)文件,不断更新EXT-X-MEDIA-SEQUENCE标签,以步长为1进行递增


    生成m3u8

    #!/bin/sh

    echo "#EXTM3U" 

    echo "#EXT-X-MEDIA-SEQUENCE:1642"

    echo "#EXT-X-TARGETDURATION:10"

    for loop in `ls -rt *.ts`

    do

       echo "#EXTINF:10,"

       echo $loop

    done

    echo "#EXT-X-ENDLIST"


    nginx

    user  root;

    worker_processes  1;

    error_log  logs/error.log  debug;

    events {

        worker_connections  1024;

    }

    http {

        include       mime.types;

        default_type  application/octet-stream;

        sendfile        on;

        keepalive_timeout  0;

        server {

            listen       80;

            server_name  localhost;

            location / {

                if ($request_uri ~ ".*/./mp4\?fid=(.*?)&.*") {

                    rewrite ^(.*)/.*$  $1/$arg_fid? redirect;

                }

                root   /opt1/voole_live_m3u8/;

                index  index.html index.htm;

            }

            error_page   500 502 503 504  /50x.html;

            location = /50x.html {

                root   html;

            }

        }

    }

关键字