如何解决如何使用 libvlc 播放 yuv 原始数据?
我正在处理一个使用 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 举报,一经查实,本站将立刻删除。