- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
在 C++ 中给定一个编码缓冲区,使用 oggvorbis 结构来解码已经在内存中的数据的步骤是什么?
OggVorbis_File 无法使用,因为 Assets 在压缩文件中。
我正在尝试研究必要的结构和方法,但我对音频编码和解码还很陌生。
也感谢任何可以帮助我进一步阅读的资源!
我应该澄清一下,我打算使用解码后的数据流式传输到 OpenAL。
谢谢。
最佳答案
回答我自己的问题。
这可以通过向 vorbis 提供自定义回调来完成。
struct ogg_file
{
char* curPtr;
char* filePtr;
size_t fileSize;
};
size_t AR_readOgg(void* dst, size_t size1, size_t size2, void* fh)
{
ogg_file* of = reinterpret_cast<ogg_file*>(fh);
size_t len = size1 * size2;
if ( of->curPtr + len > of->filePtr + of->fileSize )
{
len = of->filePtr + of->fileSize - of->curPtr;
}
memcpy( dst, of->curPtr, len );
of->curPtr += len;
return len;
}
int AR_seekOgg( void *fh, ogg_int64_t to, int type ) {
ogg_file* of = reinterpret_cast<ogg_file*>(fh);
switch( type ) {
case SEEK_CUR:
of->curPtr += to;
break;
case SEEK_END:
of->curPtr = of->filePtr + of->fileSize - to;
break;
case SEEK_SET:
of->curPtr = of->filePtr + to;
break;
default:
return -1;
}
if ( of->curPtr < of->filePtr ) {
of->curPtr = of->filePtr;
return -1;
}
if ( of->curPtr > of->filePtr + of->fileSize ) {
of->curPtr = of->filePtr + of->fileSize;
return -1;
}
return 0;
}
int AR_closeOgg(void* fh)
{
return 0;
}
long AR_tellOgg( void *fh )
{
ogg_file* of = reinterpret_cast<ogg_file*>(fh);
return (of->curPtr - of->filePtr);
}
用法
ov_callbacks callbacks;
ogg_file t;
t.curPtr = t.filePtr = compressedData;
t.fileSize = compressedDataSize;
OggVorbis_File* ov = new OggVorbis_File;
mOggFile = ov;
memset( ov, 0, sizeof( OggVorbis_File ) );
callbacks.read_func = AR_readOgg;
callbacks.seek_func = AR_seekOgg;
callbacks.close_func = AR_closeOgg;
callbacks.tell_func = AR_tellOgg;
int ret = ov_open_callbacks((void *)&t, ov, NULL, -1, callbacks);
vorbis_info* vi = ov_info(ov, -1);
assert(vi);
/* compressed data is available to use, to uncompress look into ov_read */
特别感谢 Doom3 GPL 源提供的大部分帮助,它可以查看:here
关于c++ - libvorbis 音频从 C++ 中的内存解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13437422/
我在使用 ffmpeg 转换视频时遇到问题。它已安装,所有库也都在那里。但是使用某些命令,它会为不同的编码器显示它们是未知的。 未知的 libvorbis 未知的 libvpx 未知的 libogg
我无法将视频文件转码为 webm,因为我的机器无法找到 libvorbis。当我运行以下命令时: ffmpeg -y -i /public/uploads/tmp/1382112521-11953-7
我尝试使用 FFMpeg 生成 MKV 视频格式。默认情况下,FFMpeg 将使用 h264 和 libvorbis。但是当我使用ffmpeg源文件夹下的doc/examples/muxing.c时,
我关注 this guide编译带有 libvpx 支持的 FFMPEG。在 libvorbis 编译步骤中,我收到此错误: The test program failed to compile or
在 C++ 中给定一个编码缓冲区,使用 oggvorbis 结构来解码已经在内存中的数据的步骤是什么? OggVorbis_File 无法使用,因为 Assets 在压缩文件中。 我正在尝试研究必要的
请帮助我,我正在用我的项目中的libvorbis-libogg-android录制声音并编码为ogg。当我的录制时间超过30秒时,我的应用崩溃了, private class AsyncEncodin
我正在尝试更新应用程序,但它需要为 iOS 编译 libogg 和 libvorbis,因为 SDK 是新的并且需要重新编译。 未包含说明。有谁知道如何为 iOS 编译这两个库? 谢谢! 最佳答案 由
将音频编码为 webm 时遇到问题。尝试了许多不同的方法,它只是没有发生。每次通过之前,命令都打印在下面。 我尝试过移动音频命令,尝试不同的比特率,不同的音频命令,并在几个不同的文件上尝试过,它们都有
我使用以下命令安装 libvorbis 和 libvpx。 yum install libvpx yum install libvorbis 请帮我启用这些模块。我正在使用centos 7服务器。 最
尝试将一堆 mp4 文件转换为 webm。所以我运行以下命令。我用 ffmpeg 尝试了类似的命令。 avconv -i input.mp4 -threads 8 -s 1280x720 -pre l
在我的 Android 应用程序中,我想实现 libogg 和 libvorbis 库,以便我可以播放和操作 ogg 文件。 不幸的是,我还没有找到任何可以解释如何实现这一目标的教程。 也就是说,这是
我正在尝试运行 ffmpeg 多路复用示例的修改版本,该示例将 vorbis 编码的音频输出到 webm 容器。 如果我将 mp3 指定为格式,代码可以正常工作,只是在我使用 vorbis 时不行 代
(我的英语不太流利,我会尽力而为) 我尝试编写 (C++) 一个简单的 mkv 播放器。我在这个主题上很新,所以我一点一点地发现我需要的一切。一开始,我对视频使用 VP8 编解码器,对音频使用 Vor
我正在使用 ffmpeg-20140717-git-fa6716c-win64-shared 最新的一个,他们已经提到 --enable-libvirbose 。 但是一旦我运行命令将 .mov 转换
嗨,我正在尝试在 Mac OSX 10.6 上编译 libsndfile 1.0.25 我已经用 brew 安装了 libvorbis-1.3.4 和 libogg-1.3.1 1 - 我尝试用 br
我正在尝试在 rhel6.4 x86_64 下安装 recordmydesktop-0.3.8.1。在运行 ./configure 时,我收到以下错误消息:配置:错误:找不到 libvorbis但是我
您好,我一直在尝试使用本教程安装带有一些库的 FFmpeg https://trac.ffmpeg.org/wiki/CompilationGuide/Centos?version=85 使用此命令安
Adobe cq 使用 ffmpeg 转码视频。当用户将任何视频上传到数字 Assets 管理 (DAM) 部分时,会触发一个工作流。此工作流程在内部使用 ffmpeg 对上传的视频进行转码,并以 等
我是一名优秀的程序员,十分优秀!