ffmpeg - 使用 FFMPEG 将 Socket 上的 RTP 音频数据重新采样为 PCM 数据
问题描述
我想接收一个 RTP 流并通过 TCP / UDP 套接字发送接收到的原始数据。为此,我正在尝试以下命令。
我正在使用以下命令发送 RTP 流。
ffmpeg -re -i hello.wav -ar 8000 -f mulaw -f rtp rtp://127.0.0.1:1234
接收方通过 TCP/UDP 套接字重新传输流。
ffmpeg -i rtp://127.0.0.1:1234 -f mulaw tcp://127.0.0.1:5555 -hide_banner
一个 Player 播放这个 Socket 流来验证。
ffplay tcp://127.0.0.1:5555?listen
我的第二个命令显示它接收数据并通过 5555 端口将数据传输到 tcp。
Input #0, rtp, from 'rtp://127.0.0.1:1234':
Duration: N/A, start: 0.000000, bitrate: 64 kb/s
Stream #0:0: Audio: pcm_mulaw, 8000 Hz, mono, s16, 64 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (pcm_mulaw (native) -> pcm_mulaw (native))
Press [q] to stop, [?] for help
Output #0, mulaw, to 'tcp://127.0.0.1:5555':
Metadata:
encoder : Lavf58.29.100
Stream #0:0: Audio: pcm_mulaw, 8000 Hz, mono, s16, 64 kb/s
Metadata:
encoder : Lavc58.54.100 pcm_mulaw
但是第三个命令没有收到任何内容,即使我尝试在命令三中使用 FFMPEG 将响应转储到文件中,但结果相同。
我在做什么错,请使用 FFMPEG 建议正确的命令。
解决方案
以下三个命令对我有用。
ffmpeg -re -i music.wav -ar 8000 -f mulaw -f rtp rtp://127.0.0.1:1236
ffmpeg -i rtp://127.0.0.1:1236 -f wav tcp://127.0.0.1:1256
ffplay tcp://127.0.0.1:1256?listen -ar 8000
我能够将文件作为 RTP 发送,将其转换为原始 wav 并通过套接字发送,然后从该套接字播放。
推荐阅读
- css - 垂直导航栏内容在小屏幕底部被剪裁
- ibm-midrange - IBM I:带有选项 (*SQL) 的 CRTSQLRPGI
- html - CSS SVG Wheen 动画不保持坐标
- javascript - sequelize 中切换的数据字段
- angular - 无法解析'@firebase/auth-types
- javascript - 悬停功能后图像不会调整为网格
- collectd - 脚本的 Collectd Exec 插件权限被拒绝
- python - Python 在控制台中执行命令
- node.js - 使用 aws ec2 部署角度节点应用程序 - 错误:无法连接到服务器
- react-native - React Native 中的组件异常