全体的なアプローチは正しいように聞こえますが、考慮すべき点がいくつかあります。
そのため、ユーザーがビデオを録画し、そのビデオを RTP/RTSP サーバーに即座に (ライブで) アップロードできるアプリケーションをプログラムしたいと考えています。
- コンテンツを複数のクライアントに再配布できるように、RTSP サーバーにアップロードしたいと思いますか?
- RTSP サーバーへの RTP セッションのシグナリング/セットアップをどのように処理しますか? 適切なRTP/RTCPソケットなどを開くことができるように、ユーザーがライブメディアをアップロードしようとしていることを何らかの方法でRTSPサーバーに通知する必要があります.
- 認証をどのように処理しますか? 複数のクライアント デバイス?
これまでの私の調査では、録画時にビデオをファイルではなくローカル ソケットに書き込む必要があるということです。これは、ファイルに書き込まれた場合、3gp ファイルはファイナライズされるまでアクセスできないためです (ビデオが停止し、ヘッダー情報が保持されている場合)。長さなどについては動画に書いてあります)。
RTP/RTCP を介してリアルタイムでフレームを送信するのが正しいアプローチです。キャプチャ デバイスは各フレームをキャプチャするため、フレームをエンコード/圧縮してソケット経由で送信する必要があります。3gp は、mp4 と同様に、ファイル ストレージに使用されるコンテナー形式です。ライブ キャプチャの場合、ファイルに書き込む必要はありません。これが意味をなすのは、メディアが HTTP 経由で提供される前にトランスポート ストリームまたは mp4 ファイルに書き込まれる HTTP ライブ ストリーミングまたは DASH アプローチなどの場合のみです。
ソケットが連続データを受信したら、それを RTP パケットにラップしてリモート サーバーに送信する必要があります。最初に基本的なエンコーディングを行う必要があるかもしれません (これはまだそれほど重要ではありません)。
エンコーディングは非常に重要であり、それ以外の方法でビデオを送信することはおそらく不可能であり、コスト (モバイル ネットワーク経由) や、解像度とフレームレートに応じた膨大な量のメディアなどの問題に対処する必要があります。 .
この理論がこれまでのところ正しいかどうか、誰にもわかりません。また、特にビデオをオンザフライでサーバーに送信するために、誰かが同様のアプローチのいくつかのコードスニペットを教えてくれるかどうかも知りたいです。その方法はまだわかりません。
出発点として、 spydroidオープン ソース プロジェクトを見てみましょう。エンコーダーの構成方法、RTP へのパケット化、RTCP の送信、RTSP サーバー機能など、必要な手順の多くが含まれています。Spydroid は、VLC などの RTSP クライアントを使用して RTSP セッションをセットアップすると、メディアがエンコードされて送信されるように RTSP サーバーをセットアップします。あなたのアプリケーションは、サーバーにメディアを送信したい電話ユーザーによって駆動されるため、送信を開始する別のアプローチを検討する必要がある場合があります。たとえば、spydroid のような RTSP セッションをセットアップするために、サーバーに何らかのメッセージを送信する場合でも同様です。 .