Partager via


Quand et comment utiliser H.264/AVC Remux MFT et mp4 Sink

Cette rubrique décrit quand et comment utiliser un récepteur H.264/AVC Remux MFT et MP4.

Quand utiliser H.264/AVC Remux MFT

Le format de fichier MPEG-4 nécessite que chaque exemple compressé contienne une image principale avec des unités NAL dans l’ordre correct. (Reportez-vous à la définition de l’image principale et de l’ordre obligatoire des unités NAL à la section 7.4.1.2.3, Ordre des unités NAL et des images codées et association aux unités d’accès, de la spécification AVC H.264.) Il nécessite également que chaque exemple compressé soit associé à un horodatage de présentation, un horodatage de décodage et un exemple de durée.

Dans de nombreux scénarios où les applications doivent enregistrer une vidéo H.264/AVC dans un conteneur de fichiers MPEG-4, l’exemple compressé peut ne pas répondre aux exigences ci-dessus. Par exemple, un exemple compressé peut ne pas contenir d’image principale complète ou ne pas avoir d’horodatage de présentation correct associé. Voici quelques exemples d’application :

  • Écrire une vidéo élémentaire de streaming H.264/AVC dans un conteneur de fichiers MPEG-4.
  • Enregistrer la vidéo élémentaire H.264/AVC capturée dans le conteneur de fichiers MPEG-4.
  • Enregistrez la visioconférence H.264/AVC dans le conteneur de fichiers MPEG-4.
  • Concaténer deux vidéos H.264/AVC en MPEG-2 TS ou MP4 et écrire dans le conteneur de fichiers MPEG-4 avec des horodatages corrects.
  • Vidéo Remux H.264/AVC à partir d’AVCHD, du format de fichier MPEG-2 TS/PS au format de fichier MPEG-4.
  • Découper le fichier vidéo H.264/AVC sans transcodage.

Dans ce cas, l’application doit utiliser un MFT réplica H.264/AVC pour convertir les exemples compressés ne contenant pas d’image primaire complète avant d’être écrits dans le conteneur de fichiers MPEG-4.

Utilisation du récepteur H.264/AVC Remux MFT et MP4

Définissez le type de média de sortie source sur MFVideoFormat_H264_ES, ce qui indique que chaque exemple peut ne pas contenir d’image principale complète. Définissez le type de support d’entrée du récepteur MP4 sur MFVideoFormat_H264. Par conséquent, le type de média d’entrée du MFT rémux H.264/AVC est MFVideoFormat_H264_ES et le type de média de sortie du MFT rémux H.264/AVC est MFVideoFormat_H264, qui sera automatiquement inséré dans le programme de résolution de topologie.

La durée de l’exemple est ignorée par le réplica H.264/AVC, car la durée de l’exemple d’un exemple ne contenant pas d’image primaire complète n’a pas de signification claire. Au lieu de cela, la durée de l’exemple est calculée à partir de la fréquence d’images. La fréquence d’images est calculée à partir du paramètre de séquence. Si les informations n’existent pas dans le paramètre de séquence, la fréquence d’images est calculée à partir des paramètres du type de média d’entrée. Si les informations sur la fréquence d’images ne sont pas disponibles, la fréquence d’images par défaut de 29,97 fps est utilisée.

H.264/AVC remux MFT interpole linéairement les horodatages de décodage (DTS) pour chaque image compressée en fonction de la fréquence d’images. H.264/AVC remux MFT respecte les horodatages de présentation d’entrée (PTS) dans les exemples d’entrée et les transmet à la sortie s’ils existent. Il effectue l’interpolation PTS en fonction de la fréquence d’images, du PTS précédent et de l’ordre de sortie de l’image par le biais du processus d’accrochage DBP (Decoded Picture Buffering), comme spécifié dans l’annexe C.4.5.3 Processus de bosse de la spécification AVC H.264. Chaque échantillon de sortie de H.264/AVC remux MFT doit avoir PTS, DTS et la durée de l’échantillon. H.264/AVC remux MFT identifie également les images IDR dans le flux binaire et les définit comme propre point avec l’attribut MF de MFSampleExtension_CleanPoint.

Actuellement, le MFT réorganisé H.264/AVC peut gérer un maximum de 64 images réorganisées. Si le nombre de trames réorganisées dépasse 64 avec une trame de référence à long terme présente, le MFT rémux H.264/AVC interpolera un PTS incorrect pour cette image et sortira cette image à un mauvais moment.

Pour instancier un MFT rémux H.264/AVC, définissez les types de média d’entrée et de sortie corrects sur le H.264/AVC remux MFT, définissez le type de média d’entrée pour le récepteur MP4 et résolvez la topologie.

L’exemple de code suivant montre comment initialiser le récepteur H.264/AVC remux MFT et MP4.

Pour H.264/AVC remux MFT,

hr = CoCreateInstance(
            CLSID_CMSH264RemuxMFT,
            NULL,
            CLSCTX_INPROC_SERVER,
            IID_IMFTransform,
            (void**) &pIMFTransform
            );

Aucune autre configuration n’est nécessaire.

Pour le récepteur MP4,

IMFByteStream*  pMFBSOutputFile = NULL;
hr = MFCreateFile(
    MF_ACCESSMODE_READWRITE,
    MF_OPENMODE_DELETE_IF_EXIST,
    MF_FILEFLAGS_NONE,
    m_pszOutputFile,
    &pMFBSOutputFile);
if(FAILED(hr))
{
    Log(L"ERROR>> Failed to create output file for MP4 Sink (hr=0x%x)", hr);
    break;
}

hr = MFCreateMPEG4MediaSink(
    pMFBSOutputFile,
    (guidMajorType == MFMediaType_Video) ? pMediaType : NULL,  // pMediaType comes from the output type of the remux MFT
    (guidMajorType == MFMediaType_Audio) ? pMediaType : NULL,
    &m_pMediaSink);
if(FAILED(hr))
{
    Log(L"ERROR>> Failed to create MP4 Sink (hr=0x%x)", hr);
    break;
}
hr = m_pMediaSink->GetStreamSinkByIndex(0, &pStream);

Formats multimédias pris en charge dans Media Foundation