从HLS流下载所有文件的客户端

hlsclient的Python项目详细描述


这是一个简单的PythonHTTP Live Streaming Client它消耗了 远程播放列表的列表,并保存为 本地播放列表:键、段和经过修改的带路径的m3u8 正常化

它还支持备份,也就是说,如果相同的播放列表在 多个服务器,它将跟踪每个服务器状态并切换 如果需要的话。

通过config.ini,可以自定义文件的位置 将被保存,通过json提供服务器信息的url是什么。

JSON必须类似于:

{
    "streams": [
        "nasa": {
            "input-path": "/msfc/Edge.m3u8",
            servers: [
                "http://liveips.nasa.gov.edgesuite.net"
            ]
        }
    ]
}

生成不同的播放列表

hlslcient可以使用多个播放列表,然后生成不同的播放列表分组

为此,为每个流包含一个bandwidth,并添加一个操作以将它们组合到JSON中:

{
    "streams": {
        "Nasa-low": {
            "input-path": "/msfc/Edge.m3u8",
            "servers": ["http://liveips.nasa.gov.edgesuite.net"],
            "bandwidth": 254082
        },
        "Nasa-medium": {
            "input-path": "/msfc/3G.m3u8",
            "servers": ["http://liveips.nasa.gov.edgesuite.net"],
            "bandwidth": 460658
        },
        "Nasa-high": {
            "input-path": "/msfc/Wifi.m3u8",
            "servers": ["http://liveips.nasa.gov.edgesuite.net"],
            "bandwidth": 1080434
        }
    },

    "actions": [
        {
            "type": "combine",
            "input": ["Nasa-low", "Nasa-medium", "Nasa-high"],
            "output": "/msfc/nasa_mbr.m3u8"
        }
    ]
}

转码

hlsclient还可以使用ffmpeg从视频流创建仅音频的曲目。

为此,请添加一个transcodeaction并在合并操作中包含新流:

"actions": [
    {
        "type": "combine",
        "input": ["Nasa-audio-only", "Nasa-low", "Nasa-medium", "Nasa-high"],
        "output": "/msfc/nasa_mbr.m3u8"
    },
    {
        "type": "transcode",
        "input": "Nasa-low",
        "output": {
            "audio": {
                "Nasa-audio-only": {
                    "path": "Nasa-audio-only.m3u8",
                    "audio-bitrate": 64000,
                    "bitrate": 65000
                }
            }
        }
    }
]

加密

如果在配置文件中设置encryption=true,则hlsclient将 使用随机AES-128密码自动加密所有流。

运行

要运行客户端,只需运行:

$ python -m hlsclient

运行测试

您需要安装ffmpeg和mediainfo。

$ ./runtests

ffmpeg安装

为了使用当前版本的hlsclient并支持转码, 必须与libaac和libx264一起安装ffmpeg下载它们并 像这样编译FFfmpeg:

  • libaac

    ./configure && make && sudo make install
    
  • libx264

    ./configure --enable-shared && make && sudo make install
    
  • ffmpeg

    ./configure --enable-libx264 --enable-gpl --enable-libfaac --enable-nonfree --enable-shared && make && sudo make install
    

测试版本为:

  • libaac:faac-1.28
  • libx264:x264-snapshot-20121030-2245
  • ffmpeg:n-46213-g976175f

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
安卓 studio安装的java Unity本机广告   java如何将映射转换为对象   java我试图使用rest控制器从h2数据库中检索记录,但它说没有数据集   反思为什么会抛出java。lang.InstanceException?   在opensuse中找不到Java/javac   java为Android上的谷歌地图添加了5900多个标记。如何有效地做   java如何在if语句中使用循环   java如何在JPA(Hibernate)中映射一对多关系和复合主键?   如何在Java中读取和写入外部进程?   Java线程。睡眠时间最短   java使用EclipseGradle插件如何离线托管和使用依赖项(库jar文件)   java为什么虚拟引用在排队时没有被清除?   java无法理解如何创建用于响铃报警的取消按钮   java解析不应通过注入容器错误发生   java Toast或ProgressDialog不显示   java在自定义对象上使用优先级队列的更好方法   java格式的。wmv文件。(或者任何视频文件都很好)   从页面调用另一个侦听器后,不会调用java JSF<f:ajax>侦听器   java注释ConfigApplicationContext不能多次刷新有什么原因吗?