【问题标题】:Libstreaming - use VLC as a RTSP clientLibstreaming - 使用 VLC 作为 RTSP 客户端
【发布时间】:2015-12-29 12:50:48
【问题描述】:

我正在尝试将 VLC 用作 RTSP 客户端。 RTSP 服务器基于libstreaming 库。我正在使用1rst example提供的代码:

        // Sets the port of the RTSP server to 1234
        Editor editor = PreferenceManager.getDefaultSharedPreferences(this).edit();
        editor.putString(RtspServer.KEY_PORT, String.valueOf(1234));
        editor.commit();

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

        // Starts the RTSP server
        this.startService(new Intent(this,RtspServer.class));

android 应用程序启动;我尝试使用 VLC (open a stream) 和这个 URL 访问流:

rtsp://192.168.43.250:1234

设备连接到同一个网络(我可以 ping 它),但 android App 中没有任何反应,VLC 显示“连接失败”窗口。

知道问题出在哪里吗?也许是一个错误的 URL,但我找不到这种情况的任何详细示例。

【问题讨论】:

  • 你能解决这个问题吗?

标签: java android rtsp rtsp-client libstreaming


【解决方案1】:

))) 第一个例子是服务器(对于库的作者来说,服务器是接受流但不给予的人) 您需要使用 2 或 3 个示例... 2示例很好,因为您只需要一个VLK播放器...

  1. 找出你的IP(cmd-> ipconfig)(重要的是要明白设备必须有一个外部IP地址或者在同一个网络中)

    1. 在mEditText中指定接收到的PC的ip地址(mSession.setDestination();)
    2. 启动应用程序后,按开始按钮。日志中的studio会返回创建sdp格式文件的内容(TAG,mSession.getSessionDescription());
    3. 创建一个falix例如1.sdp通过指定getSessionDescription的内容来编辑它(去除多余的空格) 很长的时间,然后我们需要指定我们想要将流发送到的那个的 ip ...

       现在是重点!在任何示例中,结果都不是简单地输入 rtsp: //192.168.43.250: 1234 并获取视频! - 0)))))))

      在 Session 类中,你会发现 mOrigin = "127.0.0.1"; ok SessionBuilder ....setOrigin ("192.xxx.xxx.xx")

       进一步你的逻辑可能表明你只需要找到端口,也许你会找到 SessionBuilder Session build () video.setDestinationPorts (5006); 但这不是端口)))

      在这个库中没有 rtsp 服务器实现(我正在编写一个服务器,因为这意味着我们要为设备上的 ip cam 提升服务器) 您可以在 RtspClient 类中找到提示(注意库的作者,这是给出它的人),然后作者写信给我们 * RFC 2326。 * 一个基本的异步 RTSP 客户端。 与 Wowza 兼容的 RTSP 客户端。 * 它根据 RFC 2069 实现摘要访问身份验证。

【讨论】:

    【解决方案2】:

    我也有类似的问题。这是我的解决方案。

    1. 确保您已通过 android studio 将库作为导入模块导入

    2. 授予清单使用所需资源的权限

    3. 为您使用此代码 MainActivity:

      public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback, RtspServer.CallbackListener, Session.Callback{
      
          private final static String TAG = "MainActivity";
      
          private SurfaceView mSurfaceView;
          private  Session mSession;
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
      
              getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
      
      
              setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
              requestWindowFeature(Window.FEATURE_NO_TITLE);
      
              setContentView(R.layout.activity_main);
      
              mSurfaceView = (SurfaceView) findViewById(R.id.surface);
      
      
      
      
              // Sets the port of the RTSP server to 1234
              SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(this).edit();
              editor.putString(  RtspServer.KEY_PORT, String.valueOf(1234));
              editor.commit();
      
      
      
              // Configures the SessionBuilder
             mSession =  SessionBuilder.getInstance()
                  .setCallback(this)
                  .setSurfaceView((net.majorkernelpanic.streaming.gl.SurfaceView) mSurfaceView)
                  .setPreviewOrientation(90)
                  .setContext(getApplicationContext())
                  .setAudioEncoder(SessionBuilder.AUDIO_AAC)
                  .setAudioQuality(new AudioQuality(8000, 16000))
                  .setVideoEncoder(SessionBuilder.VIDEO_H264)
                  //.setVideoQuality(new VideoQuality(320,240,20,500000))
                  .build();
      
              mSurfaceView.getHolder().addCallback(this);
      
              ((net.majorkernelpanic.streaming.gl.SurfaceView) mSurfaceView).setAspectRatioMode(net.majorkernelpanic.streaming.gl.SurfaceView.ASPECT_RATIO_PREVIEW);
              String ip, port, path;
      
              // Starts the RTSP server
              this.startService(new Intent(this,RtspServer.class));
      
              Log.d("test", "1");
      
      
      
              mSession.startPreview(); //camera preview on phone surface
              mSession.start();
      
          }
      
          @Override
          public void onResume()
          {
              super.onResume();
              mSession.stopPreview();
          }
      
          @Override
          public void onDestroy()
          {
              super.onDestroy();
              mSession.release();
              mSurfaceView.getHolder().removeCallback(this);
          }
      
          //region   ----------------------------------implement methods required
          @Override
          public void onError(RtspServer server, Exception e, int error) {
              Log.e("Server", e.toString());
          }
      
          @Override
          public void onMessage(RtspServer server, int message) {
              Log.e("Server", "unkown message");
          }
      
          @Override
          public void onBitrateUpdate(long bitrate) {
      
          }
      
          @Override
          public void onSessionError(int reason, int streamType, Exception e) {
      
          }
      
          @Override
          public void onPreviewStarted() {
      
          }
      
          @Override
          public void onSessionConfigured() {
      
          }
      
          @Override
          public void onSessionStarted() {
      
          }
      
          @Override
          public void onSessionStopped() {
      
          }
      
          @Override
          public void surfaceCreated(SurfaceHolder holder) {
      
          }
      
          @Override
          public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
      
          }
      
          @Override
          public void surfaceDestroyed(SurfaceHolder holder) {
      
          }
      
          //endregion
      }
      
    4. 使用 VLC 播放器打开开放的网络流并输入

    rtsp://android设备的ip:1234

    【讨论】:

      【解决方案3】:

      当我使用 libstreaming 和 VLC 时,我花了很多时间来解决同样的问题。我的解决方案是使用其他 VLC 版本。例如,它在 vlc 版本上对我有用。 1.0.5,但许多其他版本没有播放流。

      【讨论】:

        【解决方案4】:

        它抛出空指针,检查logcat。

        您必须将网址提供为 rtsp://ip:1234?h264=200-20-320-240

        200 - 缓冲区 20 - 每秒 320 - 分辨率 w 240 - 分辨率 h

        【讨论】:

        • 我正在使用rtsp://172.xx.xx.67:1777?h264=500000-15-640-480:登录android流服务器:OPTIONS 200 -> DESCRIBE 200 -> SETUP 200 -> PLAY 200 -> TEARDOWN 200 -> 解析CSeq时出错(IllegalStateException:没有成功到目前为止匹配) - 请求中没有方法
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-19
        相关资源
        最近更新 更多