324.47MBRAR
このリソースには、Vs+Qt+FFmpegの完全なコードが含まれています。
ビデオ・プレゼンテーションhttps://wwm.lanzn.com/ibahQ1t3jekh
コンテキスト
ライブアプリケーションの開発プロセスでは、アンカー側のメッセージイベントを視聴者側に渡す場合、一般的にインスタントメッセージ(インスタントメッセージング)の方法で渡すことになりますが、メッセージ配信チャネルとライブチャネルが分離されているため、メッセージとライブオーディオおよびビデオデータの同期には多くの問題が発生します。では、オーディオとビデオの内部でメッセージを受け渡す方法はあるのでしょうか?答えはSEI
例:ドローンのロール/ピッチ/高度/方向を時間指定し、フレームの画像を取得した時点で対応するパラメータを引き出し、その時点でSEIとして送信する。
SEI(Supplemental Enhancement Information)とは、H.264/H.265ビデオ圧縮規格の特徴の1つである、ビデオストリームに情報を追加する方法を提供するストリームのカテゴリ内の概念である。
ソースコード
と述べなければならない:
プッシュ・セイ側は、1パケットあたり512バイトの追加情報を送信すると例外が発生することがある。ただし、この例外は以下のプッシュ側のコードで解決されているが、それでもあまり頻繁に、あまり大きなデータをプッシュしないことが推奨される。
筆者は、各パケットが512バイトの長さでプッシュされる状況をテストし、上記の問題を発見した。バイト数がそれ以下の場合や、送信頻度が非常に低い場合には、このような状況は発生しない。
bool fill_sei_packet(unsigned char * packet, bool isAnnexb, const char * content, uint32_t size)
{
unsigned char * data = (unsigned char*)パケット;
unsigned int nalu_size = (unsigned int)get_sei_nalu_size(size);
uint32_t sei_size = nalu_size;
nalu_size = reversebytes(nalu_size);
unsigned int * size_ptr = &nalu_size;
if (isAnnexb)
{
memcpy(data, start_code, sizeof(unsigned int));
}
その他
{
memcpy(data, size_ptr, sizeof(unsigned int));
}
data += sizeof(unsigned int);
unsigned char * sei = data;
//NALヘッダー
*data++ = 6; //SEI
//ペイロード・タイプ
*data++ = 5; //登録解除
size_t sei_payload_size = size + UUID_SIZE;
while (true)
{
*data++ = (sei_payload_size >= 0xFF ? 0xFF : (char)sei_payload_size);
if (sei_payload_size < 0xFF) break;
sei_payload_size -= 0xFF;
}
}
int get_sei_buffer(unsigned char * data, uint32_t size, char * buffer, int *count)
{
unsigned char * sei = data;
int sei_type = 0;
unsigned sei_size = 0;
//ペイロード・タイプ
する
sei_type += *sei.
} while (*sei++ == 255);
// データ長
する
sei_size += *sei.
} while (*sei++ == 255);
// UUIDのチェック
if (sei_size >= UUID_SIZE && sei_size <= (data + size - sei) &&)
sei_type == 5 && memcmp(sei, uuid, UUID_SIZE) == 0)
{
sei += UUID_SIZE.
sei_size -= UUID_SIZE.
if (buffer != NULL && count != NULL)
{
if (*count > (int)sei_size)
{
memcpy(buffer, sei, sei_size);
}
}
if (count != NULL)
{
*count = sei_size.
}
sei_size を返す;
}
1 を返す;
}
リソース・ステートメント(購入はこのステートメントに同意したものとみなされます): 1.ウェブサイトプラットフォームの任意の操作は、読んでいると見なされ、ウェブサイトの登録契約と免責事項の一番下に同意して、このサイトのリソースは、超低価格されており、技術サポートを提供していません。 2.一部のネットワークユーザーは、障害の発生などのネットディスクアドレスが無効である可能性があり、顧客サービスコード711cn#qq.com(@で#を置き換える)に電子メールを送信してください共有する送信するように構成されます。 3.本サイトは、すべてのダウンロード可能なリソース(ソフトウェアなど)のサイトがないことを確認するために提供する否定的な変更;しかし、このサイトは、リソースの正確性、安全性と完全性を保証することはできません、ユーザーは、独自の判断でダウンロードし、我々はすべてのソースコードは100%エラーフリーまたはバグがないわけではありませんの目的のために学ぶために通信する;あなたは、コードを読み、理解することができるように一定の基盤を持っている必要があり、デバッグを変更することができます!コードを修正し、エラーを解決するためには、一定の基礎が必要です。同時に、このサイトの利用者は、ソースコードコンビニエンスストアがダウンロードのために提供されるソフトウェアに関するいかなる権利も所有していないことを理解する必要があり、著作権はリソースの法的所有者に帰属します。 4.このサイト上のすべてのリソースは、学習や研究目的のためにのみ、ダウンロードしたリソースの24時間以内に削除する必要がありますしてください、商業目的のために使用しないでください、そうでなければ、サイトと担保責任サイトの出版社から生じる法的紛争を負担することはありません! 5.複製可能なリソースの性質上、一度購入されたリソースの払い戻しはできません。