V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
sunzhenyucn
V2EX  ›  Go 编程语言

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

  •  
  •   sunzhenyucn ·
    yai-dev · 2019-03-09 23:30:27 +08:00 · 2498 次点击
    这是一个创建于 2087 天前的主题,其中的信息可能已经有所发展或是发生改变。

    疑惑阐述

    在提出疑惑之前,先阐述一下需求, 目前在将一个摄像头的 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:各位大佬如果看了代码之后请轻喷,代码风格有点一言难尽。

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1146 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 18:14 · PVG 02:14 · LAX 10:14 · JFK 13:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.