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)