# listen-ffmpeg-http **Repository Path**: rocket049/listen-ffmpeg-http ## Basic Information - **Project Name**: listen-ffmpeg-http - **Description**: 监听播放用 ffmpeg 推送的http-wav流 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-12-10 - **Last Updated**: 2023-12-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 监听播放用 ffmpeg 推送的http-wav流 测试通过:ffmpeg 4.4.2 用法: ffmpeg -i xxx [其他参数] -ac 2 -ar 16k -f wav http://server_ip:8080/play 默认监听8080端口,可以通过 `-p` 参数修改服务端口。 ## 关于数据流解析 为了解析 `ffmpeg` 推送的`http-wav`流,我保存了一段样本进行研究,发现它使用的是`http-post`协议,因为推送长度不确定,所以使用的是`chunk`模式一段一段推送数据,数据开头以`Icy-MetaData:1\r\n`开始,然后是一段一段的`chunk`模式数据段,数据格式很简单:`LENGTH\r\nDATA\r\n`,不断重复这样的数据段长度`LENGTH`是16进制数,DATA是二进制数据,当DATA等于0时,数据传输结束。 第一个数据段内容是`wav`文件头,包含音频元数据。后续的数据段是二进制的`PCM`数据,可以直接给播放器播放。 但是后续数据段中夹杂这一些短数据,我不知其意,但是可以确定它们不是`PCM`数据,如果把这些数据给播放器就会造成杂音。我在网上查了一些资料,但是没有看到有用的,我也懒得去研究 `ffmpeg` 的源代码,最后我只是简单的舍弃了那些长度小于255的数据段。