问题描述
我正在处理一个使用 vlc-3.0.12-win64 的视频处理项目。
我们项目中的另一个模块将生成 yuv 原始数据,现在我们需要渲染 yuv 数据。
但目前还没有解决方案。
因为我们已经使用过 libvlc,所以我们不喜欢使用其他技术知识,例如 D11 或 SDL。
我们知道下面的命令行可以在 VLC 播放器中播放 yuv 文件。
vlc --rawvid-fps 25 --rawvid-width 1920 --rawvid-height 1080 --rawvid-chroma I420 input.yuv
问题是我们可以让 libvlc 做同样的事情吗?
我的测试源代码:
int open_callback(void* opaque,void** datap,uint64_t* sizep)
{
ifstream* file = (ifstream*)(opaque);
file->seekg(0,file->beg);
*sizep = file->tellg();
*datap = opaque;
return 0;
}
ssize_t read_callback(void* opaque,unsigned char* buf,size_t len)
{
ifstream* file = (ifstream*)(opaque);
file->read((char*)(buf),len);
return file->gcount();
}
int seek_callback(void* opaque,uint64_t offset)
{
((ifstream*)(opaque))->seekg(offset);
return 0;
}
void close_callback(void* opaque)
{
((ifstream*)(opaque))->close();
}
void testVLC()
{
libvlc_instance_t* Instance;
libvlc_media_player_t* mp;
Instance = libvlc_new(0,NULL);
//const TCHAR* FilePath = L"C:\\Users\\abc\\Desktop\\1.mp4"; //vidoe can be shown if we enable this line.
const TCHAR* FilePath = L"C:\\Users\\abc\\Desktop\\2.yuv";
ifstream* FileStream = new std::ifstream(FilePath,std::ios::binary | std::ios::ate);
libvlc_media_t* media = libvlc_media_new_callbacks(
Instance,open_callback,read_callback,seek_callback,close_callback,FileStream);
mp = libvlc_media_player_new_from_media(media);
libvlc_media_release(media);
libvlc_media_player_play(mp);
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)