2

我正在使用 Google 的以下 API,https://developers.google.com/nest/device-access/traits/device/camera-live-stream

我已经成功地看到了我的设备列表和相关信息。我也可以提出成功的GenerateRtspStream请求。我收到了他们 API 中记录的以下响应

{
  "results" : {
    "streamUrls" : {
      "rtsp_url" : "rtsps://someurl.com/CjY5Y3VKaTZwR3o4Y19YbTVfMF...?auth=g.0.streamingToken"
    },
    "streamExtensionToken" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...",
    "streamToken" : "g.0.streamingToken",
    "expiresAt" : "2018-01-04T18:30:00.000Z"
  }
}

但是问题是我无法访问视频源。我曾尝试使用 VLC 播放器和 Pot Player 之类的东西来查看实时提要,但他们说 URL 不存在。我也尝试过使用OpenCVinpython来尝试访问实时提要,但它也不起作用(我已经opencv在本地文件上进行了测试,它们工作得很好)。

rtsps我对网址做错了吗?如何在python第三方应用程序或某些第三方应用程序中访问实时提要VLC Player

以下是我已经尝试过的一些示例:

import cv2 as cv
x = cv.VideoCapture(STREAM_URL)
# ret is False --- it works on local files as it returns True and I am able to view the media 
ret, img = x.read()

这是使用 Pot Player/VLC 的尝试

在此处输入图像描述

我的目标是在 python 中处理这个视频馈送/图像,所以理想情况下我的解决方案是使用opencv或类似的东西。我主要是使用VLC和其他玩家先调试这个 url 的问题。

更新

我已经使用以下公共链接 rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov 进行了测试:

MYURL = "rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov"
MYURL = STREAM_URL
import cv2 as cv
x = cv.VideoCapture(MYURL)
while(True):
    ret, img = x.read()
    if not ret:
        print('URL not working')
        break
    cv.imshow('frame', img)
    cv.waitKey(1)

opencv它与以及完美配合Pot Player。那么问题可能出在 Google 设备访问 API 上?他们提供的网址可能不正确?或者我在这里错过了什么?

也许它与rtspsURL vs rtsp?我该如何解决?

4

2 回答 2

1

ffmpeg 和 ffplay 对我来说都很好,不需要重建。在 MacOS 上,我刚刚做了:

brew install ffmpeg
ffplay -rtsp_transport tcp "rtsps://..."

填写巨流网址。注意引号,没有引号的 URL 有一些 zsh 不喜欢的东西。或者将流保存到文件

ffmpeg -y -loglevel fatal -rtsp_transport tcp -i "rtsps://..." -acodec copy -vcodec copy /path/to/out.mp4

您可以使用 ffmpeg 的不同选项将流转换为 rtsps 以外的内容,以供其他应用程序使用。

有趣的是,尽管 API 告诉我:

  "maxVideoResolution": {
    "width": 640,
    "height": 480
  },

这是来自 ffplay 的信息:

  Metadata:
    title           : SDM
  Duration: N/A, start: -0.110000, bitrate: N/A
    Stream #0:0: Audio: aac (LC), 48000 Hz, stereo, fltp
    Stream #0:1: Video: h264 (Main), yuvj420p(pc, bt709, progressive), 1600x1200 [SAR 1:1 DAR 4:3], 15 fps, 15 tbr, 90k tbn, 30 tbc

表示 1600x1200,不知道为什么 maxVideoResolution 实际上不是最大分辨率?

于 2020-10-20T13:25:12.937 回答
0

我建议尝试使用 ffmpeg,但是您可能需要从源代码构建它。

如果您在使用 ffmpeg 时遇到问题,您可以修改 ffmpeg 源以将control_uri(in libavformat/rtsp.h) 大小从 1024 增加到 2048,然后重新编译。然后 ffmpeg 应该能够播放 RTSPS 流。

于 2020-09-24T20:17:04.370 回答