Skip to content

Commit c476896

Browse files
MP4への出力を修正
1 parent ac61072 commit c476896

1 file changed

Lines changed: 22 additions & 29 deletions

File tree

  • dConnectSDK/dConnectLibStreaming/libmedia/src/main/java/org/deviceconnect/android/libmedia/streaming/muxer

dConnectSDK/dConnectLibStreaming/libmedia/src/main/java/org/deviceconnect/android/libmedia/streaming/muxer/Mpeg4Muxer.java

Lines changed: 22 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,7 @@ public class Mpeg4Muxer implements IMediaMuxer {
1818
private boolean mMuxerStarted = false;
1919
private boolean mVideoEnabled = false;
2020
private boolean mAudioEnabled = false;
21-
22-
/**
23-
* エンコード開始時間.
24-
*/
2521
private long mPresentationTimeUs;
26-
2722
private final Object mLockObject = new Object();
2823

2924
public Mpeg4Muxer(String outputPath) {
@@ -63,18 +58,7 @@ public void onVideoFormatChanged(MediaFormat newFormat) {
6358

6459
@Override
6560
public void onWriteVideoData(ByteBuffer encodedData, MediaCodec.BufferInfo bufferInfo) {
66-
if ((bufferInfo.flags & MediaCodec.BUFFER_FLAG_CODEC_CONFIG) != 0) {
67-
bufferInfo.size = 0;
68-
}
69-
70-
if (bufferInfo.size != 0) {
71-
if (!mMuxerStarted || mVideoTrackIndex == -1) {
72-
return;
73-
}
74-
encodedData.position(bufferInfo.offset);
75-
encodedData.limit(bufferInfo.offset + bufferInfo.size);
76-
mMuxer.writeSampleData(mVideoTrackIndex, encodedData, bufferInfo);
77-
}
61+
writeData(mVideoTrackIndex, encodedData, bufferInfo);
7862
}
7963

8064
@Override
@@ -95,22 +79,15 @@ public void onAudioFormatChanged(MediaFormat newFormat) {
9579

9680
@Override
9781
public void onWriteAudioData(ByteBuffer encodedData, MediaCodec.BufferInfo bufferInfo) {
98-
if ((bufferInfo.flags & MediaCodec.BUFFER_FLAG_CODEC_CONFIG) != 0) {
99-
bufferInfo.size = 0;
100-
}
101-
102-
if (bufferInfo.size != 0) {
103-
if (!mMuxerStarted || mAudioTrackIndex == -1) {
104-
return;
105-
}
106-
encodedData.position(bufferInfo.offset);
107-
encodedData.limit(bufferInfo.offset + bufferInfo.size);
108-
mMuxer.writeSampleData(mAudioTrackIndex, encodedData, bufferInfo);
109-
}
82+
writeData(mAudioTrackIndex, encodedData, bufferInfo);
11083
}
11184

11285
@Override
11386
public void onReleased() {
87+
synchronized (mLockObject) {
88+
mLockObject.notifyAll();
89+
}
90+
11491
if (mMuxer != null) {
11592
try {
11693
mMuxer.stop();
@@ -127,6 +104,22 @@ public void onReleased() {
127104
}
128105
}
129106

107+
private synchronized void writeData(int trackIndex, ByteBuffer encodedData, MediaCodec.BufferInfo bufferInfo) {
108+
if ((bufferInfo.flags & MediaCodec.BUFFER_FLAG_CODEC_CONFIG) != 0) {
109+
bufferInfo.size = 0;
110+
}
111+
112+
if (bufferInfo.size != 0) {
113+
if (!mMuxerStarted || mAudioTrackIndex == -1) {
114+
return;
115+
}
116+
bufferInfo.presentationTimeUs = getPresentationTime(bufferInfo);
117+
encodedData.position(bufferInfo.offset);
118+
encodedData.limit(bufferInfo.offset + bufferInfo.size);
119+
mMuxer.writeSampleData(trackIndex, encodedData, bufferInfo);
120+
}
121+
}
122+
130123
private long getPresentationTime(MediaCodec.BufferInfo bufferInfo) {
131124
if (mPresentationTimeUs == 0) {
132125
mPresentationTimeUs = bufferInfo.presentationTimeUs;

0 commit comments

Comments
 (0)