首页 > 解决方案 > 中止陷阱:来自 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 秒。

标签: c++google-speech-api

解决方案


推荐阅读