└── README.md /README.md: -------------------------------------------------------------------------------- 1 | # 一、概述 2 | ## zlmediakit pro版本解析 3 | ### codec版本 4 | 支持基于ffmpeg的转码能力,在开源版本强大功能的基础,是开源ZLMediakit的超集,新增支持如下能力: 5 | 6 | - 1、音视频间任意转码(包括h265/h264/opus/g711/aac等)。 7 | - 2、基于配置文件的转码,支持设置比特率,codec类型等参数。 8 | - 3、基于http api的动态增减转码,支持设置比特率,分辨率倍数,codec类型、滤镜等参数。 9 | - 4、支持硬件、软件自适应转码。 10 | - 5、支持按需转码,有人观看才转码。 11 | - 6、支持负载过高时,转码主动降低帧率且不花屏。 12 | - 7、支持滤镜,支持添加osd文本以及logo角标等能力。 13 | 14 | 图片.png 15 | 16 | ## 1078版本 17 | 1、支持jt1078推流转其他协议,支持2016、2019版本 18 | 2、新增jt1078自适应音频、视频共享seq和单独seq模式 19 | 3、新增支持adpcm格式,支持转rtsp 20 | 4、新增支持音频转码,支持aac/adpcm/opus/g711音频互转 21 | 5、新增支持jt1078级联,支持对讲 22 | 6、完全兼容开源版功能 23 | 24 | ## iptv/ts版本 25 | 1、新增支持rtsp-ts/hls/http-ts拉流转协议以及rtsp-ts推流,支持ts透明模式,无需解复用转rtsp-ts/hls/http-ts协议,提高兼容性和性能 26 | 2、支持rtsp-ts/hls/http-ts拉流以及rtsp-ts推流非透明模式,支持解复用ts为es流再转协议。 27 | 28 | ## vp8/9版本:编码类型增强版本 29 | 1、新增支持adpcm/av1/vp8&9编码格式,全链路支持rtsp/webrtc/rtmp/mp4/hls/ts等协议 30 | 31 | 32 | # 二、转码实现原理 33 | 34 | - 视频转码原理 35 | 图片.png 36 | 37 | 38 | 39 | - 音频转码原理 40 | 图片.png 41 | 42 | 43 | # 三、使用方法 44 | 目前zlmediakit pro转码能力支持两种使用方式,第一种是基于配置文件方式,在设置好配置文件后,所有流都支持转码为目标编码格式直播流,第二种模式基于http api方式,此方式更灵活,功能强大,可以指定更多转码相关参数。 45 | 46 | ## 3.1 基于配置文件的转码 47 | ```ini 48 | [transcode] 49 | #转码stream_id后缀,为空时关闭转码 50 | suffix= 51 | #默认转码视频目标codec,支持H264/H265/JPEG/copy 52 | vcodec=H264 53 | #默认转码音频目标codec,支持mpeg4-generic/PCMA/PCMU/opus/copy 54 | acodec=mpeg4-generic 55 | #是否开启ffmpeg日志 56 | enable_ffmpeg_log=0 57 | # h264解码器白名单 58 | decoder_h264=h264_cuvid,h264_qsv,h264_videotoolbox,h264_nvmpi,h264_bm,libopenh264 59 | # h265解码器白名单 60 | decoder_h265=hevc_cuvid,hevc_qsv,hevc_videotoolbox,hevc_nvmpi,hevc_bm 61 | # h264编码器白名单 62 | encoder_h264=h264_nvenc,h264_qsv,h264_videotoolbox,h264_nvmpi,h264_bm,libx264,libopenh264 63 | # h265编码器白名单 64 | encoder_h265=hevc_nvenc,hevc_qsv,hevc_videotoolbox,hevc_nvmpi,hevc_bm,libx265 65 | ``` 66 | 67 | 在上述配置文件中,如果用户配置好`suffix`,那么zlmediakit将统一把所有直播流转码为目标编码格式,用户通过访问新的流地址即可确保为预期编码格式视频。 68 | 69 | 例如源视频地址为:rtmp://127.0.0.1/live/test, 那么转码后地址即为:rtmp://127.0.0.1/live/test_H264。 70 | 71 | 当配置文件修改为`suffix=null`时,转码后流会直接替换原始流(不会有`_suffix`后缀);替换模式下,建议`rtsp.directProxy/rtmp.directProxy`都设置为0。 72 | 73 | 如果源视频编码格式与目标编码格式一致,那么zlmediakit为了确保性能最优,将直接拷贝流数据(不会编码)。 74 | 75 | 基于配置文件方式的转码使用最简单,可以使用于安防行业H265视频无法webrtc/mse播放的场景。 76 | 77 | ## 3.2 基于http api的转码 78 | zlmediakit同时还提供基于http api的转码方式,这种方式支持的功能更强大,使用更灵活,同时支持一个流转码成多个目标流(比如说不同分辨率的场景)。 79 | 80 | - 请求地址:`/index/api/setupTranscode` 81 | 82 | - 请求参数: 83 | 84 | | 参数 | 参数类型 | 释意 | 是否必选 | 85 | |:--------:|:---------------------------------------------:| :----------------------------------------------------------: | :------: | 86 | | `secret` | `string` | api操作密钥(配置文件配置) | Y | 87 | | `vhost` | `string` | 流的虚拟主机,例如`__defaultVhost__` | Y | 88 | | `app` | `string` | 流的应用名,例如live | Y | 89 | | `stream` | `string` | 流的id名,例如test | Y | 90 | | `name` | `string` | 转码名(后缀),功能类似配置文件transcode.suffix | Y | 91 | | `add` | `int` | 1:添加转码; 0: 删除转码 | Y | 92 | | `video_codec` | `string` | 视频转码的codec,支持H264/H265/JPEG/copy | Y | 93 | | `video_bitrate` | `int` | 转码后视频的比特率 | Y | 94 | | `video_scale` | `float` | 转码视频宽高拉伸比例,取值范围0.1~10 | Y | 95 | | `audio_codec` | `string` | 音频转码codec,支持mpeg4-generic/PCMA/PCMU/opus/copy | Y | 96 | | `audio_bitrate` | `int` | 转码后音频比特率 | Y | 97 | | `audio_samplerate` | `int` | 转码后音频采样率率 | Y | 98 | | `filter` | `string` | avfilter滤镜参数,用法与ffmpeg -vf 参数一致 | Y | 99 | | `force` | `bool` | 是否强制转码,强制转码时不管目标编码是否一致,默认否 | N | 100 | | `decoder_threads` | `int` | 解码线程数,默认2个,最大16个,音频强制为1个 | N | 101 | | `encoder_threads` | `int` | 编码线程数,默认4个,最大16个,音频强制为1个 | N | 102 | | `hw_decoder` | `bool` | 是否启用硬件解码器,默认启用 | N | 103 | | `hw_encoder` | `bool` | 是否启用硬件编码器,默认启用 | N | 104 | | `decoder_list` | `string` | 视频ffmpeg解码器列表,例如: h264_cuvid,h264_qsv | N | 105 | | `encoder_list` | `string` | 视频ffmpeg编码器列表,例如: hevc_nvenc,hevc_qsv | N | 106 | | `gpu_index` | `int` | 硬件编解码gpu索引号,默认0 | N | 107 | | `enable_hls` | `bool` | 转码后是否转换成hls-mpegts协议 | N | 108 | | `enable_hls_fmp4` | `bool` | 转码后是否转换成hls-fmp4协议 | N | 109 | | `enable_mp4` | `bool` | 转码后是否允许mp4录制 | N | 110 | | `enable_rtsp` | `bool` | 转码后是否转rtsp协议 | N | 111 | | `enable_rtmp` | `bool` | 转码后是否转rtmp/flv协议 | N | 112 | | `enable_ts` | `bool` | 转码后是否转http-ts/ws-ts协议 | N | 113 | | `enable_fmp4` | `bool` | 转码后是否转http-fmp4/ws-fmp4协议 | N | 114 | | `hls_demand` | `bool` | 转码后该协议是否有人观看才生成 | N | 115 | | `rtsp_demand` | `bool` | 转码后该协议是否有人观看才生成 | N | 116 | | `rtmp_demand` | `bool` | 转码后该协议是否有人观看才生成 | N | 117 | | `ts_demand` | `bool` | 转码后该协议是否有人观看才生成 | N | 118 | | `fmp4_demand` | `bool` | 转码后该协议是否有人观看才生成 | N | 119 | | `enable_audio` | `bool` | 转码后转协议时是否开启音频 | N | 120 | | `add_mute_audio` | `bool` | 转码后无音频是否添加静音aac音频 | N | 121 | | `mp4_save_path` | `string` | 转码后mp4录制文件保存根目录,置空使用默认 | N | 122 | | `mp4_max_second` | `int` | 转码后mp4录制切片大小,单位秒 | N | 123 | | `mp4_as_player` | `bool` | 转码后MP4录制是否当作观看者参与播放人数计数 | N | 124 | | `hls_save_path` | `string` | 转码后hls文件保存保存根目录,置空使用默认 | N | 125 | | `modify_stamp` | `int` | 转码后该流是否开启时间戳覆盖(0:绝对时间戳/1:系统时间戳/2:相对时间戳) | N | 126 | | `auto_close` | `bool` | 转码后无人观看是否自动关闭流(不触发无人观看hook) | N | 127 | 128 | 129 | 130 | - 响应: 131 | 132 | ```json 133 | { 134 | "code" : 0, 135 | "msg" : "success" 136 | } 137 | ``` 138 | 139 | 140 | 141 | ## 3.3 使用http api获取转码信息 142 | 143 | - 请求接口:/index/api/getMediaInfo 144 | - 请求回复:请查看`transcode`字段 145 | 146 | ```json 147 | { 148 | "aliveSecond": 88, 149 | "app": "live", 150 | "bytesSpeed": 330246, 151 | "code": 0, 152 | "createStamp": 1691902256, 153 | "isRecordingHLS": true, 154 | "isRecordingMP4": false, 155 | "originSock": { 156 | "identifier": "2-51", 157 | "local_ip": "192.168.31.101", 158 | "local_port": 8000, 159 | "peer_ip": "192.168.31.101", 160 | "peer_port": 61801 161 | }, 162 | "originType": 8, 163 | "originTypeStr": "rtc_push", 164 | "originUrl": "rtc://127.0.0.1/live/test?app=live&stream=test&type=push&session=1-50", 165 | "readerCount": 0, 166 | "schema": "rtsp", 167 | "stream": "test", 168 | "totalReaderCount": 0, 169 | "tracks": [ 170 | { 171 | "codec_id": 0, 172 | "codec_id_name": "H264", 173 | "codec_type": 0, 174 | "fps": 30.0, 175 | "frames": 2648, 176 | "gop_interval_ms": 2012, 177 | "gop_size": 60, 178 | "height": 556, 179 | "key_frames": 51, 180 | "loss": 0.0, 181 | "ready": true, 182 | "width": 990 183 | }, 184 | { 185 | "channels": 1, 186 | "codec_id": 4, 187 | "codec_id_name": "PCMU", 188 | "codec_type": 1, 189 | "frames": 4434, 190 | "loss": 0.0, 191 | "ready": true, 192 | "sample_bit": 16, 193 | "sample_rate": 8000 194 | } 195 | ], 196 | "transcode": [ 197 | { 198 | "name": "codec", // 转码名称 199 | "setting": { // 转码配置信息 200 | "adecoder_threads": 1, // 音频解码器线程数 201 | "aencoder_threads": 1, // 音频编码器线程数 202 | "hw_decoder": true, // 启动硬件解码器 203 | "hw_encoder": true, // 启动硬件编码器 204 | "target_acodec": "mpeg4-generic",// 目标音频编码格式 205 | "target_vcodec": "H265", // 目标视频编码格式 206 | "vdecoder_threads": 4, // 视频解码器线程数 207 | "vencoder_threads": 8, // 视频编码器线程数 208 | "force": false, // 是否强制转码 209 | "filter": "", // 滤镜参数 210 | "decoder_list" : ["h264_cuvid", "h264_qsv"], // 解码器列表 211 | "encoder_list" : ["hevc_nvenc", "hevc_qsv"] // 编码器列表 212 | }, 213 | "adec": "pcm_mulaw", // 音频解码器名称 214 | "aenc": "aac", // 音频编码器名称 215 | "aenc_ctx": { // 音频AVCodecContext信息 216 | "bit_rate": 32000, // 比特率 217 | "channels": 1, // 通道数 218 | "frame_number": 4055, // 已编码帧数 219 | "frame_size": 1024, // 每帧采样数 220 | "sample_fmt": "fltp", // 音频编码输入格式 221 | "sample_rate": 48000 // 编码器采样率 222 | }, 223 | "vdec": "h264", // 视频解码器名称 224 | "venc": "hevc_videotoolbox", // 视频编码器名称 225 | "venc_ctx": { // 视频AVCodecContext信息 226 | "bit_rate": 1000000, // 比特率 227 | "fps": 20, // 帧率 228 | "frame_number": 2595, // 已编码帧数 229 | "gop": 60, // gop大小 230 | "has_b_frames": 0, // 是否编码b帧 231 | "height": 556, // 视频高度 232 | "pix_fmt": "nv12", // 编码器输入图片格式 233 | "width": 990 // 视频宽度 234 | } 235 | } 236 | ], 237 | "vhost": "__defaultVhost__" 238 | } 239 | ``` 240 | # 欢迎联系试用: 241 | Q&WX 18675721 242 | ## 产品价格及内容: 243 | 产品包含全部商业级源代码,支持后续迭代升级,另外可提供二进制可执行程序。 244 | |类型|源代码价格|二进制价格|备注| 245 | |:--------:|:--------:|:--------:|:--------:| 246 | |ZLM-PRO-CODEC|5W|2万|不含税| 247 | |ZLM-PRO-1078|2W|1万|不含税| 248 | |ZLM-PRO-IPTV|3W|1.5万|不含税| 249 | |ZLM-PRO-VP8/9|3W|1.5万|不含税| 250 | |ZLM-PRO-MAX|面议||以上所有功能| 251 | |备注|以上版本均独立支持,如有需合并请单独联系,单独报价|| 252 | 253 | 备注:税率:1%普票,3%、6%、13%专票 254 | --------------------------------------------------------------------------------