audio-streaming 相关问题

从服务器向客户端传送音频的过程,与下载不同,因为客户端在下载时能够听到音频。




如何在iOS应用中使用API传输语音通话的语音数据?

我想在我正在编写的iOS应用程序中传输语音通话的语音数据。这是供个人使用的,而不是App Store,要完成此任务,我知道我必须了解iPhone功能...

回答 1 投票 0

HTML 音频元素不适用于 Google Drive 或 Dropbox

我在使用音频元素在我的网站中传输音频时遇到问题。 您的浏览器没有

回答 1 投票 0

JavaScript 媒体源 API - 爆裂音频

有人对 MediaSource API 和音频流有经验吗? 我正在尝试为网络研讨会制作一个网络应用程序。我已经做过和正在做的事情: 1)在流媒体端,我创建一个媒体流...

回答 1 投票 0

如何使用 OpenAI TTS 模型在 React + Node 中实现音频流

我将使用 OpenAI TTS 模型实现音频流。 它将从 OpenAI TTS 模型中获取流式音频数据,并通过 WebSocket 将其发送到前端。它在前端播放。前端是

回答 1 投票 0

如何使用AAudio(或其他推荐的C++层工具?)在我的Android应用程序中播放wav文件?

基本信息和问题## 我试图在我的纯 C++ Android 应用程序中播放 .wav 文件。 Gpt推荐AAudio。我写了一些代码,但它不起作用。有人可以帮我弄清楚为什么我的...

回答 1 投票 0

实时音频流无法通过 WebSocket 和音频 API 在 iOS 上播放

我正在使用 WebSocket 和音频 API 构建一个实时音频流应用程序,但我在 iOS 上遇到了一些问题。该应用程序流式传输通过 WebSocket 从 ElevenLabs API 接收的音频块,并且

回答 1 投票 0

如何直接从 API 请求的响应中传输音频?

我正在使用一个 API,当我发出 POST 请求并通过表单数据发送音频文件时,它会返回可流式传输的音频。我不知道有什么方法可以立即播放音频而不必......

回答 1 投票 0

将HLS流转换为旧收音机支持的流

我有一台旧的网络收音机,不支持 HLS 流。 因此我无法通过此网址收听我最喜欢的广播: https://streamcdnf31-4c4b867c89244861ac216426883d1ad0.msvdn.net/radiodee...

回答 1 投票 0

如何让iPhone上的麦克风抑制当前扬声器发出的声音?

我实现了 ChatGPT 实时 API,它允许通过语音等方式与机器人实时聊天。但我遇到了一个问题,ChatGPT 在使用时总是开始自言自语

回答 1 投票 0

下载完成前如何播放音频?

