FFMPEG对于rtp的推流以及VLC验证

2023-11-13

前言

参考资料:

https://blog.csdn.net/zhoubotong2012/article/details/86711097

 

https://blog.csdn.net/zhoubotong2012/article/details/86711097

 

 

 

正文

首先, rtp每次推送只能推一路流, 如果用ffmpeg推送普通的影片,比如, mp4, 起码有视频流以及音频流,请在ffmpeg命令里面指定要推送的是视频还是音频, 否则会出现以下错误:

 

 

 

推送命令:

##推送视频流:
ffmpeg -re -i magic-01.mp4 -vcodec  libx264 -an -f rtp rtp://192.168.0.101:11112>test_magic_01_video.sdp
##推送音频流
ffmpeg -re -i magic-01.mp4  -vn -acodec copy -f rtp rtp://127.0.0.1:11112>test_magic_01_audio.sdp

解释:
-re 表示实时推送, 不加的话就是按照最大速度推送.
-an 表示, 不要推audio 音频
-vn 表示 不要推 video 视频
后面的sdp表示顺便保存到sdp文件里面去.

 

注意!!!!

标准协议里面规定,rtp的端口要用偶数端口, rtcp的端口要用奇数端口, 在一些开源项目以及软件里面都遵守这个规则, 譬如:jrtplib,live555等, 如果你随便推送到奇数端口那么vlc是会报错的,就是10s内没有接收到数据.

 

执行推送命令以后ffmpeg出现:

2020-07-10_13-11.png

然后你可以看到当前目录下面有一份文件:

2020-07-10_13-11_1.png

 

内容为:

 

 

2020-07-10_13-12.png

 

注意到 文件前面的 [SDP]字样没有? 这个是不标准的, 用vlc打开是没有任何反应的, 根据描述:

 

2020-07-09_20-20.png

需要删除第一行的SDP字样,如下:

v=0
o=- 0 0 IN IP4 127.0.0.1
s=No Name
c=IN IP4 192.168.0.101
t=0 0
a=tool:libavformat 58.29.100
m=video 11112 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1

 

然后, 使用 vlc打开可以看到:

 

 

 

总结

就一个简单的ffmpeg推送rtp流, vlc接收并且播放都有几个坑点...

真不知道以后要弄 rtp接收合并为rtmp的时候会怎么样...

 

 

 

草稿[试错]

尝试推送普通mp4影片:

ffmpeg -re -i magic-01.mp4 -vcodec copy -f rtp rtp://127.0.0.1:1234>test_rtp_h264.sdp

出错:

 

其他人的解释:

2020-07-09_18-46.png

rtp自身限制每次只能一个媒体流, 修正如下:

##分别推送 视频以及音频到不同的端口.
ffmpeg -re -i magic-01.mp4 -vcodec copy -an -f rtp rtp://127.0.0.1:11111>test_magic_01_video.sdp -vn -acodec copy -f rtp rtp://127.0.0.1:11112>test_magic_01_audio.sdp

成功:

2020-07-09_18-50.png本机

 

2020-07-09_18-50_1.png

美中不足的是,这个命令似乎先推audio,再推video,vidoe的sdp一直为0字节.

 

去掉audio的推送以后就能够直接看到video sdp有内容了,

然后, 查看本机端口,11111的使用情况:

2020-07-09_19-37.png

.....没有任何程序占用它们....

也就是说, 上面的文章都漏了一个东西, ffmpeg是推送端, 那么接收端在哪里? 哪个程序在监听11111这个端口?

 

 

尝试一

又查了一些资料, 我终于明白了:

 

 

https://www.cnblogs.com/vitoboy/p/8393205.html

 

首先, 使用ffmpeg推rtp的时候需要有一个接收端, vlc可以先作为接收端, 首先在vlc上面

"媒体"> "打开网络窜流"

2020-07-09_19-49.png

点击播放, 可以看到

 

vlc已经在准备中了, 然后 查询一下 端口11111的占用情况:

2020-07-09_19-51.png

vlc已经在监听端口了, 好了, 接下来就用ffmpeg推rtp流了:

ffmpeg -re -i magic-01.mp4 -vcodec copy -an -f rtp rtp://127.0.0.1:11111>test_magic_01_video.sdp

 

ffmpeg工作正常:

 

 

而这时候你会看到vlc提醒:

2020-07-09_19-52_1.png

https://www.techwalla.com/articles/how-to-play-an-sdp-stream-on-vlc

 

 

尝试二

 

[尝试一]不成功, 又找了些资料:

