使用Android Studio在应用中流式传输实时摄像头供稿

脱氧核糖核酸

我正在创建一个应用程序,我想流式传输foscam实时供稿。我对编码还很陌生,其中一些代码已经使我望而却步。我找到了一些帮助,可以使您走得更远,但现在遇到了麻烦。该应用程序运行,但仅显示黑屏。我相信我的清单和XML代码都正确。问题出在我的代码中。我希望有人可以帮助我

package com.rednak.camerastream;

import android.app.Activity;
import android.content.Context;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.util.Base64;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.Window;
import android.view.WindowManager;

import java.util.HashMap;
import java.util.Map;

public class MainActivity extends Activity
implements MediaPlayer.OnPreparedListener,
  SurfaceHolder.Callback {
    final static String USERNAME = "guest";
    final static String PASSWORD = "Guest";
    final static String RTSP_URL = "rtsp://http://rednak71.ddns.net:8090/live1.sdp";

    private MediaPlayer _mediaPlayer;
    private SurfaceHolder _surfaceHolder;

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

      // Set up a full-screen black window.
      requestWindowFeature(Window.FEATURE_NO_TITLE);
      Window window = getWindow();
      window.setFlags(
        WindowManager.LayoutParams.FLAG_FULLSCREEN,
        WindowManager.LayoutParams.FLAG_FULLSCREEN);
      window.setBackgroundDrawableResource(android.R.color.black);

      setContentView(R.layout.activity_main);

      // Configure the view that renders live video.
      SurfaceView surfaceView =
        (SurfaceView) findViewById(R.id.surfaceView);
      _surfaceHolder = surfaceView.getHolder();
      _surfaceHolder.addCallback(this);
      _surfaceHolder.setFixedSize(320, 240);
    }

    // More to come…

    /*
    SurfaceHolder.Callback
    */

    @
    Override
    public void surfaceChanged(
      SurfaceHolder sh, int f, int w, int h) {}

    @
    Override
    public void surfaceCreated(SurfaceHolder sh) {
      _mediaPlayer = new MediaPlayer();
      _mediaPlayer.setDisplay(_surfaceHolder);

      Context context = getApplicationContext();
      Map headers = getRtspHeaders();
      Uri source = Uri.parse(RTSP_URL);

      try {
        // Specify the IP camera’s URL and auth headers.
        _mediaPlayer.setDataSource(context, source, headers);

        // Begin the process of setting up a video stream.
        _mediaPlayer.setOnPreparedListener(this);
        _mediaPlayer.prepareAsync();
      } catch (Exception e) {}
    }

    @
    Override
    public void surfaceDestroyed(SurfaceHolder sh) {
      _mediaPlayer.release();
    }

    private Map getRtspHeaders() {
      Map headers = new HashMap();
      String basicAuthValue = getBasicAuthValue(USERNAME, PASSWORD);
      headers.put("Authorization", basicAuthValue);
      return headers;
    }

    private String getBasicAuthValue(String usr, String pwd) {
      String credentials = usr + ":" + pwd;
      int flags = Base64.URL_SAFE | Base64.NO_WRAP;
      byte[] bytes = credentials.getBytes();
      return "Basic" + Base64.encodeToString(bytes, flags);
    }

    /*
    MediaPlayer.OnPreparedListener
    */
    @
    Override
    public void onPrepared(MediaPlayer mp) {
      _mediaPlayer.start();
    }
  }

更多的

确保Android的MediaPlayer实际上可以打开并解码您的流。现在,如果MediaPlayer无法处理您的流,则说明您正在捕获任何异常并无视其忽略:

  try {
    // Specify the IP camera’s URL and auth headers.
    _mediaPlayer.setDataSource(context, source, headers);

    // Begin the process of setting up a video stream.
    _mediaPlayer.setOnPreparedListener(this);
    _mediaPlayer.prepareAsync();
  } catch (Exception e) {}

至少您应该记录该错误:

  } catch (Exception e) {
     Log.e("MyApp", "Could not open data source", e);
  }

尽管MediaPlayer服务很可能会在日志中显示自己的错误。因此,您应该做的是查看logcat中是否有来自“ VideoDecoder”或类似内容的任何消息。

要在Android Studio中查看logcat,请打开默认情况下位于底部的“ Android Monitor”选项卡。如果要查看未过滤的logcat,请确保在Android Monitor视图的右上角显示“无过滤器”,而不是“仅显示选定的应用程序”

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用ffserver发行流式ffmpeg网络摄像头供稿

来自分类Dev

如何在 MacBook Pro 上使用 webRTC 进行外部网络摄像头的实时流式传输

来自分类Dev

