@@ -86,7 +86,7 @@ func (list FormatList) Sort() {
8686}
8787
8888// sortFormat sorts video by resolution, FPS, codec (av01, vp9, avc1), bitrate
89- // sorts audio by codec (mp4, opus), channels, bitrate, sample rate
89+ // sorts audio by default, codec (mp4, opus), channels, bitrate, sample rate
9090func sortFormat (i int , j int , formats FormatList ) bool {
9191
9292 // Sort by Width
@@ -104,28 +104,34 @@ func sortFormat(i int, j int, formats FormatList) bool {
104104 if formats [i ].FPS == formats [j ].FPS {
105105 if formats [i ].FPS == 0 && formats [i ].AudioChannels > 0 && formats [j ].AudioChannels > 0 {
106106 // Audio
107- // Sort by codec
108- codec := map [int ]int {}
109- for _ , index := range []int {i , j } {
110- if strings .Contains (formats [index ].MimeType , "mp4" ) {
111- codec [index ] = 1
112- } else if strings .Contains (formats [index ].MimeType , "opus" ) {
113- codec [index ] = 2
107+ // Sort by default
108+ if (formats [i ].AudioTrack == nil && formats [j ].AudioTrack == nil ) || (formats [i ].AudioTrack != nil && formats [j ].AudioTrack != nil && formats [i ].AudioTrack .AudioIsDefault == formats [j ].AudioTrack .AudioIsDefault ) {
109+ // Sort by codec
110+ codec := map [int ]int {}
111+ for _ , index := range []int {i , j } {
112+ if strings .Contains (formats [index ].MimeType , "mp4" ) {
113+ codec [index ] = 1
114+ } else if strings .Contains (formats [index ].MimeType , "opus" ) {
115+ codec [index ] = 2
116+ }
114117 }
115- }
116- if codec [i ] == codec [j ] {
117- // Sort by Audio Channel
118- if formats [i ].AudioChannels == formats [j ].AudioChannels {
119- // Sort by Audio Bitrate
120- if formats [i ].Bitrate == formats [j ].Bitrate {
121- // Sort by Audio Sample Rate
122- return formats [i ].AudioSampleRate > formats [j ].AudioSampleRate
118+ if codec [i ] == codec [j ] {
119+ // Sort by Audio Channel
120+ if formats [i ].AudioChannels == formats [j ].AudioChannels {
121+ // Sort by Audio Bitrate
122+ if formats [i ].Bitrate == formats [j ].Bitrate {
123+ // Sort by Audio Sample Rate
124+ return formats [i ].AudioSampleRate > formats [j ].AudioSampleRate
125+ }
126+ return formats [i ].Bitrate > formats [j ].Bitrate
123127 }
124- return formats [i ].Bitrate > formats [j ].Bitrate
128+ return formats [i ].AudioChannels > formats [j ].AudioChannels
125129 }
126- return formats [i ].AudioChannels > formats [j ].AudioChannels
130+ return codec [i ] < codec [j ]
131+ } else if formats [i ].AudioTrack != nil && formats [i ].AudioTrack .AudioIsDefault {
132+ return true
127133 }
128- return codec [ i ] < codec [ j ]
134+ return false
129135 }
130136 // Video
131137 // Sort by codec
0 commit comments