https://stackoverflow.com/questions/61687212/ffmpeg-vlc-won-t-open-sdp-files-generated-by-ffmpeg

里面提到:

2020-07-09_20-20.png

我查了一下ffmpeg生成的sdp格式, 确实有:

2020-07-09_20-19.png

SDP:
在第一行这种问题

 

删除掉然后有:

v=0
o=- 0 0 IN IP4 127.0.0.1
s=No Name
c=IN IP4 127.0.0.1
t=0 0
a=tool:libavformat 58.29.100
m=video 11111 RTP/AVP 96
b=AS:569
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1; sprop-parameter-sets=Z2QAH6zZQEQE3lqEAAAPpAAC7gA8YMZY,aO+Pyw==; profile-level-id=64001F

然后用vlc重新打开:

ps:

我直接用的命令行,因为能够看到出错信息:

vlc test_magic_01_video.sdp

出现界面,

 

等待一段时间,报错:

2020-07-09_20-23_2.png

 

无意中看到资料, 原来协议规定了rtp是偶数端口, rtcp是奇数端口, 而在 很多开源项目都遵守这个规定, 只要将端口改为偶数 vlc就能正常播放了. 

话说, 网上用端口11111来推送rtp流的例子是怎么用vlc播放的? vlc播放不了的啊.

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FFMPEG对于rtp的推流以及VLC验证 的相关文章

  • ffmpeg流rc缓冲区下溢

    目前我正在使用开源工具 ffmpeg ffserver 建立一个屏幕共享平台 分享之初一切都很好 大约 1 1 2 分钟后 我在输出中得到以下异常 flv 0x3a47aa0 rc buffer underflow flv 0x3a47aa
  • FFmpeg - 找不到 ExecuteBinaryResponseHandler - Android/Java

    我正在尝试制作一个用于反应原生的模块 它将把视频变成 gif 我对 android studios java 几乎没有经验 但我很想了解更多 我在用这个图书馆 https github com WritingMinds ffmpeg and
  • Android 上的 FFmpeg

    我已经在 Android 上编译了 FFmpeg libffmpeg so 现在我必须构建一个像 RockPlayer 这样的应用程序 或者使用现有的 Android 多媒体框架来调用 FFmpeg 您有在 Android StageFri
  • 来自 http 直播 m3u8 文件的 FFMPEG mp4? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何从 http 直播 m3u8 文件中提取 mp4 我尝试了下面这个命令 ffmpeg i input file f rawvideo
  • 在流 #1 中找不到编解码器 pcm_alaw 的标签,使用 ffmpeg 连接 2 个文件时容器当前不支持编解码器 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试连接两个文件 第一个文件包含音频和视频 第二个文件仅包含视频 我用以下ffmpeg命令 ffmpeg command ffmpe
  • 如何调试视频解码损坏?

    我刚刚开始为一家新公司工作 我的新角色要求我帮助调试他们通过解码帧接收到的视频损坏 尽管我打算深入研究代码并研究问题的具体细节 但它让我开始思考视频调试的总体情况 由于处理视频对我来说非常陌生 整个过程看起来相当复杂 而且似乎有很多地方可以
  • 在 R 中导入 png 文件并转换为动画(.mp4)

    我正在尝试用 R 中的几个 png 文件创建一个简短的动画 我尝试了 packagemagick但只有当我将它们保存为 gif 时它才有效 当我尝试另存为 mp4 时 它将生成一个 mp4 文件 但一旦打开它 只会显示第一张图像 我的代码是
  • ffmpeg创建RTP流

    我正在尝试使用 ffmpeg 进行编码和流式传输 libavcodec libavformat MSVC x64 with Zeranoe builds 这是我的代码 很大程度上改编自编码示例 删除了错误处理 include stdafx
  • 使用 ffmpeg 将 h.264 avi 容器转换为 mp4

    我想使用 ffmpeg 将 h 264 avi 容器转换为 mp4 容器 我发现这个有效 ffmpeg i myfile avi vcodec copy myfile mp4 ffmpeg version N 51169 gcedf276
  • Google Cloud Platform:将上传的 MP4 文件转换为 HLS 文件

    我正在构建一个平台 允许用户将一些视频文件 20 40 秒 从手机上传到服务器 所有这些上传目前都运行良好 文件通过nodejs云功能存储在谷歌存储桶中 现在我想创建一个 gcp 转码器作业 它将上传的 mp4 视频文件转换为 hls 视频
  • 如何使用 ffmpeg 提取时间精确的视频片段?

    这并不是一个特别新的问题领域 但我已经尝试过那里建议的内容 但运气不佳 那么 我的故事 我有一大段 15 秒的直接来自camera mov 视频 我想从中提取特定的块 我可以通过开始时间和停止时间 以秒为单位 来识别该块 我首先尝试执行我称
  • C# - 捕获 RTP 流并发送到语音识别

    我正在努力实现的目标 在 C 中捕获 RTP 流 将该流转发到 System Speech SpeechRecognitionEngine 我正在创建一个基于 Linux 的机器人 它将接受麦克风输入 将其发送给 Windows 机器 Wi
  • 使用 mkfifo 和传输流,这可能吗?

    我想执行一个 bash 脚本来执行以下操作 应用程序 ffmpeg 生成实时传输流 ts 文件 我需要处理这个实时流 执行解复用等 现在我知道这必须通过 FIFO 来完成 但这是我的任务 我需要重定向 ffmpeg 的输出以写入 fifo
  • Python 用静态图像将 mp3 转换为 mp4

    我有x文件包含一个列表mp3我想转换的文件mp3文件至mp4文件带有static png photo 似乎这里唯一的方法是使用ffmpeg但我不知道如何实现它 我编写了脚本来接受输入mp3文件夹和一个 png photo 然后它将创建新文件
  • H264 字节流到图像文件

    第一次来这里所以要温柔 我已经在给定的 H 264 字节流上工作了几个星期 一般注意事项 字节流不是来自文件 它是从外部源实时提供给我的 字节流使用 Android 的媒体编解码器进行编码 当将流写入扩展名为 H264的文件时 VLC能够正
  • ffmpeg AVFrame 到 opencv Mat 转换

    我目前正在开发一个使用 ffmpeg 解码接收到的帧的项目 解码后 我想将 AVFrame 转换为 opencv Mat 帧 以便我可以在 imShow 函数上播放它 我拥有的是字节流 我将其读入缓冲区 解码为 AVFrame f fope
  • 在 ffmpeg 中,如何使用scale2ref 过滤器缩放 dvdsub 字幕以匹配视频大小?

    我有一个从直播电视录制的 mpeg 文件 其中包含视频以及多个音频和字幕流 我的最终目标是能够创建较小的视频文件 因为 mpeg 文件大小为数 GB 我在这条道路上的第一步只是能够选择视频 音频和字幕流中的每一个并将它们复制到 mkv 文件
  • 在 MacOS 终端上运行 ffmpeg [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我对 MacOS 相当陌生 我发现使用终端来获取信息并不容易ffmpeg和我在 Window 上一样正常运行 我有 ffmpeg 二进制文件ffmpe
  • 在 macOS 上为 MoviePy 安装 ffmpeg 失败并出现 SSL 错误

    我正在尝试编写一个 Python 程序 在 Mac OS 10 11 16 上使用 MoviePy 将 MP4 文件转换为 GIF 我用 import moviepy editor as mp 我收到一条错误消息 说我需要打电话imagei
  • 从 ffmpeg 获取实时输出以在进度条中使用(PyQt4,stdout)

    我已经查看了很多问题 但仍然无法完全弄清楚 我正在使用 PyQt 并且希望能够运行ffmpeg i file mp4 file avi并获取流式输出 以便我可以创建进度条 我看过这些问题 ffmpeg可以显示进度条吗 https stack

随机推荐

  • Pytorch-torch.nn.identity()方法详解

    Pytorch torch nn identity 方法详解 identity模块不改变输入 直接return input 一种编码技巧吧 比如我们要加深网络 有些层是不改变输入数据的维度的 在增减网络的过程中我们就可以用identity占
  • Web 前端常用正则校验规则

    Web 前端常用正则校验规则 作为 Web 前端开发 常用的正则校验规则有很多 下面是一些常见的示例 1 校验手机号码 手机号码的正则表达式可以根据不同国家和地区的手机号码格式进行调整 以下是中国大陆的手机号码正则表达式 const reg
  • 关于C语言fgets函数要注意的地方

    关于C语言fgets函数要注意的地方 fgets函数一般用来读入文件内容 每次读一行 然后存入缓存区 有人问那怎么读下一行 直至读完整个文本文件的内容 其实很简单 只要循环用fgets就行 如果你这次把第一行读完了 那么下一次文件指针就会从
  • 关于springboot中编写继承JpaRepository这个接口类时出现报红,不能继承这个接口的问题之解决方法

    这是第二次遇到这个问题只能怪自己之前没有习惯去记录遇到的问题 这次还是关于Jpa的 真的是在找博客的时候看到好多说在入口类里添加 EnableJpaRepositories basePackages xxx xxx xxx 这个注解的 我就
  • el-table-column中运用三元运算符

    在el table column中是不能直接运用三元运算符的 需要转化一下
  • Nacos2.2版本发布了,我为其贡献了几行代码并适配了PostgreSQL插件

    目录 一 背景 二 个人贡献 三 Nacos使用适配的PostgreSQL插件 3 1 插件源码工程项目结构 3 2 打包加载插件 3 3 修改配置文件为PostgreSQL连接字符串 3 4 导入数据库脚本文件 四 总结 一 背景 Nac
  • Springmvc 学习心得

    1 三层架构的介绍和mvc的设计模式 Springmvc的特点 清晰的角色划分 每个功能模块对应一个组件 1 前端控制器 DispatchServlet 2 处理器映射器 HanderMapping 根据 requestMapping 找到
  • Java单元测试框架-1-TestNg初识

    目录 1 1xUnit整体作用 1 2着重介绍Junit TestNg 1 3TestNg测试框架介绍 1 4Eclipse安装TestNG 1 5TestNg测试 1 1xUnit整体作用 xUnit是各种代码驱动测试框架的统称 这些框架
  • @property详细解读

    property 这个关键字 学过iOS的一定会经常用 但是如果你问一个人 property是干嘛用的 可能就会有人一脸茫然地问你 不就是声明属性用的么 这话当然对 那么 property的背后的机制是什么 是如果声明属性 做了哪些事情呢
  • 谈谈代码走读

    代码走读的重要性就不说了 我想谈谈对代码走读的总体认识 首先代码走读前 代码必须编译通过 强类型检查的语言 比如JAVA 自带的编译器就够了 如果是弱类型检查的语言 比如C C 应该用辅助的静态检查工具 比如lint 进行检查 毕竟机器发现
  • 刷题集——POJ 2179 Fliptile(枚举+模拟)

    Fliptile Time Limit 2000MS Memory Limit 65536K Total Submissions 28860 Accepted 10139 Description Farmer John knows that
  • vue element-ui 侧边栏刷新高亮丢失问题解决

    改造之前 侧边栏刷新高亮丢失 用的是rooter link包裹 代码如下
  • JS逆向steam登录

    JS逆向steam登录 前言 我们爬虫有时候 会遇到登录才能获取到数据的情况 最开始的时候我们只需要加入请求的data参数就可以 可是现在网站为了反爬 对登录的密码或者账号都做了加密处理 如果我们不破解出这些加密的密码或者账号 就没办法实现
  • 数据库报Connection is read-only. Queries leading to data modification are not allowed

    数据库报Connection is read only Queries leading to data modification are not allowed 具体是某张表的插入操作时报的错误 问题排查过程 这个超过是批量操作发生的 第一
  • Linux-du命令

    du命令 说明 du命令也是查看使用空间的 但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看 还是和df命令有一些区别的 参数 a或 all 显示目录中个别文件的大小 b或 bytes 显示目录或文件大小时 以b
  • EL表达式语言

    引用 http blog 163 com s zhchluo blog static 1501470820075205739439 基本语法 一 EL简介 1 语法结构 expression 2 与 运算符 EL 提供 和 两种运算符来存取
  • 【uniapp】this有时为啥打印的是undefined?(箭头函数修改this)

    博主 初映CY的前说 前端领域 本文核心 uniapp中this指向问题 前言 this大家知道是我们当前项目的实例 我们可以在这个this上面拿到我们原型上的全部数据 这个常用在我们在方法中调用其他方法使用 一 uniapp中this指向
  • Cplex—java集成,idea配置 步骤大全 windows版本

    首先搜索官网cplex下载安装包 本次示例以windows版本 1 双击打开安装包 2 选择简体中文 3 都是默认 修改路径的同学请记得自己的安装路径后面配置环境变量要用 4 这里我已经安装过了中间步骤直接跳过 5 接下来我们需要在java
  • 郑州大学校园网故障问题解决方法

    1 郑州大学校园网学生用户使用指南 可进入郑州大学网络管理中心网站 校园网交流QQ群 群一475137403 群二685466506 微信公众号 郑州大学网络管理中心 一 校园网注册 1 微信扫码并关注 郑州大学网络管理中心 点击进入微信公
  • FFMPEG对于rtp的推流以及VLC验证

    前言 参考资料 https blog csdn net zhoubotong2012 article details 86711097 https blog csdn net zhoubotong2012 article details 8