Skip to content

Commit 2bdcc56

Browse files
committed
RTSP サーバーの開始方法を追記。
1 parent bc9bc3d commit 2bdcc56

1 file changed

Lines changed: 97 additions & 9 deletions

File tree

dConnectSDK/dConnectLibStreaming/README.md

Lines changed: 97 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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);
82169
server setSocketOptions(socketOptions);
83170
```
84171

85-
### コールバック設定
86-
サーバーから実際に映像と音声を配信するためには、`SRTServer.Callback` を設定する必要があります
172+
### セッションのコールバック設定
173+
サーバーから実際に映像と音声を配信するために、セッションのコールバック `SRTServer.Callback` を設定します
87174

88-
```
175+
``` java
89176
mSRTServer.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 端末のカメラ映像のエンコーダを作成
115203
CameraSurfaceVideoEncoder videoEncoder = new CameraSurfaceVideoEncoder(context, "video/avc");
116204
videoEncoder.addSurface(surface);
@@ -135,7 +223,7 @@ session.setVideoEncoder(videoEncoder);
135223
`releaseSession(SRTSession)` コールバックは、すべてのクライアントとの接続が切断された時に呼び出されます。ここで必要に応じてリソースの解放を行います。
136224

137225
### SRT サーバー起動
138-
```
226+
``` java
139227
server.start();
140228
```
141229

0 commit comments

Comments
 (0)