如何从MFCreateFMPEG4MediaSink中提取帧数?

问题描述 投票:0回答:1

当我写100帧时,MFCreateFMPEG4MediaSink会生成多个moof + mdats。

我如何知道每个mdat中有多少帧,而不是在生成后解析原子?

是否有我可以为MFCreateFMPEG4MediaSink设置的参数,因此它强制执行许多帧。

谢谢

fragment mp4 ms-media-foundation mpeg-dash
1个回答
1
投票

标准FMPEG4媒体接收器通常每个moof盒包装几帧,例如

    <MovieFragmentBox Size="368" Type="moof" Specification="p12" Container="file" TrackFragments="1">
        <MovieFragmentHeaderBox Size="16" Type="mfhd" Version="0" Flags="0" Specification="p12" Container="moof" FragmentSequenceNumber="1"></MovieFragmentHeaderBox>
        <TrackFragmentBox Size="344" Type="traf" Specification="p12" Container="moof" >
            <TrackFragmentHeaderBox Size="28" Type="tfhd" Version="0" Flags="1" Specification="p12" Container="traf" TrackID="1" BaseDataOffset="1123"></TrackFragmentHeaderBox>
            <TrackRunBox Size="308" Type="trun" Version="1" Flags="3841" Specification="p12" Container="traf" SampleCount="18" DataOffset="0">
                <TrackRunEntry Duration="1000" Size="48020" CTSOffset="0" SamplePadding="0" Sync="1" DegradationPriority="0" IsLeading="0" DependsOn="0" IsDependedOn="0" HasRedundancy="0"/>
                <TrackRunEntry Duration="1000" Size="61722" CTSOffset="0" SamplePadding="0" Sync="0" DegradationPriority="0" IsLeading="0" DependsOn="0" IsDependedOn="0" HasRedundancy="0"/>
                <TrackRunEntry Duration="1000" Size="48737" CTSOffset="0" SamplePadding="0" Sync="0" DegradationPriority="0" IsLeading="0" DependsOn="0" IsDependedOn="0" HasRedundancy="0"/>
                <TrackRunEntry Duration="1000" Size="49846" CTSOffset="0" SamplePadding="0" Sync="0" DegradationPriority="0" IsLeading="0" DependsOn="0" IsDependedOn="0" HasRedundancy="0"/>
                <TrackRunEntry Duration="1000" Size="48625" CTSOffset="0" SamplePadding="0" Sync="0" DegradationPriority="0" IsLeading="0" DependsOn="0" IsDependedOn="0" HasRedundancy="0"/>
                <TrackRunEntry Duration="1000" Size="34329" CTSOffset="0" SamplePadding="0" Sync="0" DegradationPriority="0" IsLeading="0" DependsOn="0" IsDependedOn="0" HasRedundancy="0"/>
                <TrackRunEntry Duration="1000" Size="21388" CTSOffset="0" SamplePadding="0" Sync="0" DegradationPriority="0" IsLeading="0" DependsOn="0" IsDependedOn="0" HasRedundancy="0"/>
                <TrackRunEntry Duration="1000" Size="23109" CTSOffset="0" SamplePadding="0" Sync="0" DegradationPriority="0" IsLeading="0" DependsOn="0" IsDependedOn="0" HasRedundancy="0"/>
                <TrackRunEntry Duration="1000" Size="20293" CTSOffset="0" SamplePadding="0" Sync="0" DegradationPriority="0" IsLeading="0" DependsOn="0" IsDependedOn="0" HasRedundancy="0"/>
                <TrackRunEntry Duration="1000" Size="22243" CTSOffset="0" SamplePadding="0" Sync="0" DegradationPriority="0" IsLeading="0" DependsOn="0" IsDependedOn="0" HasRedundancy="0"/>
                <TrackRunEntry Duration="1000" Size="21375" CTSOffset="0" SamplePadding="0" Sync="0" DegradationPriority="0" IsLeading="0" DependsOn="0" IsDependedOn="0" HasRedundancy="0"/>
                <TrackRunEntry Duration="1000" Size="22346" CTSOffset="0" SamplePadding="0" Sync="0" DegradationPriority="0" IsLeading="0" DependsOn="0" IsDependedOn="0" HasRedundancy="0"/>
                <TrackRunEntry Duration="1000" Size="21611" CTSOffset="0" SamplePadding="0" Sync="0" DegradationPriority="0" IsLeading="0" DependsOn="0" IsDependedOn="0" HasRedundancy="0"/>
                <TrackRunEntry Duration="1000" Size="22510" CTSOffset="0" SamplePadding="0" Sync="0" DegradationPriority="0" IsLeading="0" DependsOn="0" IsDependedOn="0" HasRedundancy="0"/>
                <TrackRunEntry Duration="1000" Size="21539" CTSOffset="0" SamplePadding="0" Sync="0" DegradationPriority="0" IsLeading="0" DependsOn="0" IsDependedOn="0" HasRedundancy="0"/>
                <TrackRunEntry Duration="1000" Size="22698" CTSOffset="0" SamplePadding="0" Sync="0" DegradationPriority="0" IsLeading="0" DependsOn="0" IsDependedOn="0" HasRedundancy="0"/>
                <TrackRunEntry Duration="1000" Size="21864" CTSOffset="0" SamplePadding="0" Sync="0" DegradationPriority="0" IsLeading="0" DependsOn="0" IsDependedOn="0" HasRedundancy="0"/>
                <TrackRunEntry Duration="1000" Size="23394" CTSOffset="0" SamplePadding="0" Sync="0" DegradationPriority="0" IsLeading="0" DependsOn="0" IsDependedOn="0" HasRedundancy="0"/>
            </TrackRunBox>
        </TrackFragmentBox>
    </MovieFragmentBox>
    <MediaDataBox Size="555657" Type="mdat" Specification="p12" Container="file" dataSize="555649"></MediaDataBox>

(摘自MFCreateFMPEG4MediaSink制作的文件之一)

没有设置可以更改此行为。没有关于所选值的报告。如果需要,您需要解析输出比特流以找出它。

© www.soinside.com 2019 - 2024. All rights reserved.