使用UDP将gstreamer 1.0的网络摄像头视频流式传输到PC

来自分类Dev

如何使用ffmpeg将本地视频流式传输到网络摄像头?

来自分类Dev

使用ffmpeg和ffserver通过rtsp将网络摄像头提要流式传输到Android客户端

来自分类Dev

使用AVFoundation在UIView中显示摄像头供稿

来自分类Dev

在Windows 7上的VLC中使用命令行流式传输网络摄像头

来自分类Dev

尝试使用Qt和OpenCV从高清网络摄像头获取1080p实时供稿仅获得480p

来自分类Dev

尝试使用Qt和OpenCV从高清网络摄像头获取1080p实时供稿,仅获得480p

来自分类Dev

使用 QPainter 显示实时摄像头馈送

来自分类Dev

通过USB从我的java openCV应用程序实时访问Android手机摄像头

来自分类Dev

如何使用浏览器中的Flash客户端将网络摄像头流式传输到RTMP服务器?

来自分类Dev

Android使用前置摄像头拍照

来自分类Dev

ZXing android使用前置摄像头

来自分类Dev

TideKit是否能够将实时视频和音频从Android和IOS摄像头和麦克风流传输到服务器?

来自分类Dev

在Android Studio上删除界面打开的摄像头

来自分类Dev

使用HTML5应用访问移动摄像头

来自分类Dev

使用HTML5应用访问移动摄像头

来自分类Dev

使用Visual Studio 2015的网络摄像头

来自分类Dev

Android网站的摄像头意图无法正常使用-Android

来自分类Dev

使用USB将摄像头连接到Android的外部摄像头

来自分类Dev

您可以实时将网络摄像头与ruby-opencv一起使用吗?

来自分类Dev

如何在Gstreamer中使用mpegtsmux进行网络摄像头流传输

来自分类Dev

Android Camera:避免使用前置摄像头镜像

来自分类Dev

通过Python使用Android设备摄像头

来自分类Dev

如何在Android中使用摄像头检测徽标?

来自分类Dev

在Android服务中使用前置摄像头拍照

来自分类Dev

如何使用android-openCV在android中流式传输多个CameraBridgeViewBase?

来自分类Dev

从手机摄像头流式传输JPEG

Related 相关文章

  1. 1

    使用ffserver发行流式ffmpeg网络摄像头供稿

  2. 2

    如何在 MacBook Pro 上使用 webRTC 进行外部网络摄像头的实时流式传输

  3. 3

    使用UDP将gstreamer 1.0的网络摄像头视频流式传输到PC

  4. 4

    如何使用ffmpeg将本地视频流式传输到网络摄像头?

  5. 5

    使用ffmpeg和ffserver通过rtsp将网络摄像头提要流式传输到Android客户端

  6. 6

    使用AVFoundation在UIView中显示摄像头供稿

  7. 7

    在Windows 7上的VLC中使用命令行流式传输网络摄像头

  8. 8

    尝试使用Qt和OpenCV从高清网络摄像头获取1080p实时供稿仅获得480p

  9. 9

    尝试使用Qt和OpenCV从高清网络摄像头获取1080p实时供稿,仅获得480p

  10. 10

    使用 QPainter 显示实时摄像头馈送

  11. 11

    通过USB从我的java openCV应用程序实时访问Android手机摄像头

  12. 12

    如何使用浏览器中的Flash客户端将网络摄像头流式传输到RTMP服务器?

  13. 13

    Android使用前置摄像头拍照

  14. 14

    ZXing android使用前置摄像头

  15. 15

    TideKit是否能够将实时视频和音频从Android和IOS摄像头和麦克风流传输到服务器?

  16. 16

    在Android Studio上删除界面打开的摄像头

  17. 17

    使用HTML5应用访问移动摄像头

  18. 18

    使用HTML5应用访问移动摄像头

  19. 19

    使用Visual Studio 2015的网络摄像头

  20. 20

    Android网站的摄像头意图无法正常使用-Android

  21. 21

    使用USB将摄像头连接到Android的外部摄像头

  22. 22

    您可以实时将网络摄像头与ruby-opencv一起使用吗?

  23. 23

    如何在Gstreamer中使用mpegtsmux进行网络摄像头流传输

  24. 24

    Android Camera:避免使用前置摄像头镜像

  25. 25

    通过Python使用Android设备摄像头

  26. 26

    如何在Android中使用摄像头检测徽标?

  27. 27

    在Android服务中使用前置摄像头拍照

  28. 28

    如何使用android-openCV在android中流式传输多个CameraBridgeViewBase?

  29. 29

    从手机摄像头流式传输JPEG

热门标签

归档