android - 来自 Android 设备相机的视频流

标签 android video-streaming rtsp rtp

我正在尝试在 Android 上构建一个应用程序,将视频从设备摄像头流式传输到流式服务器。

我看过不同的帖子和解决方案,这是我目前的状态,借助于(我使用 Sipdroid、jboss-netty 和分析 wireshark 上的数据包)

  1. 我构建了 RTSP 堆栈并成功连接到服务器
    2.理论上我能够创建一个rtp数据包并将其发送到 服务器

我的问题是捕获帧并在 RTP 数据包中发送数据。 我有两个方向:

1- 使用相机和 AuidoRecorder 捕获原始媒体数据并使用 rtp 发送,问题是这些数据是否应该根据 RTSP 的 ANNOUNCE 中的 .sdp 文件描述进行编码???据我了解,来自相机和麦克风的数据将是未编码的原始数据 另一件事是我如何正确地在 RTP 数据包中制定这个原始数据。

2- 媒体记录器已经对数据进行了编码,我能够按照 .sdp 文件中的定义设置编码。我试图找到一种从输出文件中读取的方法,但这需要我将 . mp4 文件数据到流数据,这似乎是一项复杂的任务。

我的问题是我是不是把事情复杂化了,以 RTP 数据包发送视频和音频的原始数据就足够了,流媒体服务器会处理剩下的吗???? 请在这件事上提供任何帮助和指导,我将不胜感激。

谢谢

最佳答案

首先,您必须按照 .sdp 文件中的描述对您的数据进行编码。您想尝试 MediaRecorder 而不是 AuidoRecord 吗? MediaRecorder 允许您设置您将获得的数据的编码。

此外,我建议您通过套接字创建一个 FileDescriptor,以便可以通过套接字流而不是静态文件来传输数据。 代码可能是这样的:

Socket socket = new Socket(serverAddr, serverPort);
socket.setTcpNoDelay(true);
ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(socket);
Camera camera = Camera.open();
camera.unlock();
MediaRecorder recorder = new MediaRecorder();
recorder.setCamera(camera);
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);
recorder.setOutputFile(pfd.getFileDescriptor());
recorder.setPreviewDisplay(surfaceView.getHolder().getSurface());
recorder.setVideoFrameRate(15);
recorder.setVideoSize(480, 320);
recorder.prepare();
recorder.start();

RTP传输的方式正是我现在的困扰。

关于android - 来自 Android 设备相机的视频流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6725483/

相关文章:

android - 将 fragment 1 切换到 fragment 2

android - 在android中为图像添加左边框

android - 每次运行 Appium、Ruby 测试时如何跳过 Chrome 欢迎屏幕

android: AbsListView.OnScrollListener SCROLL_STATE_IDLE 在 SCROLL_STATE_TOUCH_SCROLL 之后不被调用(版本 2.1)

amazon-web-services - AWS S3 和 Glacier 的许多小文件与 1 个大文件 :

java - mediaReader.readPacket() 在 Xuggler 中尝试读取 rtsp 流时阻塞

javascript - 有没有办法指定 HTML5 视频元素的超时?

flash - AS3问题动态地将提示点添加到flv并寻求下一个提示点

android - 如何在Android手机上链接到RTSP流?

nginx - 尝试通过 NGINX 将 RTSP 流式传输到 RTMP(实时)时出现问题