The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
yaidev

关于 Golang 中数据传递的问题,希望各位大佬帮忙解惑

  •  
  •   yaidev ·
    yai-dev · Mar 9, 2019 · 3144 views
    This topic created in 2669 days ago, the information mentioned may be changed or developed.

    疑惑阐述

    在提出疑惑之前,先阐述一下需求, 目前在将一个摄像头的 SDK ( C++库)适配自己的一个视频流解码服务,这个摄像头的 SDK 是这样的工作原理:
    在初始化 Env->调用实时预览接口->注册回调函数的方式来将摄像头的视频码流数据传送给 SDK 使用者。
    此处一个 Env 代表一个摄像头设备。
    我在使用 CGO 中可以将 Go 函数 export 给 C 代码来调用的 feature 的过程中,在注册回调函数这个阶段里调用我在 Go 中 export 的 Go 函数(函数名为 publishPackage ),将获取到的视频码流数据包装之后放入一个全局的 channel 里(这里的做法似乎不太合适,但由于经验有限,目前只能想到这样的方法),那么在并发的情况下,单独一个全局的 Channel 肯定是满足不了并发的场景的,于是愚钝的我使用了一个全局的 sync.Map 来存放不同 Env 的 Channel,Key 为 Env 的唯一 ID,在 publishPackage 这个函数中,通过 sync.Map.Load 方法拿到当前 Env 所属的 Channel 并将包装好的视频流数据写进 Channel 中。
    我又另外提供了一个 RegistryReceiver 的函数,参数为一个 Channel,这个函数中会启动一个 Goroutine 通过 select 来检测当前 Env 所属的 Channel 中是否有视频码流数据,如果有则将视频码流数据写入参数传进来的 Channel 中,提供视频流解码服务来拿到视频码流数据,拿到数据之后再进行接下来的解码操作。
    在以上的流程中,目前遇到的问题是在拿到 N 个 Package 之后程序将会无法响应掉,查不出来是哪里的问题(由于只是一个没有认真学习过 Golang 的彩笔)希望各位大佬可以帮忙分析一下。万分感谢!

    代码已经托管到 Github,猛点此处

    PS:各位大佬如果看了代码之后请轻喷,代码风格有点一言难尽。

    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1209 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 17:20 · PVG 01:20 · LAX 10:20 · JFK 13:20
    ♥ Do have faith in what you're doing.