简短回答:通常推流到CDN不是HTTP的标准POST请求,而是使用专门的媒体传输协议(如RTMP、RTMPS、SRT、RTP等)。这些协议在传输层或应用层与HTTP不同,属于持续的流式连接,而不是一次性的表单提交式POST。
补充说明:某些CDN或直播方案在接收分段的HTTP上传(例如chunked HLS分段上传或WebRTC信令API)时,确实会用到HTTP POST/PUT来上传片段或信令,但这属于特殊场景,与传统的实时视频推流(RTMP/UDP/TCP流)不同。
要点是区分“控制/管理API”和“媒体传输”。管理或回调接口可能用POST,而媒体数据多采用流式协议。记住关键词:RTMP(推流常用)、HLS(拉流/分发常见)、SRT(低延迟、稳健)。

推流(publish):把编码后的音视频发送到CDN或服务器。拉流(pull):观众或边缘节点从源获取媒体。两者协议与实现不同。
如果CDN文档写“支持HTTP上传分段”,则部分流程会用到HTTP POST,但这并不等同于传统意义上的“推流即POST”。
常见协议包括:RTMP(基于TCP,历史悠久)、RTMPS(RTMP+TLS)、HLS(HTTP分段播放,拉流为主)、SRT(低延迟、穿透丢包)、RTP/RTSP(专业直播/会议)。这些协议中只有HLS是基于HTTP的,但HLS通常用于分发/播放而非实时推流;少数实现会用HTTP POST上传分片。
RTMP:推流首选(OBS/FFmpeg默认支持)。HLS:适合大规模分发和兼容性,延迟较高。SRT:适合不稳定网络。HTTP POST更多出现在管理或特殊分片上传场景。
理论上可用HTTP POST传输分片或使用WebRTC+WebSocket等方式,但会牺牲实时性或需要服务器端额外支持,因此并不常见于标准直播推流链路。
理解协议设计目的能帮助选择合适的推流方式:实时优先选RTMP/SRT,兼容性优先选HLS或HTTP分发。
常见模式包括:1) 直接RTMP Push:推流器(如OBS或FFmpeg)直接推送到CDN ingest 地址;2) API触发上传:先用HTTP API申请流名或签名,然后推RTMP或上传分片;3) 分段HTTP上传:将HLS片段通过HTTP POST/PUT上传到CDN。
典型流程为:获取CDN提供的推流地址(含鉴权/streamkey)→ 使用OBS/FFmpeg按协议推流(RTMP等)→ CDN接收并分发到边缘节点供观众拉流。
当使用CDN的REST API创建流、上传转码脚本或上传HLS分片时,会用到HTTP POST/PUT。注意这些是控制或分段上传的HTTP请求,不同于持续推流连接。
初学者先掌握RTMP推流流程,再根据CDN文档补充API鉴权和分片上传方式。
下面给出几种常见的推流模板(请按CDN文档替换URL与streamkey)。
设置→流→服务:自定义;服务器填写:rtmp://live.examplecdn.com/live;流密钥填写:your_stream_key。编码器选择x264或硬件,分辨率/码率根据带宽配置(如720p 2500kbps)。
示例命令:ffmpeg -re -i input.mp4 -c:v libx264 -b:v 2500k -maxrate 2500k -bufsize 5000k -g 50 -c:a aac -b:a 128k -f flv "rtmp://live.examplecdn.com/live/your_stream_key"
部分CDN允许把.ts片段POST到指定URL:curl -X POST "https://cdn.example.com/upload?stream=your_stream_key" --data-binary @segment0001.ts -H "Content-Type: video/MP2T"。此方式需遵循CDN的片段命名和频率。
排查顺序建议:1) 检查推流地址和stream key是否正确(复制黏贴易出错);2) 检查端口和防火墙(RTMP常用1935或443);3) 查看推流器日志(OBS日志或FFmpeg输出),定位握手/鉴权/网络错误;4) 检查编码器设置(分辨率、码率、关键帧间隔),关键帧间隔建议与CDN要求一致(常见2秒);5) 验证TLS/证书问题(RTMPS或HTTPS上传时)。
使用-v verbose或-loglevel debug查看详细信息:ffmpeg -loglevel debug -re -i input -c:v libx264 ... "rtmp://..."。从日志中可看到TCP握手、HTTP响应码或鉴权失败信息。
如“Connection refused/timeout”多为地址或端口问题;“401/403”通常为鉴权错误;画面卡顿可能因带宽不足或编码设置过高;花屏或黑屏可能是编码器与CDN不兼容或者音视频codec不被支持。
使用本地录制或回环流测试(FFmpeg推到本地RTMP服务器)可以快速验证编码器链路,再逐步切换到CDN进行排查。