Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Пример Android-приложения для записи видеопотока

Данный пример может использоваться с Web Call Server для публикации и записи WebRTC-видеопотока.

...

  • ссылка для скачивания записи потока
  • медиа-плеер, в котором можно воспроизвести запись

Работа с кодом примера

Для разбора кода возьмем класс StreamRecordingActivity.java примера stream-recording, который доступен для скачивания в соответствующей сборке 1.0.1.38.

...

Code Block
languagejs
themeRDark
@Override
public void onConnected(final Connection connection) {
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            mStartButton.setText(R.string.action_stop);
            mStartButton.setTag(R.string.action_stop);
            mStartButton.setEnabled(true);
            mStatusView.setText(connection.getStatus());

            /**
              * The options for the stream to publish are set.
              * The stream name is passed when StreamOptions object is created.
              * To enable stream recording, option 'record' is set to 'true' with method StreamOptions.setRecord().
              */
            StreamOptions streamOptions = new StreamOptions(streamName);
            streamOptions.setRecord(true);

            /**
              * Stream is created with method Session.createStream().
              */
            publishStream = session.createStream(streamOptions);

            /**
              * Callback function for stream status change is added to display the status.
              */
            publishStream.on(new StreamStatusEvent() {
                @Override
                public void onStreamStatus(final Stream stream, final StreamStatus streamStatus) {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            if (StreamStatus.PUBLISHING.equals(streamStatus)) {
                                mStatusView.setText("RECORDING");

                                /**
                                  * Filename of the recording is determined.
                                  */
                                recordFilename = stream.getRecordName();
                                return;
                            } else if (StreamStatus.FAILED.equals(streamStatus)) {
                                Log.e(TAG, "Can not publish stream " + stream.getName() + " " + streamStatus);
                                recordFilename = null;
                            }
                            mStatusView.setText(streamStatus.toString());
                        }
                    });
                }
            });

            ActivityCompat.requestPermissions(StreamRecordingActivity.this,
                  new String[]{Manifest.permission.RECORD_AUDIO, Manifest.permission.CAMERA},
                  PUBLISH_REQUEST_CODE);
        }
    });
}


5. Создание видеопотока и подготовка к публикации.

...