原因:由于需要涉及到RTP的推流分析,故调试查看FFmpeg内部实现流程
文件类型:.264,.aac
概况:FFmpeg首先通过sdp文件的创建,然后主要通过rtpenc.c文件和rtpenc_h264_hevc.c针对264文件进行内部进行格式封装。然后通过udp.c文件中进行发送.
命令行如下:
ffmpeg -re -i q.264 -vcodec copy -f rtp rtp://127.0.0.1:1234
ffplay -protocol_whitelist “file,udp,rtp” -i rtp://127.0.0.1:1234
sdp文件创建主要实现在sdp.c文件中.sdp的生成文件信息大体如下,ffplay通过sdp信息进行数据拉流与解析,主要的实现方法为av_sdp_create,sdp_write_header,sdp_write_media_attributes等.
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 57.72.101
m=video 1234 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1; sprop-parameter-sets=Z2QADazZQUH6EAAAPpAADqYA8UKZYA==,aOvjyyLA; profile-level-id=64000D
FFmpeg每次获取一个avpacket然后调用av_interleaved_write_frame方法,该方法通过oform