我试图在LibVLC中设置日志记录,但遇到了一些问题。
我使用的函数是libvlc_log_set_file,下面是docs:LibVLC日志记录文档
下面是我现在的代码:
//header
private:
FILE * logFile;
//source
logFile = fopen(path.c_str(), "w");
if(logFile != NULL)
{
libvlc_log_set_file(_libvlc_instance, logFile);
}在libvlc_log_set_file行上,我得到了以下错误:“nw.exe: 0xC0000005:访问冲突写入位置0x000014中的未处理异常( 0x77559E33 (ntdll.dll) )”。
我可以用fputs()打开和写入文件。
我在64位Windows 7机器上使用NW.js与WebChimera.js一起编译为32位。
有什么想法吗?
发布于 2015-07-14 23:29:01
我今天遇到了这个问题。我无法用libvlc_log_set_file解决这个问题。相反,我选择使用libvlc_log_set设置回调,并使用该方法写入日志文件。下面是一个例子,它展示了需要做的事情。我不推荐全局文件指针,它只适用于这个快速示例。
注意: logpath是包含日志文件路径的const char*。另外,您可能想要集群文件来确保线程的安全。您还可以在其中抛出一个开关语句,以处理LIBVLC_NOTICE、LIBVLC_ERROR、LIBVLC_WARNING和LIBVLC_DEBUG的级别参数,从而使日志记录具有一定的粒度。
bool g_loggingEnabled = true;
FILE* g_logfp = nullptr;
void logcb(void *data, int level, const libvlc_log_t *ctx, const char *fmt, va_list args)
{
if (!g_loggingEnabled) return;
if (g_logfp == nullptr)
{
errno_t err = fopen_s(&g_logfp, logpath, "w");
if (err != 0)
{
g_loggingEnabled = false;
return;
}
}
vfprintf(g_logfp, fmt, args);
}增编:在Windows上,您可能希望使用CreateFile来设置FILE_SHARE_READ标志,并使用WriteFile,这样外部文本编辑器就可以在实时日志记录时查看文件。如果需要,请查看vsprintf_s而不是vfprintf来填充字符缓冲区,然后在logcb方法中传递给WriteFile。
https://stackoverflow.com/questions/31334594
复制相似问题