From f3e9df6d9d35971b1260cb305e18812a0e62ab1a Mon Sep 17 00:00:00 2001
From: acgnhik <acgnhik@outlook.com>
Date: Sun, 5 Jun 2022 22:37:24 +0800
Subject: [PATCH] refactor: refactor probe operator

---
 src/blrec/flv/operators/probe.py | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/src/blrec/flv/operators/probe.py b/src/blrec/flv/operators/probe.py
index 091a383..e50d67e 100644
--- a/src/blrec/flv/operators/probe.py
+++ b/src/blrec/flv/operators/probe.py
@@ -7,6 +7,7 @@ from typing import List, Optional, cast
 from reactivex import Observable, Subject, abc
 
 from ...utils.ffprobe import StreamProfile, ffprobe
+from ..common import find_aac_header_tag, find_avc_header_tag
 from ..io import FlvWriter
 from ..models import FlvHeader, FlvTag
 from .typing import FLVStream, FLVStreamItem
@@ -67,8 +68,19 @@ class Prober:
         bytes_io = io.BytesIO()
         writer = FlvWriter(bytes_io)
         writer.write_header(cast(FlvHeader, self._gathered_items[0]))
-        for tag in self._gathered_items[1:]:
-            writer.write_tag(cast(FlvTag, tag))
+        gathered_tags = cast(List[FlvTag], self._gathered_items[1:])
+
+        avc_sequence_header = find_avc_header_tag(gathered_tags)
+        aac_sequence_header = find_aac_header_tag(gathered_tags)
+        if avc_sequence_header is not None and aac_sequence_header is not None:
+            index_of_avc_sequence_header = gathered_tags.index(avc_sequence_header)
+            index_of_aac_sequence_header = gathered_tags.index(aac_sequence_header)
+            if index_of_avc_sequence_header > index_of_aac_sequence_header:
+                gathered_tags[index_of_aac_sequence_header] = avc_sequence_header
+                gathered_tags[index_of_avc_sequence_header] = aac_sequence_header
+
+        for tag in gathered_tags:
+            writer.write_tag(tag)
 
         def on_next(profile: StreamProfile) -> None:
             self._profiles.on_next(profile)