Skip to content

Commit d815fda

Browse files
committed
Trying to fix MP4 audio playback in-browser
1 parent f9151e0 commit d815fda

File tree

5 files changed

+14
-9
lines changed

5 files changed

+14
-9
lines changed

src/media.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -490,7 +490,7 @@ int enable_mp4(void) {
490490

491491
mp4_set_config(app_config.mp4_width, app_config.mp4_height, app_config.mp4_fps,
492492
app_config.audio_enable ? HAL_AUDCODEC_MP3 : HAL_AUDCODEC_UNSPEC,
493-
app_config.audio_bitrate, app_config.audio_srate);
493+
app_config.audio_bitrate, 1, app_config.audio_srate);
494494
}
495495

496496
if (ret = bind_channel(index, app_config.mp4_fps, 0))

src/mp4/moov.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -553,7 +553,7 @@ enum BufError write_btrt(struct BitBuf *ptr, const struct MoovInfo *moov_info) {
553553
chk_err; // 4 Buffer size
554554
err = put_u32_be(ptr, moov_info->audio_bitrate * 1000);
555555
chk_err; // 4 Max bitrate
556-
err = put_u32_be(ptr, moov_info->audio_bitrate * 1000);
556+
err = put_u32_be(ptr, moov_info->audio_bitrate * 1000 - 1);
557557
chk_err; // 4 Avg bitrate
558558
err = put_u32_be_to_offset(ptr, start_atom, ptr->offset - start_atom);
559559
chk_err;
@@ -619,7 +619,7 @@ enum BufError write_DecoderConfig(struct BitBuf *ptr, const struct MoovInfo *moo
619619
chk_err; // 3 bufferSize
620620
err = put_u32_be(ptr, moov_info->audio_bitrate * 1000);
621621
chk_err; // 4 Max bitrate
622-
err = put_u32_be(ptr, moov_info->audio_bitrate * 1000);
622+
err = put_u32_be(ptr, moov_info->audio_bitrate * 1000 - 1);
623623
chk_err; // 4 Avg bitrate
624624
err = put_u32_le_to_offset(ptr, var_len, varint32(ptr->offset - var_len - 4));
625625
chk_err;
@@ -675,7 +675,7 @@ enum BufError write_TagAudioSpecificConfig(
675675
bitstream |= moov_info->audio_samplerate;
676676
used_bits += 24;
677677
}
678-
int channels = 1;
678+
int channels = moov_info->audio_channels;
679679
bitstream <<= 4;
680680
bitstream |= channels;
681681
used_bits += 4;
@@ -768,7 +768,7 @@ enum BufError write_mp4a(struct BitBuf *ptr, const struct MoovInfo *moov_info) {
768768
chk_err; // 1 dataref index
769769
err = put_skip(ptr, 8);
770770
chk_err; // 8 reserved
771-
err = put_u16_be(ptr, 2);
771+
err = put_u16_be(ptr, moov_info->audio_channels);
772772
chk_err; // 2 channel count
773773
err = put_u16_be(ptr, 16);
774774
chk_err; // 2 sample size

src/mp4/moov.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
struct MoovInfo {
66
char audio_codec;
77
unsigned short audio_bitrate;
8+
unsigned char audio_channels;
89
unsigned int audio_samplerate;
910
char is_h265;
1011
uint8_t profile_idc;

src/mp4/mp4.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ uint32_t default_sample_size = 40000;
88

99
unsigned int aud_samplerate = 0;
1010
unsigned short aud_bitrate = 0;
11+
char aud_channels = 0;
1112
short vid_width = 1920, vid_height = 1080;
1213
char aud_codec = 0, vid_framerate = 30;
1314

@@ -35,6 +36,8 @@ enum BufError create_header(char is_h265) {
3536
struct MoovInfo moov_info;
3637
memset(&moov_info, 0, sizeof(struct MoovInfo));
3738
moov_info.audio_codec = aud_codec;
39+
moov_info.audio_bitrate = aud_bitrate;
40+
moov_info.audio_channels = aud_channels;
3841
moov_info.audio_samplerate = aud_samplerate;
3942
moov_info.is_h265 = is_h265 & 1;
4043
moov_info.profile_idc = 100;
@@ -59,13 +62,14 @@ enum BufError create_header(char is_h265) {
5962
chk_err return BUF_OK;
6063
}
6164

62-
void mp4_set_config(short width, short height, char framerate,
63-
char acodec, unsigned short bitrate, unsigned int srate) {
65+
void mp4_set_config(short width, short height, char framerate, char acodec,
66+
unsigned short bitrate, char channels, unsigned int srate) {
6467
vid_width = width;
6568
vid_height = height;
6669
vid_framerate = framerate;
6770
aud_codec = acodec;
6871
aud_bitrate = bitrate;
72+
aud_channels = channels;
6973
aud_samplerate = srate;
7074
}
7175

src/mp4/mp4.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ struct Mp4State {
2525
uint32_t nals_count;
2626
};
2727

28-
void mp4_set_config(short width, short height, char framerate,
29-
char acodec, unsigned short bitrate, unsigned int srate);
28+
void mp4_set_config(short width, short height, char framerate, char acodec,
29+
unsigned short bitrate, char channels, unsigned int srate);
3030

3131
void mp4_set_sps(const char *nal_data, const uint32_t nal_len, char is_h265);
3232
void mp4_set_pps(const char *nal_data, const uint32_t nal_len, char is_h265);

0 commit comments

Comments
 (0)