- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
(我的英语不太流利,我会尽力而为)
我尝试编写 (C++) 一个简单的 mkv 播放器。我在这个主题上很新,所以我一点一点地发现我需要的一切。一开始,我对视频使用 VP8 编解码器,对音频使用 Vorbis。视频方面目前看起来还不错,但我在音频方面遇到了麻烦。
我无法找出循环逻辑来解码我使用 libvorbis 从 mkvparser 获得的音频帧。我抬头看了this sample和 this brief explanation但无法让它在我的案例中发挥作用。而且我没有找到其他简单的例子。
这是我的一段代码:
const mkvparser::Block* const pBlock = m_pMkvContext->pBlockEntry->GetBlock();
const mkvparser::Track* const pTrack = m_pMkvContext->pTracks->GetTrackByNumber( (unsigned long)pBlock->GetTrackNumber() );
if ( pTrack != NULL )
{
const long long trackType = pTrack->GetType();
const int frameCount = pBlock->GetFrameCount();
if ( frameCount > 0 )
{
const mkvparser::Block::Frame& oFrame = pBlock->GetFrame( 0 );
unsigned char* pData = (unsigned char*)malloc( (size_t)oFrame.len );
oFrame.Read( &m_pMkvContext->oReader, pData );
if ( trackType == mkvparser::Track::kVideo )
{
// i'm ok here
}
else if ( trackType == mkvparser::Track::kAudio )
{
// what to do here with my audio frame data ?
}
free( pData );
}
}
也许我获取帧的方式适合视频而不适合音频...
你们知道一些好的资源可以分享吗?或者一些建议?
感谢您的帮助!
[编辑]:我忘了添加我的尝试之一:
bool MoviePlayer::DecodeAudioData( unsigned char* pData, uint32 iSize )
{
int ret;
char* pBuffer = NULL;
pBuffer = ogg_sync_buffer( &m_pOVContext->oOggSyncState, iSize );
memcpy( pBuffer, pData, iSize );
ogg_sync_wrote( &m_pOVContext->oOggSyncState, iSize );
ret = ogg_sync_pageout( &m_pOVContext->oOggSyncState, &m_pOVContext->oOggPage );
ret = ogg_stream_init( &m_pOVContext->oOggStreamState, ogg_page_serialno(&m_pOVContext->oOggPage) );
ret = ogg_stream_pagein( &m_pOVContext->oOggStreamState, &m_pOVContext->oOggPage );
int iPacketsCount = ogg_page_packets( &m_pOVContext->oOggPage );
for ( int i = 0; i < iPacketsCount; ++i )
{
ret = ogg_stream_packetout(&m_pOVContext->oOggStreamState, &m_pOVContext->oOggPacket);
// do something with the packet...
}
return true;
}
它在 ogg_sync_pageout 崩溃,因为我的 ogg_page 没有正确初始化。但是,不像我发现的示例中那样来自正确的 .ogg 文件,我不知道如何正确初始化 vorbis 结构。
最佳答案
https://matroska.org/technical/specs/codecid/index.html
在 A_VORBIS 部分私有(private)数据按顺序包含前三个 Vorbis 数据包....
编解码器私有(private)在这里
https://matroska.org/technical/specs/index.html
“编解码器私有(private) 3 [63][A2]”
关于c++ - 从 matroska(mkv、webm)到音频(C++ 通过 libvorbis)的解码循环逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38207823/
我在使用 ffmpeg 时遇到了这些名称非常相似的格式: matroska matroska,webm webm 1.和2.有什么区别?那么2.和3.呢?可以支持webm的视频播放器吗?或 matro
我想添加一个 protobuf作为 Matroska (mkv) 视频文件的附件的消息 在没有复制视频数据的情况下写入所有视频帧后 .这必须是可能的,因为可以使用 MKVToolNix 套件(对于 J
我有一个 mkv 文件没有有效的持续时间。我想手动更改此持续时间参数。我通过了定义在这个 matroska 规范 http://www.matroska.org/technical/specs/ind
我们正在开发的硬件不支持播放 mkv 文件。 所以我需要将 Matroska (mkv) 视频文件转码为 mp4 视频文件。 正如我从转码在线可用 Material 中了解到的那样,我需要执行以下操作
我想在不转换格式的情况下从浏览器观看我的 MKV 电影集(主要使用 x264 编解码器编码)。 是否有任何开源替代商业 Apache 模块: http://h264.code-shop.com/tra
能够将 mkv 文件转储为某些文本(例如在 mkvinfo -v 中)、编辑它并重建回来,例如将二进制数据保留为十六进制转储,这将很有用。 类似于: $ mkv2xml test.xml $ hea
电影包含具有不同纵横比的部分变得越来越普遍。例如,电影《黑暗骑士》有时是 16:9 全画幅,有时是 2.40:1 加信箱。在 16:9(甚至 4:3)屏幕上观看时这很好,但如果您尝试在 2.40:1
我有一个应用程序,它从用户那里捕获多个视频流并将它们放入一个 mkv 输出文件中。 数据来自 RTP 数据包。我使用h264。 我正在使用 ffmpeg 和 bytedeco/javacpp-pres
因此,当将文件附加到 matroska 容器时,它们会获得一个名称,通常是它们的原始名称。但是,当您运行 Windows 并提供要附加的文件的完整路径时,ffmpeg 将该完整路径设置为附件的名称。如
嗨,我是AWS的新手。我的应用程序是使用AWS transcribe录制音频并将语音转换为文本。 因此,我正在从Web浏览器录制音频,然后将其保存到AWS S3。稍后,当我尝试在该音频文件上使用AWS
我正在使用 FFMPEG 库将 H.264 和 AAC 帧复用到 Matroska (.mkv) 文件。我可以使用命令行和 C 程序来做到这一点。 现在,我不想将混合的 matroska 数据写入文件
我正在尝试使用节点包“recordrtc”(我使用的是角度)从我的网络摄像头录制视频。 即使我在选项中将 mime 类型设置为“video/webm”,它似乎总是将其切换回“x-matroska”..
我一直在开发一个应用程序,我使用 rtspsrc 将音频和视频从一个网络摄像机收集到另一个网络摄像机。但是,我无法从相机观看流,因此无法验证流是否按预期工作。为了验证流是否正确,我想将其记录在 SD
我做了一个简单的图表来编写 MKV 文件。但我不想使用文件编写器。我想使用 SampleGabber 并使用简单的程序获取流。问题是我从 Matroska muxer 以外的任何地方获取数据!(我该怎
在我的视频播放器中,当我尝试播放 MKV Matroska 文件时,它保持静止,视频没有播放。 我关注 CodeLabs 和 ExoPlayer Dev 并构建播放器,它可以播放 .MP4 但无法播放
(我的英语不太流利,我会尽力而为) 我尝试编写 (C++) 一个简单的 mkv 播放器。我在这个主题上很新,所以我一点一点地发现我需要的一切。一开始,我对视频使用 VP8 编解码器,对音频使用 Vor
我是一名优秀的程序员,十分优秀!