[https://blog.csdn.net/sweibd/article/details/79175541](https://blog.csdn.net/sweibd/article/details/79175541)
## 1、需要在编码中使能CODEC\_FLAG\_GLOBAL\_HEADER
AVCodecContext的flags |= CODEC\_FLAG\_GLOBAL\_HEADER
设置这个标志位后,才能在AVCodecContext中的extradata和extradata\_size得到对应的音视频头信息。
视频: AVCDecoderConfigurationRecord+ sps + pps
音频: ASC FLAG
## 2、设置rtmp发送中的头信息
```
AVCodecContext\* dest \= pStream\->codec;
if (\_pSendCtx\->oformat\->flags & AVFMT\_GLOBALHEADER) {
dest\->flags |= CODEC\_FLAG\_GLOBAL\_HEADER;
HostLogInfo("video oformat->flags=0x%08x, extradata\_size=%d", \_pSendCtx\->oformat\->flags, \_pVCodeCtx\->extradata\_size);
// for flv, we should avoid invoking ff\_avc\_parse\_nal\_units\_buf() in flvenc.c
if (\_pVCodeCtx\->extradata\_size \> 0) {
int extra\_size \= (uint64\_t)\_pVCodeCtx\->extradata\_size + FF\_INPUT\_BUFFER\_PADDING\_SIZE;
dest\->extradata \= (uint8\_t\*)av\_mallocz(extra\_size);
memcpy(dest\->extradata, \_pVCodeCtx\->extradata, \_pVCodeCtx\->extradata\_size);
dest\->extradata\_size \= \_pVCodeCtx\->extradata\_size;
}
}
```
关键点:
1. 设置dest中的flag信息
2. 设置dest中的extradata, extradata\_size信息
这样在avformat\_write\_header函数中才会头几帧写入sps/pps asc
- 序言
- 编解码
- H264
- HEVC码流解析
- H264编码原理
- 多媒体封装
- MP4
- 学好 MP4,让直播更给力
- AAC
- FLV
- 流媒体协议
- RTSP
- RTCP
- RTP
- H265 RTP封包笔记
- SDP
- RTMP
- RTMP URL
- rtmp url基础
- webrtc
- 编译
- 最简单的编译webrtc方案
- Webrtc音视频会议之Webrtc“不求甚解”
- Webrtc音视频会议之Mesh/MCU/SFU三种架构
- 音频传输之Jitter Buffer设计与实现
- Janus
- Webrtc音视频会议之Janus编译
- Webrtc音视频会议之Janus源码架构设计
- webrtc服务器-janus房间管理
- 源码分析
- WebRTC视频JitterBuffer详解
- 走读Webrtc 中的视频JitterBuffer(一)
- 走读webrtc 中的视频JitterBuffer(二)
- webrtc视频帧率控制算法机制
- 目标码率丢帧-1
- 目标帧率丢帧-2
- 29 如何使用Medooze 实现多方视频会议
- FFmpeg
- FFmpeg编译
- Window10下编译最新版FFmpeg的方法步骤
- FFMPEG静态库编译
- ffmpeg实现画中画
- FFmpeg推流器
- ffmpeg-aac
- OpenCV
- OpenCV学习笔记——视频的边缘检测
- 图像特征点匹配(视频质量诊断、画面抖动检测)
- 图像质量诊断