首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于RTP协议的FFmpeg RTP_Mpegts

基于RTP协议的FFmpeg RTP_Mpegts
EN

Stack Overflow用户
提问于 2018-01-23 17:40:18
回答 1查看 5K关注 0票数 2

我正在尝试实现一个基于FFmpeg的客户机/服务器应用程序。不幸的是,RTP_MPEGTS并没有记录在官方的FFmpeg文档.格式中。不管怎样,我从这个旧螺纹中找到了灵感。

服务器端

(1)捕获麦克风音频作为输入。(2)将其编码为pcm8khzmono;(3)通过rtp协议将其本地发送为RTP_MPEGTS格式。

代码语言:javascript
复制
ffmpeg -f avfoundation -i none:2  -ar 8000 -acodec pcm_u8 -ac 1 -f rtp_mpegts rtp://127.0.0.1:41954
  • 这是可行的,但在启动时它提醒"mpegts @ 0x7fda13024600帧大小未设置“。

客户端(在同一台计算机上)

(1)接收rtp音频流输入(2)将其写入文件或回放。

代码语言:javascript
复制
ffmpeg -i rtp://127.0.0.1:41954 -vcodec copy -y "output.wav"
  • 我使用-vcodec copy是因为我已经在另一个-acodec copy无法工作的rtp流中验证了它。
  • 在使用Ctrl+C快捷方式关闭时,它会打印: 输入#0,rtp,从'rtp://127.0.0.1:41954':持续时间: N/A,开始: 8.956122,比特率: N/A程序1元数据: service_name : Service01 service_provider: FFmpeg stream #0:0: Data: bin_data (6 / 0x0006)输出#0,wav,到'output.wav':输出文件#0不包含任何流。
  1. 我不明白客户端是否没有接收到任何流,或者它不能将rtp数据包写入"output.wav“文件。(客户端还是服务器问题?)
  2. 旧螺纹中解释了一个解决办法。服务器上可以运行两个ffmpeg实例:一个由于mpegts而生成"tmp.ts“文件,另一个以"tmp.ts”作为输入并通过rtp对其进行流。有可能吗?
  3. 有什么更好的方法来实现这个客户机/服务器的最低延迟吗?

谢谢你提供的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-07 13:55:06

我用一个.aac文件对它进行了测试,它起了作用:

流:

(注意,我使用多播地址。

但是,如果您在同一台计算机上测试流和接收,则可以将127.0.0.1用作本地主机的回送地址。)

代码语言:javascript
复制
ffmpeg -f lavfi -i testsrc \
-stream_loop -1 -re -i "music.aac" \
-map 0:v -map 1:a \
-ar 8000 -ac 1 \
-f rtp_mpegts "rtp://239.1.1.9:1234"

您需要一个视频源的rtp_mpegts穆克塞。我用lavfi创建了一个。

我使用-stream_loop为我的测试永远循环.aac文件。你不需要这个麦克风作为输入。

捕获流:

代码语言:javascript
复制
ffmpeg -y -i "rtp://239.1.1.9:1234" -c:a pcm_u8 "captured_stream.wav"

我在捕获时使用-c:a pcm_u8,因为在中使用它在捕获端不起作用。

输出是一个低质量的8bit8kHz mono音频文件,但这正是您所要求的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48407760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档