blueyi's notes

Follow Excellence,Success will chase you!

0%

FFmpeg处理视频流

FFMPEG支持创建多种协议的视频流,举例说明使用FFMPEG创建视频流,以及接受视频流

UDP协议

UDP全称为用户数据报协议(User Datagram Protocol,UDP)
下面的命令实现将本地文件以H.264祼流发送到地址udp://127.0.0.1:1234

1
ffmpeg -re -i minis.mp4 -vcodec copy -f h264 udp://127.0.0.1:1234

使用ffplay接收UDP视频流:

1
ffplay  udp://127.0.0.1:1234

ffplay也可以手动指定解码参数:ffplay -f h264 udp://127.0.0.1:1234

RTP协议

RTP是实时传输协议(Real-time Transport Protocol)
通过FFMPEG将本地文件作为输入创建基于RTP的视频流:

1
ffmpeg -re -i input.mpg -vcodec copy -an -f rtp rtp://127.0.0.1:20000 -vn -acodec copy -f rtp rtp://127.0.0.1:30000
  • “-re” 指定ffmpeg以正确的速率推送流,如果不指定ffmpeg会尽可能快的推送流
  • “input.mpg” 输入文件
  • “-vcodec copy”和“-acodec copy” 表示不改变原来视频文件的视频和音频的编码格式
  • “-an”(no audio)和“-vn”(no video)分别用来单独输出视频和音频,否则会出现错误[rtp @ 0x353cb00] Only one stream supported in the RTP muxer
  • “-f rtp” 指定输出的视频流格式为RTP
  • “rtp://ip:port” 指定IP和端口

例如我的测试命令:

1
ffmpeg -re -i bunny.avi -vcodec copy -an -f rtp rtp://127.0.0.1:20000 -vn -acodec aac -f rtp rtp://127.0.0.1:30000

我把音频编码格式改成了aac,否则我这里由于系统中不支持AC3会导致失败

上述命令创建后会输出很多信息,其中包含SDP信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SDP:
v=0
o=- 0 0 IN IP4 127.0.0.1
s=No Name
t=0 0
a=tool:libavformat 57.66.102
m=video 20000 RTP/AVP 96
c=IN IP4 127.0.0.1
b=AS:2500
a=rtpmap:96 MP4V-ES/90000
a=fmtp:96 profile-level-id=1; config=000001B001000001B58913000001000000012000C48D8800C51AB43C1463000001B24C61766335312E34342E30
m=audio 30000 RTP/AVP 97
c=IN IP4 127.0.0.1
b=AS:341
a=rtpmap:97 MPEG4-GENERIC/48000/6
a=fmtp:97 profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3; config=11B056E500

将上述内容保存到文件,命名为a.sdp

然后运行ffplay接收流:

1
ffplay bunny.sdp -protocol_whitelist file,udp,rtp

注意,如果没有添加后面的-protocol_whitelist选项,会报错Protocol not on whitelist 'file,crypto'!/0 bunny.sdp: Invalid data found when processing input

RTSP协议

RTSP协议全称为实时流协议(Real Time Streaming Protocol)

ffserver

参考:
1.FFmpeg Protocols Documentation
2.FFmpeg wiki:StreamingGuide
3.FFmpeg wiki:ffserver
4.RTP streaming with ffmpeg

Welcome to my other publishing channels