Skip to content

Commit 964c3b7

Browse files
committed
chunk SRT packets again
1 parent 245ee3a commit 964c3b7

File tree

4 files changed

+18
-6
lines changed

4 files changed

+18
-6
lines changed

srt/src/main/java/com/pedro/srt/mpeg2ts/packets/AacPacket.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ package com.pedro.srt.mpeg2ts.packets
1919
import com.pedro.common.AudioUtils
2020
import com.pedro.common.frame.MediaFrame
2121
import com.pedro.common.removeInfo
22-
import com.pedro.common.toByteArray
2322
import com.pedro.srt.mpeg2ts.MpegTsPacket
2423
import com.pedro.srt.mpeg2ts.MpegType
2524
import com.pedro.srt.mpeg2ts.Pes
@@ -55,7 +54,7 @@ class AacPacket(
5554
fixedBuffer.get(payload, headerSize, length)
5655

5756
val pes = Pes(psiManager.getAudioPid().toInt(), false, PesType.AUDIO, mediaFrame.info.timestamp, ByteBuffer.wrap(payload))
58-
val mpeg2tsPackets = mpegTsPacketizer.write(listOf(pes)).map { buffer ->
57+
val mpeg2tsPackets = chunkPackets(mpegTsPacketizer.write(listOf(pes))).map { buffer ->
5958
MpegTsPacket(buffer, MpegType.AUDIO, PacketPosition.SINGLE, isKey = false)
6059
}
6160
if (mpeg2tsPackets.isNotEmpty()) callback(mpeg2tsPackets)

srt/src/main/java/com/pedro/srt/mpeg2ts/packets/BasePacket.kt

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,11 @@
1717
package com.pedro.srt.mpeg2ts.packets
1818

1919
import com.pedro.common.frame.MediaFrame
20+
import com.pedro.common.toByteArray
2021
import com.pedro.srt.mpeg2ts.MpegTsPacket
2122
import com.pedro.srt.mpeg2ts.MpegTsPacketizer
2223
import com.pedro.srt.mpeg2ts.psi.PsiManager
24+
import java.nio.ByteBuffer
2325

2426
/**
2527
* Created by pedro on 20/8/23.
@@ -47,7 +49,7 @@ abstract class BasePacket(
4749
) {
4850

4951
protected val mpegTsPacketizer = MpegTsPacketizer(psiManager)
50-
protected var chunkSize = limitSize / MpegTsPacketizer.packetSize //max number of ts packets per srtpacket
52+
private var chunkSize = limitSize / MpegTsPacketizer.packetSize //max number of ts packets per srtpacket
5153

5254
abstract suspend fun createAndSendPacket(
5355
mediaFrame: MediaFrame,
@@ -65,4 +67,16 @@ abstract class BasePacket(
6567
this.limitSize = limitSize
6668
chunkSize = limitSize / MpegTsPacketizer.packetSize
6769
}
70+
71+
protected fun chunkPackets(mpeg2tsPackets: List<ByteArray>): List<ByteArray> {
72+
val chunked = mpeg2tsPackets.chunked(chunkSize)
73+
val packets = mutableListOf<ByteArray>()
74+
chunked.forEach { chunks ->
75+
val size = chunks.sumOf { it.size }
76+
val buffer = ByteBuffer.allocate(size)
77+
chunks.forEach { buffer.put(it) }
78+
packets.add(buffer.toByteArray())
79+
}
80+
return packets
81+
}
6882
}

srt/src/main/java/com/pedro/srt/mpeg2ts/packets/H26XPacket.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ class H26XPacket(
7878
validBuffer.get(payload, 0, validBuffer.remaining())
7979

8080
val pes = Pes(psiManager.getVideoPid().toInt(), isKeyFrame, PesType.VIDEO, mediaFrame.info.timestamp, ByteBuffer.wrap(payload))
81-
val mpeg2tsPackets = mpegTsPacketizer.write(listOf(pes)).map { buffer ->
81+
val mpeg2tsPackets = chunkPackets(mpegTsPacketizer.write(listOf(pes))).map { buffer ->
8282
MpegTsPacket(buffer, MpegType.VIDEO, PacketPosition.SINGLE, isKeyFrame)
8383
}
8484
if (mpeg2tsPackets.isNotEmpty()) callback(mpeg2tsPackets)

srt/src/main/java/com/pedro/srt/mpeg2ts/packets/OpusPacket.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ package com.pedro.srt.mpeg2ts.packets
1818

1919
import com.pedro.common.frame.MediaFrame
2020
import com.pedro.common.removeInfo
21-
import com.pedro.common.toByteArray
2221
import com.pedro.srt.mpeg2ts.MpegTsPacket
2322
import com.pedro.srt.mpeg2ts.MpegType
2423
import com.pedro.srt.mpeg2ts.Pes
@@ -50,7 +49,7 @@ class OpusPacket(
5049
System.arraycopy(header, 0, payload, 0, header.size)
5150

5251
val pes = Pes(psiManager.getAudioPid().toInt(), true, PesType.PRIVATE_STREAM_1, mediaFrame.info.timestamp, ByteBuffer.wrap(payload))
53-
val mpeg2tsPackets = mpegTsPacketizer.write(listOf(pes)).map { buffer ->
52+
val mpeg2tsPackets = chunkPackets(mpegTsPacketizer.write(listOf(pes))).map { buffer ->
5453
MpegTsPacket(buffer, MpegType.AUDIO, PacketPosition.SINGLE, true)
5554
}
5655
if (mpeg2tsPackets.isNotEmpty()) callback(mpeg2tsPackets)

0 commit comments

Comments
 (0)