@@ -60,8 +60,95 @@ dependencies {
6060
6161# チュートリアル
6262
63+ libmedia と libsrt の提供するメディアサーバーの開始方法について説明します。
64+
65+ ## RTSP サーバー
66+ libmedia の ` RtspServer ` クラスは RTSP サーバーの機能を提供します。
67+
68+ ### インスタンス生成
69+ サーバーのインスタンスを作成します。デフォルトのポート番号は 10000 です。
70+
71+ ``` java
72+ RtspServer server = new RtspServer ();
73+ ```
74+
75+ ### ポート設定
76+ 別のポート番号を指定したい場合は以下で変更します。
77+
78+ ``` java
79+ server. setServerPort(port);
80+ ```
81+
82+ ### サーバー名設定
83+ クライアント側へ RTSP 経由で通知するサーバー名を設定します。
84+
85+ ``` java
86+ server. setServerName(" Your Server" );
87+ ```
88+
89+ ### セッションのコールバック設定
90+ サーバーから実際に映像と音声を配信するために、セッションのコールバック ` RtspServer.Callback ` を設定します。
91+
92+ ``` java
93+ server. setCallback(new RtspServer .Callback () {
94+ @Override
95+ public void createSession (RtspSession session ) {
96+ // 必要なリソースを確保し、session に設定。
97+ }
98+
99+ @Override
100+ public void releaseSession (RtspSession session ) {
101+ // リソースを解放。
102+ }
103+ });
104+ ```
105+
106+ セッションで映像と音声のリソースのライフサイクルを管理します。
107+ 詳しくは以降の節、または ` rtsp-server-app ` のソースコードをご参照ください。
108+
109+ ### セッション作成処理
110+ ` createSession(RtspSession) ` コールバックは、クライアントとの接続が確立した時に呼び出されます。すでに1つ以上の接続がある場合は呼び出されないようになっています。ここで映像・音声のストリームを確保し、` session ` に対して設定します。
111+
112+ RTSP では映像・音声についてそれぞれストリームが定義されます。libmedia では、映像・音声のストリームがそれぞれ ` VideoStream ` と ` AudioStream ` として提供されます。
113+
114+ 各ストリームは、それぞれ1つの映像または音声のエンコーダを持ちます。エンコーダは ` VideoEncoder ` と ` AudioEncoder ` のクラスとして定義されています。映像・音声の具体的なソースによって、` VideoEncoder ` と ` AudioEncoder ` の拡張クラスが実装されています。例えば、Android 端末のカメラ映像を Camera2 API で取得する場合は、` CameraSurfaceVideoEncoder ` を使用します。
115+
116+ 以下、Android 端末のカメラ映像のストリームをセッションに設定するサンプルコードです。
117+
118+ ``` java
119+ // 映像のストリーム作成
120+ VideoStream videoStream = new CameraH264VideoStream (context);
121+ videoStream. setDestinationPort(5006 );
122+ ((CameraH264VideoStream ) videoStream). addSurface(surface);
123+
124+ // 映像のパラメータ設定
125+ VideoEncoder videoEncoder = videoStream. getVideoEncoder();
126+ CameraVideoQuality videoQuality = (CameraVideoQuality ) videoEncoder. getVideoQuality();
127+ videoQuality. setFacing(facing);
128+ videoQuality. setVideoWidth(videoWidth);
129+ videoQuality. setVideoHeight(videoHeight);
130+ videoQuality. setIFrameInterval(IFrameInterval );
131+ videoQuality. setFrameRate(frameRate);
132+ videoQuality. setBitRate(videoBitRate);
133+
134+ // 映像のストリームをセッションに対して設定
135+ session. setVideoMediaStream(videoStream);
136+ ```
137+
138+ 音声のストリームも同様に設定可能です。
139+
140+ なお、配信しないメディアについては、セッションへの設定を省略することで配信をオフにできます。
141+
142+ ### セッション解放処理
143+ ` releaseSession(RtspSession) ` コールバックは、すべてのクライアントとの接続が切断された時に呼び出されます。ここで必要に応じてリソースの解放を行います。
144+
145+ ### RTSP サーバー起動
146+ ``` java
147+ server. start();
148+ ```
149+
63150## SRT サーバー
64- libsrt の ` SRTServer ` クラスは SRT のサーバー機能を提供します 。
151+ libsrt の ` SRTServer ` クラスは SRT サーバーの機能を提供します 。
65152
66153### インスタンス生成
67154サーバーのポート番号を指定して、インスタンスを作成します。
@@ -82,10 +169,10 @@ socketOptions.put(SRT.SRTO_PEERIDLETIMEO, 120);
82169server setSocketOptions(socketOptions);
83170```
84171
85- ### コールバック設定
86- サーバーから実際に映像と音声を配信するためには、 ` SRTServer.Callback ` を設定する必要があります 。
172+ ### セッションのコールバック設定
173+ サーバーから実際に映像と音声を配信するために、セッションのコールバック ` SRTServer.Callback ` を設定します 。
87174
88- ```
175+ ``` java
89176mSRTServer. setCallback(new SRTServer .Callback () {
90177 @Override
91178 public void createSession (SRTSession session ) {
@@ -100,17 +187,18 @@ mSRTServer.setCallback(new SRTServer.Callback() {
100187```
101188
102189セッションで映像と音声のリソースのライフサイクルを管理します。
103- 詳しくは以降の節をご参照ください。
104-
190+ 詳しくは以降の節、または ` srt-server-app ` のソースコードをご参照ください。
105191
106192### セッション作成処理
107193` createSession(SRTSession) ` コールバックは、クライアントとの接続が確立した時に呼び出されます。すでに1つ以上の接続がある場合は呼び出されないようになっています。ここで映像・音声のエンコーダを確保し、` session ` に対して設定します。
108194
109- 映像・音声のエンコーダは libmedia の ` VideoEncoder ` と ` AudioEncoder ` のクラスとして定義されています。映像・音声の具体的なソースによって、` VideoEncoder ` と ` AudioEncoder ` の拡張クラスが実装されています。例えば、Android 端末のカメラ映像を Camera2 API で取得する場合は、` CameraSurfaceVideoEncoder ` をセッションに設定します。
195+ RTSPとは異なり、SRT 自体にはストリームの概念がないため、セッションに直接エンコーダを設定します。
196+
197+ 映像・音声のエンコーダは libmedia の ` VideoEncoder ` と ` AudioEncoder ` のクラスとして定義されています。映像・音声の具体的なソースによって、` VideoEncoder ` と ` AudioEncoder ` の拡張クラスが実装されています。例えば、Android 端末のカメラ映像を Camera2 API で取得する場合は、` CameraSurfaceVideoEncoder ` を使用します。
110198
111199以下、セッションに映像のエンコーダを設定するサンプルコードです。
112200
113- ```
201+ ``` java
114202// Android 端末のカメラ映像のエンコーダを作成
115203CameraSurfaceVideoEncoder videoEncoder = new CameraSurfaceVideoEncoder (context, " video/avc" );
116204videoEncoder. addSurface(surface);
@@ -135,7 +223,7 @@ session.setVideoEncoder(videoEncoder);
135223` releaseSession(SRTSession) ` コールバックは、すべてのクライアントとの接続が切断された時に呼び出されます。ここで必要に応じてリソースの解放を行います。
136224
137225### SRT サーバー起動
138- ```
226+ ``` java
139227server. start();
140228```
141229
0 commit comments