Skip to content

Commit 4ba166e

Browse files
committed
fix MPEGTS small
1 parent 238972c commit 4ba166e

File tree

2 files changed

+13
-7
lines changed

2 files changed

+13
-7
lines changed

srt/src/main/java/com/pedro/srt/mpeg2ts/MpegTsPacketizer.kt

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class MpegTsPacketizer(private val psiManager: PsiManager) {
3131

3232
companion object {
3333
const val packetSize = 188
34+
const val headerSize = 4
3435
}
3536

3637
private var pesContinuity = 0
@@ -72,23 +73,28 @@ class MpegTsPacketizer(private val psiManager: PsiManager) {
7273
packets.add(buffer.toByteArray())
7374
}
7475
is Pes -> {
75-
var adaptationFieldControl = AdaptationFieldControl.ADAPTATION_PAYLOAD
76-
writeHeader(buffer, true, mpegTsPayload.pid, adaptationFieldControl, pesContinuity)
76+
val data = mpegTsPayload.bufferData
77+
7778
val isAudio = psiManager.getAudioPid().toInt() == mpegTsPayload.pid
7879
val pcr = if (isAudio && !mpegTsPayload.isKeyFrame) null else TimeUtils.getCurrentTimeMicro()
7980
val adaptationField = AdaptationField(
8081
discontinuityIndicator = false,
8182
randomAccessIndicator = mpegTsPayload.isKeyFrame, //only video can be true
8283
pcr = pcr
8384
)
84-
buffer.put(adaptationField.getData())
85+
val adaptationData = adaptationField.getData()
86+
val isSmall = data.remaining() < buffer.remaining() - headerSize - adaptationData.size - mpegTsPayload.headerLength
87+
var adaptationFieldControl = if (isSmall) AdaptationFieldControl.PAYLOAD else AdaptationFieldControl.ADAPTATION_PAYLOAD
88+
writeHeader(buffer, true, mpegTsPayload.pid, adaptationFieldControl, pesContinuity)
89+
buffer.put(adaptationData)
8590
mpegTsPayload.writeHeader(buffer)
8691

87-
val data = mpegTsPayload.bufferData
88-
if (data.remaining() < buffer.remaining()) { //small packet
92+
if (isSmall) {
8993
buffer.put(data)
9094
val stuffingSize = buffer.remaining()
91-
writeStuffingBytes(buffer, stuffingSize, false)
95+
writeStuffingBytes(buffer, stuffingSize, true)
96+
packets.add(buffer.toByteArray())
97+
pesContinuity = (pesContinuity + 1) and 0xF
9298
return@forEachIndexed
9399
}
94100
while (data.hasRemaining()) {

srt/src/main/java/com/pedro/srt/mpeg2ts/Pes.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class Pes(
3333
val bufferData: ByteBuffer
3434
): MpegTsPayload(pid, isKeyFrame) {
3535

36-
private val headerLength = 14
36+
val headerLength = 14
3737

3838
private val length = headerLength + bufferData.remaining()
3939
private val markerBits = 2

0 commit comments

Comments
 (0)