わかりました、何とか機能させることができました。
- フレームを FFmpeg に送信する前に、フレーム データのシーケンス (SPS) と画像パラメーター セット (PPS) を含める必要がありました。
- SPS および PPS データの後に 4 バイト「00 00 00 01」を追加する必要がありました。
ここに私が何を意味するかを示す小さな写真があります:

バイト "65 88..." は、元のフレーム データが始まる場所です。
この SPS および PPS 情報は、RTP パケットには含まれていませんでした。私は RTSP ストリーミングに Live555 ライブラリを使用しているので、サブセッション " fmtp_spropparametersets " 関数を使用して必要なものを取得しました。この情報は Base64 でエンコードされています。(サンプル: "Z0KAKNoC0EkQ,aM48gA==" のようなもの) "," で区切られた 2 つの "パラメーター" SPS と PPS があり、これらのパラメーターには "00 00 00 01" が含まれていないことに注意してください。それらを追加します。
いくつかのコード サンプル (ここでは Qt ライブラリを使用しています):
QByteArray ba = pSubSession->fmtp_spropparametersets();
QList<QByteArray> recordsList = ba.split(',');
for (int i = 0; i < recordsList.size(); i++)
{
mExtraData.append(char(0x00));
mExtraData.append(char(0x00));
mExtraData.append(char(0x00));
mExtraData.append(char(0x01));
mExtraData += QByteArray::fromBase64(recordsList.at(i));
}
フレームごとに、次のようなことを行います。
QByteArray ba = QByteArray(4, 0); // Prepare the "00 00 00 01"
ba[3] = 0x01;
mpTrackVideo->buffer.insert(0, mExtraData);
mpTrackVideo->buffer.insert(mExtraData.size(), ba);
1 年前、他のデバイスでテストする機会が得られるまで、プロジェクトに H264 ストリーム サポートが統合されていると思っていました。 ..そうでない人もいるかもしれません!