c++ - 中止陷阱:来自 Google Speech API 的 6 个
问题描述
我的具体问题是如何修复来自 Google gRPC(语音 API)的“中止陷阱:6”错误。更一般地说,作为尝试使用这些服务的人,任何有关故障排除的提示都将不胜感激。我还没有找到好的 C++ 文档,只是互联网上的随机提示。
我已经成功运行了流媒体示例转录。当我尝试修改代码以从麦克风传递数据时,我的新代码在它返回第一个临时响应时崩溃了。
我正在使用调试输出运行GRPC_VERBOSITY=debug GRPC_TRACE=api ./testSpeech
我在失败代码和工作示例之间的输出中看到的主要区别如下:
工作日志
I1221 07:01:42.805304000 123145420480512 completion_queue.cc:764] cq_end_op_for_pluck(cq=0x7faa705043e0, tag=0x7000070b1990, error="No Error", done=0x10f9e3740, done_arg=0x7faa70467310, storage=0x7faa70467388)
I1221 07:01:42.805330000 123145420480512 completion_queue.cc:1297] RETURN_EVENT[0x7faa705043e0]: OP_COMPLETE: tag:0x7000070b1990 OK
I1221 07:01:43.029567000 4652266944 completion_queue.cc:764] cq_end_op_for_pluck(cq=0x7faa705043e0, tag=0x7ffee04f8350, error="No Error", done=0x10f9e3740, done_arg=0x7faa705304d0, storage=0x7faa70530548)
I1221 07:01:43.029637000 4652266944 completion_queue.cc:1297] RETURN_EVENT[0x7faa705043e0]: OP_COMPLETE: tag:0x7ffee04f8350 OK
Result stability: 0.01
0 how
失败日志
I1221 08:00:32.559490000 4561257920 call.cc:1967] grpc_call_start_batch(call=0x7fe4f1033660, ops=0x7ffeec81b2d0, nops=1, tag=0x7ffeec81b630, reserved=0x0)
I1221 08:00:32.559509000 4561257920 call.cc:1566] ops[0]: SEND_MESSAGE ptr=0x7fe4f0571e00
I1221 08:00:32.559619000 4561257920 completion_queue.cc:764] cq_end_op_for_pluck(cq=0x7fe4f0615f60, tag=0x7ffeec81b630, error="No Error", done=0x1036c18f0, done_arg=0x7fe4f0616820, storage=0x7fe4f0616898)
I1221 08:00:32.559650000 4561257920 completion_queue.cc:1297] RETURN_EVENT[0x7fe4f0615f60]: OP_COMPLETE: tag:0x7ffeec81b630 OK
After write
I1221 08:00:32.559680000 4561257920 metadata_array.cc:34] grpc_metadata_array_destroy(array=0x7ffeec81bc50)
I1221 08:00:32.559687000 4561257920 metadata_array.cc:34] grpc_metadata_array_destroy(array=0x7ffeec81bc18)
After sending chunk
I1221 08:00:32.712612000 123145462775808 completion_queue.cc:764] cq_end_op_for_pluck(cq=0x7fe4f0615f60, tag=0x7000099075d0, error="No Error", done=0x1036c18f0, done_arg=0x7fe4f040cc10, storage=0x7fe4f040cc88)
I1221 08:00:32.712655000 123145462775808 completion_queue.cc:1297] RETURN_EVENT[0x7fe4f0615f60]: OP_COMPLETE: tag:0x7000099075d0 OK
I1221 08:00:32.712712000 123145462775808 call.cc:573] grpc_call_unref(c=0x7fe4f1033660)
Result stability: 0.01
0 what time
I1221 08:00:32.712930000 123145462775808 call.cc:1967] grpc_call_start_batch(call=0x7fe4f1033660, ops=0x700009907300, nops=2, tag=0x7000099075d0, reserved=0x0)
I1221 08:00:32.712945000 123145462775808 call.cc:1566] ops[0]: RECV_INITIAL_METADATA ptr=0x7ffeec81bc18
I1221 08:00:32.712954000 123145462775808 call.cc:1566] ops[1]: RECV_MESSAGE ptr=0x7000099075f8
E1221 08:00:32.712961000 123145462775808 call_op_set.h:947] assertion failed: false
Abort trap: 6
请注意grpc_metadata_array_destroy
我的失败版本中的调用,而不是工作示例中的调用。它们发生在我发送的每一块音频样本中。那些更熟悉这些 API 的人有什么建议吗?
编辑:失败的断言来自 gRPC 中的以下代码段:
if (err != GRPC_CALL_OK) {
// A failure here indicates an API misuse; for example, doing a Write
// while another Write is already pending on the same RPC or invoking
// WritesDone multiple times
// gpr_log(GPR_ERROR, "API misuse of type %s observed",
// g_core_codegen_interface->grpc_call_error_to_string(err));
GPR_CODEGEN_ASSERT(false);
}
取消注释日志说错误是“GRPC_CALL_ERROR_TOO_MANY_OPERATIONS”,尽管我只处理单个音频流。示例代码只是在每次写入后(看似)任意休眠 1 秒。
解决方案
推荐阅读
- android - 如何将新材质BottomAppBar实现为BottomNavigationView
- javascript - for 循环和解构
- common-lisp - Error In = of (NIL 1) 参数的类型应为 NUMBER。通用 Lisp
- php - 如何在 Laravel 中对关系内部的项目进行分页?
- javascript - 为什么 javascript setInterval (updater) 交互 PHP fwrite 函数?
- haskell - Haskell:尝试渲染文本时出现光泽错误
- java - RxJava Schedulers.io 在 Maven 项目中不起作用
- rust - FromWasmAbi 没有为 fn(SomeStruct) 实现,而 SomeStruct 是 #[wasm_bindgen]
- java - 任务 ':app:mergeDebugResources' 执行失败。错误:无效尺寸
- c - printf 中的条件语句