我有一个 Angular 客户端和一个 SpringBoot 服务器。在服务器上,我有一个端点,可以从文本生成音频文件。音频文件的生成依赖于另一个耗时太长的 API (5

回答 1 投票 0

下载完成前按角度播放音频

我有一个 Angular 客户端和一个 SpringBoot 服务器。在服务器上,我有一个端点,可以从文本生成音频文件。音频文件的生成依赖于另一个耗时太长的 API (5

回答 1 投票 0

“三位一体”(以太坊、Swarm 和 Whisper)支持多媒体流吗?

我想以特定的时间间隔流媒体 - 如果您愿意的话,可以算是一种在线广播。我目前正在使用 Icecast,但更喜欢点对点解决方案。我看到有一个概念证明...

回答 3 投票 0

我如何在 flutter/iOS 中传输传入的 pcm16 数据?

这是我的传入数据的颤振代码,我得到的是一个 uint8list 数据流,看起来像这样(如果转录的话) 你好 你好,怎么样 你好,怎么样 你好吗? 客户端.on(

回答 1 投票 0

如何修复错误代码为 0xe (SPXERR_MIC_NOT_AVAILABLE) 的异常

我已经构建了一个聊天机器人框架,现在正在寻求为该机器人集成语音功能。我正在尝试使用 python 运行来自 ms learn faststart for voice sdk 的以下代码。 https://

回答 1 投票 0

使用ffmpeg API连续播放m3u8流失败

我正在开发一个嵌入式Linux系统(5.10.24),我想在其中使用FFMPEG API播放m3u8音频流。 这是我的代码。 #包括 #包括 #包括 我正在开发一个嵌入式Linux系统(5.10.24),我想在其中使用FFMPEG API播放m3u8音频流。 这是我的代码。 #include <stdio.h> #include <stdbool.h> #include <alsa/asoundlib.h> #include <libswresample/swresample.h> #include <libavcodec/avcodec.h> #include <libavformat/avformat.h> #include <libswscale/swscale.h> int init_pcm_play(snd_pcm_t **playback_handle,snd_pcm_uframes_t chunk_size,unsigned int rate,int bits_per_sample,int channels) { snd_pcm_hw_params_t *hw_params; snd_pcm_format_t format; //1. openPCM, if (0 > snd_pcm_open(playback_handle, "default", SND_PCM_STREAM_PLAYBACK, 0)) { printf("snd_pcm_open err\n"); return -1; } //2. snd_pcm_hw_params_t if(0 > snd_pcm_hw_params_malloc (&hw_params)) { printf("snd_pcm_hw_params_malloc err\n"); return -1; } //3. hw_params if(0 > snd_pcm_hw_params_any (*playback_handle, hw_params)) { printf("snd_pcm_hw_params_any err\n"); return -1; } //4. if (0 > snd_pcm_hw_params_set_access (*playback_handle, hw_params, SND_PCM_ACCESS_RW_INTERLEAVED)) { printf("snd_pcm_hw_params_any err\n"); return -1; } //5. SND_PCM_FORMAT_U8,8 if(8 == bits_per_sample) { format = SND_PCM_FORMAT_U8; } if(16 == bits_per_sample) { format = SND_PCM_FORMAT_S16_LE; } if (0 > snd_pcm_hw_params_set_format (*playback_handle, hw_params, format)) { printf("snd_pcm_hw_params_set_format err\n"); return -1; } //6. if (0 > snd_pcm_hw_params_set_rate_near (*playback_handle, hw_params, &rate, 0)) { printf("snd_pcm_hw_params_set_rate_near err\n"); return -1; } //7. if (0 > snd_pcm_hw_params_set_channels(*playback_handle, hw_params, 2)) { printf("snd_pcm_hw_params_set_channels err\n"); return -1; } //8. set hw_params if (0 > snd_pcm_hw_params (*playback_handle, hw_params)) { printf("snd_pcm_hw_params err\n"); return -1; } snd_pcm_hw_params_get_period_size(hw_params, &chunk_size, 0); snd_pcm_hw_params_free (hw_params); return 0; } int main(int argc, char *argv[]) { AVFormatContext *pFormatCtx = NULL; //for opening multi-media file int audioStream = -1; AVCodecContext *pCodecCtx = NULL; AVCodec *pCodec = NULL; // the codecer AVFrame *pFrame = NULL; AVPacket *packet; uint8_t *out_buffer; struct SwrContext *au_convert_ctx; snd_pcm_t *playback_handle; int bits_per_sample = 0; if (avformat_open_input(&pFormatCtx, argv[1], NULL, NULL) != 0) { printf("Failed to open video file!"); return -1; // Couldn't open file } if(avformat_find_stream_info(pFormatCtx,NULL)<0) { printf("Failed to find stream info.\n"); return -1; } audioStream = av_find_best_stream(pFormatCtx, AVMEDIA_TYPE_AUDIO, -1, -1, NULL, 0); if (audioStream == -1) { printf("Din't find a video stream!"); return -1;// Didn't find a video stream } av_dump_format(pFormatCtx, audioStream, NULL, false); // Find the decoder for the video stream pCodec = avcodec_find_decoder(pFormatCtx->streams[audioStream]->codecpar->codec_id); if (pCodec == NULL) { printf("Unsupported codec!\n"); return -1; // Codec not found } // Copy context pCodecCtx = avcodec_alloc_context3(pCodec); AVCodecParameters *pCodecParam = pFormatCtx->streams[audioStream]->codecpar; if (avcodec_parameters_to_context(pCodecCtx, pCodecParam) < 0) { printf("Failed to set codec params\n"); return -1; } // Open codec if (avcodec_open2(pCodecCtx, pCodec, NULL) < 0) { printf("Failed to open decoder!\n"); return -1; // Could not open codec } packet = av_packet_alloc(); pFrame = av_frame_alloc(); uint64_t iInputLayout = av_get_default_channel_layout(pCodecCtx->channels); enum AVSampleFormat eInputSampleFormat = pCodecCtx->sample_fmt; int iInputSampleRate = pCodecCtx->sample_rate; uint64_t iOutputLayout = av_get_default_channel_layout(pCodecCtx->channels); int iOutputChans = pCodecCtx->channels; enum AVSampleFormat eOutputSampleFormat = AV_SAMPLE_FMT_S16; int iOutputSampleRate = pCodecCtx->sample_rate; au_convert_ctx = swr_alloc_set_opts(NULL,iOutputLayout, eOutputSampleFormat, iOutputSampleRate, iInputLayout,eInputSampleFormat, iInputSampleRate, 0, NULL); swr_init(au_convert_ctx); int iConvertLineSize = 0; int iConvertBuffSize = av_samples_get_buffer_size(&iConvertLineSize, iOutputChans, pCodecCtx->frame_size, eOutputSampleFormat, 0); printf("ochans: %d, ifrmsmp: %d, osfmt: %d, cbufsz: %d\n", iOutputChans, pCodecCtx->frame_size, eOutputSampleFormat, iConvertBuffSize); out_buffer = (uint8_t *) av_malloc(iConvertBuffSize); if(eOutputSampleFormat == AV_SAMPLE_FMT_S16 ) { bits_per_sample = 16; } /*** alsa handle ***/ init_pcm_play(&playback_handle,256, iOutputSampleRate,bits_per_sample,2); if (0 > snd_pcm_prepare (playback_handle)) { printf("snd_pcm_prepare err\n"); return -1; } while (av_read_frame(pFormatCtx, packet) >= 0) { if (packet->stream_index == audioStream) { avcodec_send_packet(pCodecCtx, packet); while (avcodec_receive_frame(pCodecCtx, pFrame) == 0) { int outframes = swr_convert(au_convert_ctx, &out_buffer, pCodecCtx->frame_size, (const uint8_t **) pFrame->data, pFrame->nb_samples); // 转换音频 snd_pcm_writei(playback_handle, out_buffer, outframes); av_frame_unref(pFrame); } } av_packet_unref(packet); } swr_free(&au_convert_ctx); snd_pcm_close(playback_handle); av_freep(&out_buffer); return 0; } 当我运行它时,我得到以下输出。 ./ffmpeg_test http://live.ximalaya.com/radio-first-page-app/live/2730/64.m3 u8 [hls @ 0x21a8020] Skip ('#EXT-X-VERSION:3') [hls @ 0x21a8020] Opening 'http://broadcast.tx.xmcdn.com/live/2730_64_241104_000015_2186.aac' for reading [hls @ 0x21a8020] Opening 'http://broadcast.tx.xmcdn.com/live/2730_64_241104_000015_2187.aac' for reading Input #0, hls, from '(null)': Duration: N/A, bitrate: N/A Program 0 Metadata: variant_bitrate : 0 Stream #0:0: Audio: aac (HE-AAC), 44100 Hz, stereo, fltp Metadata: variant_bitrate : 0 [http @ 0x21b7ba0] Opening 'http://broadcast.tx.xmcdn.com/live/2730_64_241104_000015_2188.aac' for reading [hls @ 0x21a8020] Skip ('#EXT-X-VERSION:3') [http @ 0x21d4c20] Opening 'http://broadcast.tx.xmcdn.com/live/2730_64_241104_000015_2189.aac' for reading 一开始可以播放音频,直到第二次Opening http://...发生。 如何使其能够连续播放m3u8音频流? 我找到了代码的修复程序,使其能够连续播放直播流。 需要添加以下代码 rc = snd_pcm_writei(playback_handle, out_buffer2, outframes); + if (rc < 0) { + snd_pcm_prepare(playback_handle); + } 也就是说,流媒体播放过程中出现错误,需要恢复ALSA错误。 现在可以连续播放直播了,但是我遇到了另一个问题:链接更改时会出现轻微的中断,如下, [http @ 0x6eaba0] Opening 'http://broadcast.tx.xmcdn.com/live/2730_64_241107_000014_1e5b.aac' for reading ALSA lib pcm.c:8675:(snd_pcm_recover) underrun occurred [http @ 0x7665d0] Opening 'http://live.ximalaya.com/radio-first-page-app/live/2730/64.m3u8' for reading [hls @ 0x6db020] Skip ('#EXT-X-VERSION:3') [http @ 0x707c40] Opening 'http://broadcast.tx.xmcdn.com/live/2730_64_241107_000014_1e5c.aac' for reading ALSA lib pcm.c:8675:(snd_pcm_recover) underrun occurred [http @ 0x7665d0] Opening 'http://live.ximalaya.com/radio-first-page-app/live/2730/64.m3u8' for reading [hls @ 0x6db020] Skip ('#EXT-X-VERSION:3') [http @ 0x6eaba0] Opening 'http://broadcast.tx.xmcdn.com/live/2730_64_241107_000014_1e5d.aac' for reading ALSA lib pcm.c:8675:(snd_pcm_recover) underrun occurred 我的缓冲区/周期设置似乎有问题,设置正确的值是多少???

回答 1 投票 0

如何在Python中从服务器以音频流发送ICY格式消息?

我使用来自异步生成器源的音频字节在 FastAPI 中实现了 StreamingResponse。但除了需要在

回答 1 投票 0

解码 LPR 媒体

我正在尝试解码 SIP 呼叫,如下所示,但我对此编解码器一无所知。请帮助我或建议我一些我应该阅读的文档。 m=音频 49198 RTP/AVP 118 a=rtpmap:118 SIRENLPR/

回答 1 投票 0

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.