Возможность RTSP-сервера на Android-устройстве?

Я видел множество примеров использования Android VideoVIew API для потоковой передачи данных с внешнего сервера на устройство (VideoView внутренне использует стек RTP и RTSP для получения данных). Тем не менее, очень мало обсуждений возможностей использования внутренних стеков RTSP и RTP Android для достижения возможностей сервера, то есть для того, чтобы устройство Android действовало как сервер потоковой передачи и выводил поток мультимедиа. Является ли это возможным ? И где внутри нативного кода Android я могу начать копаться, чтобы достичь такой функциональности? Был бы признателен за подробности.

Спасибо Амит


person Amits    schedule 06.12.2012    source источник


Ответы (2)


Немного поздно, но:

Вы можете установить выходной формат MediaRecorder на «7». Это определено в

/framework/base/media/java/android/media/MediaRecorder.java

проверьте это для подробностей

as:

/** @hide Stream over a socket, limited to a single stream */
 public static final int OUTPUT_FORMAT_RTP_AVP = 7;

Назначение контролируется через setprop streaming.ip и setprop streaming.port.

Затем AV-данные будут переданы по указанному адресу назначения.

Сам код RTP (нативный) живет в

/frameworks/base/media/libstagefright/rtsp directory.

Удачного рытья кода

person Nils Hesse    schedule 30.01.2013

Также есть возможность использовать библиотеку libstreaming (https://github.com/fyhertz/libstreaming)

Документация на Github дает вам пример того, как вы настраиваете сервер, но в основном вам нужно добавить net.majorkernelpanic.streaming.gl.SurfaceView в свой макет.

<net.majorkernelpanic.streaming.gl.SurfaceView
    android:id="@+id/surface"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/> 

Добавьте это в свой манифест

<service android:name="net.majorkernelpanic.streaming.rtsp.RtspServer"/>

Включите библиотеку libstreaming. Если вы работаете с более новой версией Android Studio, вам необходимо клонировать libstreaming как отдельный проект и модуль импорта. После этого необходимо запустить сборку build.gradle в libstreaming. Тогда вы сможете работать с этой библиотекой.

Последний шаг - создать Activity. Простейший вариант выглядит так:

public class RemoteStreamingActivity extends Activity {
    private SurfaceView mSurfaceView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_remote_streaming);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

        handleGestures();
        mSurfaceView = (SurfaceView) findViewById(R.id.surface);

        SessionBuilder.getInstance()
            .setSurfaceView(mSurfaceView)
            .setPreviewOrientation(90)
            .setContext(getApplicationContext())
            .setAudioEncoder(SessionBuilder.AUDIO_NONE)
            .setVideoEncoder(SessionBuilder.VIDEO_H264);

        this.startService(new Intent(this,RtspServer.class));
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        this.stopService(new Intent(this, RtspServer.class));
    }
}

Если вы хотите проверить, работает ли rstp-сервер, вы можете попробовать использовать VLC и подключиться через URL: rstp: // {ipAddressOfYourDevice}: 8086? H264 = 200-20-320-240

person Jakub Balhar    schedule 02.11.2016