mirror of
https://github.com/ossrs/srs.git
synced 2025-02-12 19:31:53 +00:00
refine ts code
This commit is contained in:
parent
38e66be490
commit
d5b84b5e20
1 changed files with 23 additions and 10 deletions
|
@ -301,6 +301,10 @@ public:
|
|||
{
|
||||
int ret = ERROR_SUCCESS;
|
||||
|
||||
if (!buffer->bytes || buffer->size <= 0) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
char* last = buffer->bytes + buffer->size;
|
||||
char* pos = buffer->bytes;
|
||||
|
||||
|
@ -550,6 +554,10 @@ int SrsTSMuxer::write_audio(u_int32_t time, SrsCodec* codec, SrsCodecSample* sam
|
|||
{
|
||||
int ret = ERROR_SUCCESS;
|
||||
|
||||
audio_frame.dts = audio_frame.pts = time * 90;
|
||||
audio_frame.pid = TS_AUDIO_PID;
|
||||
audio_frame.sid = TS_AUDIO_AAC;
|
||||
|
||||
for (int i = 0; i < sample->nb_buffers; i++) {
|
||||
SrsCodecBuffer* buf = &sample->buffers[i];
|
||||
int32_t size = buf->size;
|
||||
|
@ -610,10 +618,6 @@ int SrsTSMuxer::write_audio(u_int32_t time, SrsCodec* codec, SrsCodecSample* sam
|
|||
audio_buffer->append(buf->bytes, buf->size);
|
||||
}
|
||||
|
||||
audio_frame.dts = audio_frame.pts = time * 90;
|
||||
audio_frame.pid = TS_AUDIO_PID;
|
||||
audio_frame.sid = TS_AUDIO_AAC;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -621,9 +625,16 @@ int SrsTSMuxer::write_video(u_int32_t time, SrsCodec* codec, SrsCodecSample* sam
|
|||
{
|
||||
int ret = ERROR_SUCCESS;
|
||||
|
||||
video_frame.dts = time * 90;
|
||||
video_frame.pts = video_frame.dts + sample->cts * 90;
|
||||
video_frame.pid = TS_VIDEO_PID;
|
||||
video_frame.sid = TS_VIDEO_AVC;
|
||||
video_frame.key = sample->frame_type == SrsCodecVideoAVCFrameKeyFrame;
|
||||
|
||||
static u_int8_t aud_nal[] = { 0x00, 0x00, 0x00, 0x01, 0x09, 0xf0 };
|
||||
video_buffer->append(aud_nal, sizeof(aud_nal));
|
||||
|
||||
bool sps_pps_sent = false;
|
||||
for (int i = 0; i < sample->nb_buffers; i++) {
|
||||
SrsCodecBuffer* buf = &sample->buffers[i];
|
||||
int32_t size = buf->size;
|
||||
|
@ -634,6 +645,14 @@ int SrsTSMuxer::write_video(u_int32_t time, SrsCodec* codec, SrsCodecSample* sam
|
|||
return ret;
|
||||
}
|
||||
|
||||
if (video_frame.key && !sps_pps_sent) {
|
||||
// sample start prefix
|
||||
video_buffer->append(aud_nal, 4);
|
||||
// sps and pps
|
||||
// TODO: do in right way.
|
||||
video_buffer->append(codec->avc_extra_data, codec->avc_extra_size);
|
||||
}
|
||||
|
||||
// sample start prefix, '00 00 00 01' or '00 00 01'
|
||||
u_int8_t* p = aud_nal + 1;
|
||||
u_int8_t* end = p + 3;
|
||||
|
@ -648,12 +667,6 @@ int SrsTSMuxer::write_video(u_int32_t time, SrsCodec* codec, SrsCodecSample* sam
|
|||
video_buffer->append(buf->bytes, buf->size);
|
||||
}
|
||||
|
||||
video_frame.dts = time * 90;
|
||||
video_frame.pts = video_frame.dts + sample->cts * 90;
|
||||
video_frame.pid = TS_VIDEO_PID;
|
||||
video_frame.sid = TS_VIDEO_AVC;
|
||||
video_frame.key = sample->frame_type == SrsCodecVideoAVCFrameKeyFrame;
|
||||
|
||||
if ((ret = SrsMpegtsWriter::write_frame(fd, &video_frame, video_buffer)) != ERROR_SUCCESS) {
|
||||
return ret;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue