3

外部サーバーからデバイスにデータをストリーミングするために Android の VideoView API が使用されている例をたくさん見てきました (VideoView は内部で RTP および RTSP スタックを使用してデータを受信します)。ただし、Android の内部 RTSP および RTP スタックを使用してサーバー機能を実現する可能性についての議論はほとんどありません。つまり、Android デバイスをストリーミング サーバーとして機能させ、メディアをストリーミングします。出来ますか ?そして、そのような機能を実現するために、Android ネイティブ コードのどこから掘り下げ始めることができますか? 詳細をいただければ幸いです。

ありがとうアミット

4

2 に答える 2

2

少し遅れましたが:

MediaRecorder の出力形式を「7」に設定できます。これはで定義されています

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

詳細については、それを確認してください

なので:

/** @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.

楽しいコード掘り

于 2013-01-30T12:45:13.647 に答える
1

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 を別のプロジェクトとして複製し、モジュールをインポートする必要があります。その後、libstreaming で build.gradle に対してビルドを実行する必要があります。次に、このライブラリを操作できます。

最後のステップは、アクティビティを作成することです。最も簡単な例は次のとおりです。

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

于 2016-11-02T15:21:05.523 に答える