ffmpeg和ffplay 推送和播放RTP流

文章介绍了如何使用ffmpeg将视频文件推送到RTP流,同时生成SDP文件供VLC播放,以及如何使用ffmpeg从RTP流中拉取内容并保存为MP4文件。此外,还提到了live555库生成SDP文件的方法和ffplay播放RTP流的命令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ffmpeg 推送rtp流,保存成sdp文件,再用vlc播放sdp
下面这个是把abc.mp4文件推送到rtp://127.0.0.1:5004\abc.mp4端口,同时输出sdp文件到test_rtp_h264.sdp
-an参数的作用是只推送视频, 没推送音频.

ffmpeg -re -i d:\\abc\\abc.mp4  -an -f rtp rtp://127.0.0.1:5004\abc.mp4>D:\\abc\\test_rtp_h264.sdp
ffmpeg -re -i d:\\abc\\abc.mp4 -vcodec copy -map 0:v -an -f rtp rtp://127.0.0.1:5004\abc.mp4>D:\\abc\\test_rtp_h264.sdp
ffmpeg -re -i d:\\abc\\abc.mp4 -vcodec copy -an -f rtp rtp://127.0.0.1:5004\abc.mp4>D:\\abc\\test_rtp_h264.sdp

ffmpeg -re -thread_queue_size 4 -i guagnnianzhiwai.mp4 -strict -2 -vcodec copy -an -f rtp rtp://127.0.0.1:6008 -acodec copy -vn -sdp_file sdp_file.sdp -f rtp rtp://127.0.0.1:7008

使用ffmpeg生成SDP文件

ffmpeg -i "rtp://127.0.0.1:1234" -c copy -map 0 -f sdp output.sdp

其中,-i选项指定输入流的URL,-c copy选项表示不进行编解码,-map 0选项表示映射所有流,-f sdp选项表示输出SDP文件。执行该命令会将SDP文件保存到output.sdp文件中。

使用live555生成SDP文件
live555是一个开源的C++库,用于实现实时流协议(RTSP)和实时传输协议(RTP)。它提供了一些命令行工具,可以用来生成SDP文件。

首先,您需要编译live555库(可以从官网下载源代码并按照说明进行编译)。然后,使用openRTSP工具来生成SDP文件,例如:

openRTSP -D 1 -P -t -u "rtsp://127.0.0.1:554/live.sdp" > output.sdp

其中,-D 1选项表示只下载一个媒体流,-P选项表示打印SDP信息,-t选项表示下载超时时间为1秒,-u选项指定RTSP URL。执行该命令会将SDP文件输出到控制台,您可以将其重定向到文件中。

ffplay 播放rtp流:

ffplay -protocol_whitelist "file,udp,rtp" -i D:\\abc\\test_rtp_h264.sdp 

ffmpeg拉取rtp流,再把rtp流保存成mp4

ffmpeg -protocol_whitelist "file,rtp,udp" -i D:\\abc\\test_rtp_h264.sdp -strict -2  -vcodec copy -acodec copy -f mp4  saved_video_file.mp4

 
ffmpeg -protocol_whitelist "file,rtp,udp" -i D:\\abc\\test_rtp_h264.sdp  d:\\abc\\out.mp4

### 如何使用 `ffplay` 播放 RTSP 视频 `ffplay` 是 FFmpeg 提供的一个简单媒体播放器工具,可以直接用来播放 RTSP 。以下是具体的命令参数配置方法: #### 基本命令结构 要使用 `ffplay` 播放 RTSP 视频,可以按照以下基本命令格式执行: ```bash ffplay rtsp://<服务器IP>:<端口号>/<路径> ``` 其中 `<服务器IP>` 替换为实际的 IP 地址,`<端口号>` `<路径>` 根据具体 RTSP 服务提供商的要求填写。 #### 示例命令 假设有一个 RTSP 地址如下所示: ``` rtsp://192.168.1.100:554/stream1 ``` 那么完整的播放命令将是: ```bash ffplay rtsp://192.168.1.100:554/stream1 ``` #### 可选参数 为了优化播放效果或满足特定需求,还可以添加一些可选参数。常见的参数包括但不限于以下几个: - `-loglevel quiet`: 关闭日志输出,使终端界面更加简洁。 - `-sync video|audio`: 设置同步方式(默认为音频优先),可以选择视频 (`video`) 或者音频 (`audio`) 同步模式。 - `-framedrop`: 开启帧丢弃功能,在设备性能不足的情况下自动跳过部分画面以保持畅度。 综合以上选项后的一条完整示例命令可能看起来像这样: ```bash ffplay -loglevel quiet -sync video -framedrop rtsp://192.168.1.100:554/stream1 ``` 需要注意的是,某些情况下 RTSP 可能会因为网络延迟或其他原因导致卡顿现象发生;此时可以通过调整缓冲区大小来改善体验[^1]。 对于更复杂的场景比如需要解析多个音视频轨道或者仅提取指定类型的媒体数据,则需要用到高级 API 编程接口如 C/C++ 调用 libavformat 库函数实现自定义逻辑处理程][^[^24]。 当遇到无法成功连接至目标源的问题时,请确认本地环境已正确安装并配置好支持 RTSP 协议版本号匹配以及防火墙设置允许外部访问相应端口范围内的量传输活动情况是否存在异常状况等问题存在可能性较大些[^3].
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值