(frame VideoFrame, pes *mpegts.MpegtsPESFrame)
| 164 | } |
| 165 | |
| 166 | func (ts *MemoryTs) WriteVideoFrame(frame VideoFrame, pes *mpegts.MpegtsPESFrame) (err error) { |
| 167 | var buffer net.Buffers |
| 168 | //需要对原始数据(ES),进行一些预处理,视频需要分割nalu(H264编码),并且打上sps,pps,nalu_aud信息. |
| 169 | if len(frame.ParamaterSets) == 2 { |
| 170 | buffer = append(buffer, codec.NALU_AUD_BYTE) |
| 171 | } else { |
| 172 | buffer = append(buffer, codec.AudNalu) |
| 173 | } |
| 174 | buffer = append(buffer, frame.GetAnnexB()...) |
| 175 | pktLength := util.SizeOfBuffers(buffer) + 10 + 3 |
| 176 | if pktLength > 0xffff { |
| 177 | pktLength = 0 |
| 178 | } |
| 179 | |
| 180 | var packet mpegts.MpegTsPESPacket |
| 181 | packet.Header.PacketStartCodePrefix = 0x000001 |
| 182 | packet.Header.ConstTen = 0x80 |
| 183 | packet.Header.StreamID = mpegts.STREAM_ID_VIDEO |
| 184 | packet.Header.PesPacketLength = uint16(pktLength) |
| 185 | packet.Header.Pts = uint64(frame.PTS) |
| 186 | pes.ProgramClockReferenceBase = packet.Header.Pts |
| 187 | packet.Header.Dts = uint64(frame.DTS) |
| 188 | packet.Header.PtsDtsFlags = 0xC0 |
| 189 | packet.Header.PesHeaderDataLength = 10 |
| 190 | packet.Buffers = buffer |
| 191 | return ts.WritePESPacket(pes, packet) |
| 192 | } |
nothing calls this directly
no test coverage detected