安卓设备上是否有RTSP服务器的可能性?

3
我看过很多使用Android的VideoView API从外部服务器流式传输数据到设备的示例(VideoView内部使用RTP和RTSP堆栈接收数据)。然而,很少有关于使用Android的内部RTSP和RTP堆栈实现服务器功能的讨论,即使是让Android设备充当流媒体服务器并进行流式传输。 这是否可能? 在Android原生代码中,我可以从哪里开始挖掘以实现这样的功能? 希望能提供详细信息。
谢谢 Amit
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.

愉快地挖掘代码吧


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 上运行构建。然后您就可以使用这个库了。

最后一步是创建一个 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://{您的设备的ip地址}:8086?h264 = 200-20-320-240

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接