Fixed line numbers as in the repository: "Google\Protobuf\Internal\GPBDecodeException: Error occurred during parsing: Fail to push limit. in /var/www/4servicetp_ru/bat/vendor/google/protobuf/src/Google/Protobuf/Internal/CodedInputStream.php: *340* Stack trace: #0 /var/www/4servicetp_ru/bat/vendor/google/protobuf/src/Google/Protobuf/Internal/CodedInputStream.php( *363*): Google\Protobuf\Internal\CodedInputStream->pushLimit(917)..."
среда, 18 августа 2021 г. в 12:04:27 UTC+3, Евгений Белоусов: > Hi. > Version Protobuf: v3.17.3 > Language: PHP. > The web portal is developed on the basis of the YII2 framework. > I have downloaded the PHP SDK for Cloud Speech-to-Text for converting > recorded audio (mp3) speech to text. > This extension uses Protobuf to work with audio streams. > > With this request, I send an audio file for transcription: > > https://cloud.google.com/speech-to-text/docs/samples/speech-transcribe-async#speech_transcribe_async-php > > In my controller it looks like this: > " > $audioFile = $_SERVER['DOCUMENT_ROOT'] . > '/frontend/web/audiofiles/380633470210_2021-05-13 115637.mp3'; > > // change these variables if necessary > $encoding = AudioEncoding::MP3; > $sampleRateHertz = 44100; > > $languageCode = 'uk-UA'; > // get contents of a file into a string > $content = file_get_contents($audioFile); > > // set string as audio content > $audio = (new RecognitionAudio()) > ->setContent($content); > > // set config > $config = (new RecognitionConfig()) > ->setEncoding($encoding) > ->setSampleRateHertz($sampleRateHertz) > ->setLanguageCode($languageCode); > > // create the speech client > $client = new SpeechClient(); > > // create the asyncronous recognize operation > $operation = $client->longRunningRecognize($config, > $audio); > $operation->pollUntilComplete(); > if ($operation->operationSucceeded()) { > $response = $operation->getResult(); > > $comment = ''; > > // each result is for a consecutive portion of the > audio. iterate > // through them to get the transcripts for the entire > audio file. > foreach ($response->getResults() as $result) { > $alternatives = $result->getAlternatives(); > $mostLikely = $alternatives[0]; > $transcript = $mostLikely->getTranscript(); > $confidence = $mostLikely->getConfidence(); > > $comment .= '(' . $confidence . '): ' . > $transcript . PHP_EOL; > } > } > $client->close(); > " > > On the local version of the site (Openserver, PHP 7.1.32, Apache API > 20120211) everything works - I get lines of transcribed text in the > $comment variable. > > On hosting (PHP 7.3.15-3 + ubuntu16.04.1 + deb.sury.org, Apache/2.4.41) I > get an error: > > "Google\Protobuf\Internal\GPBDecodeException: Error occurred during > parsing: Fail to push limit. in > /var/www/4servicetp_ru/bat/vendor/google/protobuf/src/Google/Protobuf/Internal/CodedInputStream.php:367 > Stack trace: > #0 > /var/www/4servicetp_ru/bat/vendor/google/protobuf/src/Google/Protobuf/Internal/CodedInputStream.php(390): > > Google\Protobuf\Internal\CodedInputStream->pushLimit(917) > #1 > /var/www/4servicetp_ru/bat/vendor/google/protobuf/src/Google/Protobuf/Internal/GPBWire.php(286): > > Google\Protobuf\Internal\CodedInputStream->incrementRecursionDepthAndPushLimit(917, > > 0, 0) > #2 > /var/www/4servicetp_ru/bat/vendor/google/protobuf/src/Google/Protobuf/Internal/Message.php(437): > > Google\Protobuf\Internal\GPBWire::readMessage(Object(Google\Protobuf\Internal\CodedInputStream), > > Object(Google\Protobuf\Internal\FileDescriptorProto)) > #3 > /var/www/4servicetp_ru/bat/vendor/google/protobuf/src/Google/Protobuf/Internal/Message.php(527): > > Google\Protobuf\Internal\Message::parseFieldFromStreamNoTag(Object(Google\Protobuf\Internal\CodedInputStream), > > Object(Google\Protobuf\Internal\FieldDescriptor), > Object(Google\Protobuf\Internal\FileDescriptorProto)) > #4 > /var/www/4servicetp_ru/bat/vendor/google/protobuf/src/Google/Protobuf/Internal/Message.php(823): > > Google\Protobuf\Internal\Message->parseFieldFromStream(10, > Object(Google\Protobuf\Internal\CodedInputStream), > Object(Google\Protobuf\Internal\FieldDescriptor)) > #5 > /var/www/4servicetp_ru/bat/vendor/google/protobuf/src/Google/Protobuf/Internal/Message.php(787): > > Google\Protobuf\Internal\Message->parseFromStream(Object(Google\Protobuf\Internal\CodedInputStream)) > #6 > /var/www/4servicetp_ru/bat/vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorPool.php(61): > > Google\Protobuf\Internal\Message->mergeFromString('\n\x95\x07\n,google/clo...') > #7 > /var/www/4servicetp_ru/bat/vendor/google/cloud-speech/metadata/V1P1Beta1/Resource.php(42): > > Google\Protobuf\Internal\DescriptorPool->internalAddGeneratedFile('\n\x95\x07\n,google/clo...', > > true) > #8 > /var/www/4servicetp_ru/bat/vendor/google/cloud-speech/metadata/V1P1Beta1/CloudSpeech.php(21): > > GPBMetadata\Google\Cloud\Speech\V1P1Beta1\Resource::initOnce() > #9 > /var/www/4servicetp_ru/bat/vendor/google/cloud-speech/src/V1p1beta1/SpeechContext.php(79): > > GPBMetadata\Google\Cloud\Speech\V1P1Beta1\CloudSpeech::initOnce() > #10 > /var/www/4servicetp_ru/bat/backend/controllers/AnketaController.php(748): > Google\Cloud\Speech\V1p1beta1\SpeechContext->__construct() > #11 [internal function]: > backend\controllers\AnketaController->actionTranscribe('9') > #12 > /var/www/4servicetp_ru/bat/vendor/yiisoft/yii2/base/InlineAction.php(57): > call_user_func_array(Array, Array) > #13 > /var/www/4servicetp_ru/bat/vendor/yiisoft/yii2/base/Controller.php(181): > yii\base\InlineAction->runWithParams(Array) > #14 /var/www/4servicetp_ru/bat/vendor/yiisoft/yii2/base/Module.php(534): > yii\base\Controller->runAction('transcribe', Array) > #15 > /var/www/4servicetp_ru/bat/vendor/yiisoft/yii2/web/Application.php(104): > yii\base\Module->runAction('anketa/transcri...', Array) > #16 > /var/www/4servicetp_ru/bat/vendor/yiisoft/yii2/base/Application.php(392): > yii\web\Application->handleRequest(Object(yii\web\Request)) > #17 /var/www/4servicetp_ru/bat/backend/web/index.php(17): > yii\base\Application->run()" > > The error itself occurs directly in the application code ( > https://github.com/protocolbuffers/protobuf/blob/master/php/src/Google/Protobuf/Internal/CodedInputStream.php > ): > " > public function pushLimit($byte_limit) > { > // Current position relative to the beginning of the stream. > $current_position = $this->current(); > $old_limit = $this->current_limit; > > // security: byte_limit is possibly evil, so check for negative > values > // and overflow. > if ($byte_limit >= 0 && > $byte_limit <= PHP_INT_MAX - $current_position && > $byte_limit <= $this->current_limit - $current_position) { > $this->current_limit = $current_position + $byte_limit; > $this->recomputeBufferLimits(); > > } else { > > throw new GPBDecodeException("Fail to push limit."); > } > > return $old_limit; > } > " > > I talked about this issue in a chat with a Google specialist and he > directed me here, because in his opinion the problem is precisely in the > work of Protobuf. > I would be grateful for opinions and tips on what could be the cause of > this error. > > > -- You received this message because you are subscribed to the Google Groups "Protocol Buffers" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/protobuf/97b2e20e-5167-4475-b0cf-366af03e4eabn%40googlegroups.com.
