it编程 > 游戏开发 > ar

在Ubuntu上使用FFmpeg实现RTP音频传输与播放的完整流程

36人参与 2025-07-28 ar

引言

在音视频开发或远程通信场景中,rtp(real-time transport protocol) 是一种常用的实时音频传输协议。本文将介绍如何使用 ffmpeg 在 ubuntu 上实现从一台主机发送音频流,另一台主机接收并播放音频的完整流程。

目标:从 192.168.1.129 推送 test.wav 音频文件,通过 rtp 发送到 192.168.1.137,后者通过 ffplay 播放。

环境准备

两台 ubuntu 主机(或一台主机多个终端模拟)

安装 ffmpeg:

sudo apt install ffmpeg

音频测试文件 test.wav,要求:

可用以下命令确认:

ffmpeg -i test.wav

推送端配置(192.168.1.129)

使用 ffmpeg 推送音频流:

ffmpeg -re -stream_loop -1 -i test.wav \
  -acodec pcm_s16be -ar 16000 -ac 1 \
  -payload_type 97 \
  -f rtp rtp://192.168.1.137:5004

说明:

  • pcm_s16be:必须是 big endian,才能对应 rtp 中的 l16
  • -payload_type 97:动态负载编号,需与 sdp 一致
  • 5004:目标主机 rtp 监听端口

接收端配置(192.168.1.137)

step 1:创建 sdp 文件

rtp 接收端需要通过 sdp 文件了解流的参数。

新建 audio.sdp 文件:

v=0
o=- 0 0 in ip4 192.168.1.137
s=rtp audio
c=in ip4 192.168.1.137
t=0 0
m=audio 5004 rtp/avp 97
a=rtpmap:97 l16/16000/1

97 为动态 payload 类型,与推送端匹配
l16/16000/1 表示 16-bit pcm / 16000hz / mono

step 2:使用 ffplay 播放

运行:

ffplay -protocol_whitelist file,udp,rtp -i audio.sdp

如果推送成功,你将听到 test.wav 被循环播放。

常见问题排查

问题原因与解决方法
听到「嘟嘟」噪音使用 nc 监听原始 rtp 数据 → 无法解码 rtp header,不能作为播放器使用
没有声音,ffplay 无报错编码格式不匹配,确保 pcm_s16be 与 sdp 中的 l16 一致
ffplay 显示 0kb 缓冲推送没启动 / ip 写错 / 防火墙阻挡
播放器显示 unable to receive rtp payloadsdp 文件不完整或 payload type 不一致

网络连通性验证技巧

在接收端检查 udp 流是否达到:

tcpdump -n -i any udp port 5004

确认有数据包进来再进一步排查音频格式问题。

附加:麦克风实时采集推流(可选)

使用 arecord 实时采集麦克风音频并通过 ffmpeg 发送:

arecord -d hw:0,0 -f s16_le -c 1 -r 16000 -t raw | \
ffmpeg -f s16le -ar 16000 -ac 1 -i - \
  -acodec pcm_s16be -f rtp rtp://192.168.1.137:5004

此时接收端仍可使用前文 sdp 文件播放。

总结

通过本文方法,你可以成功实现:

附录:完整脚本示例

播放器脚本 play_rtp.sh

#!/bin/bash
cat > audio.sdp <<eof
v=0
o=- 0 0 in ip4 192.168.1.137
s=rtp audio
c=in ip4 192.168.1.137
t=0 0
m=audio 5004 rtp/avp 97
a=rtpmap:97 l16/16000/1
eof

ffplay -protocol_whitelist file,udp,rtp -i audio.sdp

推流脚本 send_rtp.sh

#!/bin/bash
ffmpeg -re -stream_loop -1 -i test.wav \
  -acodec pcm_s16be -ar 16000 -ac 1 \
  -payload_type 97 -f rtp rtp://192.168.1.137:5004

如有更高需求,例如 rtp over rtsp 或 webrtc,可以进一步拓展。

以上就是在ubuntu上使用ffmpeg实现rtp音频传输与播放的完整流程的详细内容,更多关于ubuntu ffmpeg rtp音频传输与播放的资料请关注代码网其它相关文章!

(0)

您想发表意见!!点此发布评论

推荐阅读

Tomcat后台部署WAR包的完整流程

07-28

新增三机型升级! 华为鸿蒙 HarmonyOS 6.0.0 (20) Developer Beta2版推送

08-05

部分经典机器可惜淘汰! 华为鸿蒙HarmonyOS 5.1版本机型推送系统补丁

08-05

好看又能打! 技嘉雕妹精选白色主机套装推荐

07-21

QD-OLED新格调! Alienware外星人AW2725D显示器评测

07-21

解决Failed to get nested archive for entry BOOT-INF/lib/xxx.jar问题

08-06

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论