我正在使用 MediaRecorder API 构建一项服务来记录用户的网络摄像头媒体流。为了兼容性,我使用 MIME 类型
video/mp4; codecs=avc1.64001F,mp4a.40.2
,它支持在 Chrome 和 Safari 中录制和播放。
为了防止在意外中断(例如浏览器崩溃、电源关闭)的情况下丢失录制的素材,我计划每秒将每个录制的块上传到 Azure Blob 存储。
但是,我希望将录制作为单个视频 blob 进行管理,而不是为录制会话的每次开始/停止创建多个 blob,从而模拟单个不间断视频文件的感觉。为了实现这一目标,我正在考虑在 Azure 中使用附加 blob。
问题是,由于 Azure 上的合并块内的元数据或时间戳冲突,此方法可能会导致播放问题。
如何解决这个问题?
(注意:我知道像 ffmpeg 或 mp4box 这样的工具可以轻松合并视频文件,但我宁愿避免使用基于 wasm 的解决方案,因为它们依赖于客户端的计算能力。我也不想实现用于合并 mp4 文件的专用服务器,因为这将是我最后的手段。)
发生
RefusedNotAuthorized
异常是因为 config.yaml
文件需要 Azure IoT 中心设备预配服务的参数。
下面是
config.yaml
中设置的 IoT Edge 配置以及 edgeHub
的部署清单。我参考了此文档,使用 Azure IoT Central 连接具有 X.509 证书的设备。
hostname: "arkham.localdomain"
trust_bundle_cert: "file:///var/aziot/certs/azure-iot-test-only.root.ca.cert.pem"
auto_reprovisioning_mode: "AlwaysOnStartup"
provisioning:
source: "dps"
global_endpoint: "https://global.azure-devices-provisioning.net/"
id_scope: "XXXXXXXXXXX"
attestation:
method: "x509"
registration_id: "edge-gateway-device-cert"
identity_cert: "file:///var/aziot/certs/iot-edge-device-identity-edge-gateway-device-cert-full-chain.cert.pem"
identity_pk: "file:///var/aziot/secrets/iot-edge-device-identity-edge-gateway-device-cert.key.pem"
edge_ca:
cert: "file:///var/aziot/certs/iot-edge-device-ca-edge-gateway-device-ca-full-chain.cert.pem"
pk: "file:///var/aziot/secrets/iot-edge-device-ca-edge-gateway-device-ca.key.pem"
要创建 Azure IoT 中心设备预配服务,请使用 X.509 证书注册个人注册。我参考了此文档,使用 DPS 注册组将 X.509 设备配置到 Azure IoT 中心。
我还参考了此链接将 IoT Edge 透明网关连接到应用程序,以及此文档用于在 Linux 上使用 X.509 证书大规模创建 IoT Edge 设备。