@@ -18,6 +18,7 @@ package com.pedro.srt.mpeg2ts.packets
1818
1919import android.util.Log
2020import com.pedro.common.frame.MediaFrame
21+ import com.pedro.common.getStartCodeSize
2122import com.pedro.common.removeInfo
2223import com.pedro.common.toByteArray
2324import com.pedro.srt.mpeg2ts.Codec
@@ -111,7 +112,7 @@ class H26XPacket(
111112 */
112113 private fun fixHeader (byteBuffer : ByteBuffer , isKeyFrame : Boolean ): ByteBuffer {
113114 var noHeaderBuffer = removeHeader(byteBuffer, isKeyFrame) // remove video info header
114- val startCodeSize = getStartCodeSize(noHeaderBuffer )
115+ val startCodeSize = noHeaderBuffer. getStartCodeSize()
115116 if (startCodeSize == 0 ) { // make sure buffer start with prefix
116117 val bufferWithPrefix = ByteBuffer .allocate(noHeaderBuffer.remaining() + 4 )
117118 bufferWithPrefix.putInt(0x00000001 )
@@ -122,9 +123,11 @@ class H26XPacket(
122123 val vps = this .vps ? : byteArrayOf()
123124 val sps = this .sps ? : byteArrayOf()
124125 val pps = this .pps ? : byteArrayOf()
126+ val codec = this .codec
125127 val audSize = if (codec == Codec .AVC ) 6 else 7
126128 val videoHeader = vps.plus(sps).plus(pps)
127- val validBuffer = ByteBuffer .allocate(audSize + videoHeader.size + noHeaderBuffer.remaining())
129+ val noHeaderBytes = noHeaderBuffer.toByteArray()
130+ val validBuffer = ByteBuffer .allocate(audSize + videoHeader.size + noHeaderBytes.size)
128131 validBuffer.putInt(0x00000001 )
129132 if (codec == Codec .AVC ) {
130133 validBuffer.put(0x09 .toByte())
@@ -135,7 +138,7 @@ class H26XPacket(
135138 validBuffer.put(0x50 .toByte())
136139 }
137140 validBuffer.put(videoHeader)
138- validBuffer.put(noHeaderBuffer.toByteArray() )
141+ validBuffer.put(noHeaderBytes )
139142 validBuffer.rewind()
140143 configSend = true
141144 validBuffer
@@ -147,7 +150,7 @@ class H26XPacket(
147150
148151 private fun getVideoInfoData (byteBuffer : ByteBuffer ): ByteArray {
149152 byteBuffer.rewind()
150- val startCodeSize = getStartCodeSize(byteBuffer )
153+ val startCodeSize = byteBuffer. getStartCodeSize()
151154 return if (startCodeSize == 0 ) { // make sure video info start with prefix
152155 val validBuffer = ByteBuffer .allocate(byteBuffer.remaining() + 4 )
153156 validBuffer.putInt(0x00000001 )
@@ -189,18 +192,4 @@ class H26XPacket(
189192 return byteBuffer
190193 }
191194 }
192-
193- private fun getStartCodeSize (byteBuffer : ByteBuffer ): Int {
194- var startCodeSize = 0
195- if (byteBuffer.get(0 ).toInt() == 0x00 && byteBuffer.get(1 ).toInt() == 0x00
196- && byteBuffer.get(2 ).toInt() == 0x00 && byteBuffer.get(3 ).toInt() == 0x01 ) {
197- // match 00 00 00 01
198- startCodeSize = 4
199- } else if (byteBuffer.get(0 ).toInt() == 0x00 && byteBuffer.get(1 ).toInt() == 0x00
200- && byteBuffer.get(2 ).toInt() == 0x01 ) {
201- // match 00 00 01
202- startCodeSize = 3
203- }
204- return startCodeSize
205- }
206195}
0 commit comments