- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 LibVLC 解码视频文件并将其渲染为纹理。
打开和开始播放的代码有效,音频播放完美,但像素缓冲区始终填充0xCD。我尝试在 VLC 上渲染的视频,甚至在 C# 实现中我也能正常工作,但是使用 C 中的这个新代码我无法让它工作......
我使用的是 x64 版本的 vlc 库,并且该程序是针对 x64 编译的(如果这有什么区别的话)。
这是我的代码:
#include "stdafx.h"
#include "video.h"
#include <string.h>
#include <vlc\libvlc.h>
#include <vlc\libvlc_media.h>
#include <vlc\libvlc_media_player.h>
libvlc_instance_t* instance;
libvlc_media_t* media;
libvlc_media_player_t* player;
struct videoContext
{
unsigned char *pixeldata;
unsigned char currentFrame;
int width;
int height;
};
struct videoContext mainContext;
bool gotData = false;
int width;
int height;
static void *lock(void *data, void **p_pixels)
{
videoContext* context = (videoContext*)data;
*p_pixels = context->pixeldata;
return NULL;
}
static void unlock(void *data, void *id, void *const *p_pixels)
{
mainContext.currentFrame++;
//If I check here mainContext.pixeldata is filled with 0xCD
}
static void display(void *data, void *id)
{
}
static unsigned int formatSetup(void **opaque, char *chroma, unsigned *w, unsigned *h, unsigned *pitches, unsigned *lines)
{
chroma = "RV24";
width = *w;
height = *h;
mainContext.pixeldata = (unsigned char*)malloc(width * height * 3);
mainContext.width = width;
mainContext.height = height;
return 1;
}
void getVideoSize(int* w, int* h, int* bpp)
{
*w = width;
*h = height;
*bpp = 3 * 8;
}
videoContext* initVideo(const char* fileName)
{
mainContext.pixeldata = 0;
instance = libvlc_new(0, NULL);
media = libvlc_media_new_location(instance, fileName);
player = libvlc_media_player_new_from_media(media);
libvlc_video_set_callbacks(player, lock, unlock, display, &mainContext);
libvlc_video_set_format_callbacks(player, formatSetup, NULL);
libvlc_media_player_play(player);
return &mainContext;
}
似乎没有任何内容被写入缓冲区,因为我设置的任何内容都留在那里。
如果我删除格式设置回调,并使用“RV24”色度模式及其工作分辨率对 libvlc_video_set_format 进行硬编码,那么,我是否错误地理解了 libvlc_video_set_format_callbacks 的作用?根据格式设置回调的文档,可以更改参数以启用转码,但即使我在设置格式设置回调时将格式保留为原样,它也不起作用...
最佳答案
好吧,所以这个问题非常愚蠢。首先,必须设置音高和线,以便 libvlc 知道分配的大小。其次,不能只用 const char 分配色度,似乎 const char 末尾有一个额外的“\0x00”,liblvc 对其进行计数,然后找不到解码器。
最终的回调是这样的:
static unsigned int formatSetup(void **opaque, char *chroma, unsigned *w, unsigned *h, unsigned *pitches, unsigned *lines)
{
memcpy(chroma, "RV24", sizeof("RV24") - 1);
width = *w;
height = *h;
*pitches = width * 3;
*lines = height;
mainContext.pixeldata = (unsigned char*)malloc(width * height * 4);
mainContext.width = width;
mainContext.height = height;
return 1;
}
关于c++ - LibVLC 空图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40365353/
我正在开发一个 Android 项目,我想使用 LibVLC 创建一个媒体播放器。要使用此库创建媒体播放器,我需要实例化 LibVLC 对象。但是当我尝试这样做时,实例化将失败并且应用程序将自动关闭。
我下载了 vlc-2.2.4-win32.7z 并提取了文件。我在 VS2010 中创建了一个空项目,并使用我在 https://wiki.videolan.org/LibVLC_Tutorial/
当我尝试执行库 Qt-VLC 的示例时出现以下错误 *** glibc detected *** /home/lalalal/Scrivania/SORGENTI/VLC-QT/build-d
我想在Android平台上开发一个Android程序,并且我还编译了一些libs(例如libvlc.so,libvlcjni.so……)。但是在我构建了这些库之后,我还发现了一些Java代码,一个名为
我正在开发一个利用 Caprica's VLCJ Bindings 的程序. 这对 Windows 和 Mac 来说很好,因为我可以将它们的 VLC 库打包到一个 zip 文件中,并在适当的地方将它们
我目前正在尝试使用LibVLC播放视频,有一些问题: 在具有多个屏幕的计算机上,如何让 LibVLC 在特定屏幕上显示全屏? 我尝试使用 libvlc_video_set_marquee_int。经过
有没有支持 Http Adaptive Streaming 的开源流媒体解决方案?根据我的研究,VLC 不支持自适应流媒体。我不确定 Darwin 流服务器。有什么想法吗? 最佳答案 我看到了它们,但
我目前正在尝试使用LibVLC播放视频,有一些问题: 在具有多个屏幕的计算机上,如何让 LibVLC 在特定屏幕上显示全屏? 我尝试使用 libvlc_video_set_marquee_int。经过
我试图在播放音频文件时设置音量,但它似乎根本不起作用。请问我做错了什么? # create a vlc playable object from source self.playable = vlc.
我有一个 .NET Framework 项目 A 的解决方案,它构建了一个包含类 MyPlayer 的 winforms 应用程序,它需要 LibVLCSharp。为了正确构建和运行应用程序,我必须添
嗨,我有这个代码来流式传输一些视频 package video; import javax.swing.*; import java.awt.*; import java.io.File; impor
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我正在尝试使用 LibVLC 解码视频文件并将其渲染为纹理。 打开和开始播放的代码有效,音频播放完美,但像素缓冲区始终填充0xCD。我尝试在 VLC 上渲染的视频,甚至在 C# 实现中我也能正常工作,
我有这个代码: public class MediaPanel { public static void main(final String[] args) {
我对使用媒体编解码器还很陌生,我尝试使用 Java 播放媒体文件并进行了一些研究,我发现 vlcj 绑定(bind)符合我的需要。我希望将 libvlc native 库与我的应用程序中的插件模块捆绑
在 vlc 中有一些我在 libvlc 中找不到的视频效果,当我在 vlc 中打开视频时,我可以转到“工具->效果和滤镜->视频效果”,然后有很多视频效果我可以使用,例如否定颜色或降噪器或色调分离器等
我制作了 qt 快速应用程序,我需要制作一个带有视频的声明性小部件(我不想使用 qt mobility)。就像,这不是问题。但我不知道如何做模糊 libVLC。有谁知道如何使用 libVLC 制作模糊
我正在尝试在 LibVLC 中设置日志记录,但遇到了一些问题。 我使用的函数是libvlc_log_set_file,文档如下: LibVLC logging docs 这是我现在的代码: //hea
我正在编写 GTK/VLC 程序。与普通媒体播放器一样,我的程序应按如下方式运行: 双击播放列表(使用GtkTreeView实现)使播放器(使用libvlc_media_player实现)播放选定的媒
我正在使用 libvlc,我想检查媒体位置/路径是否有效: libvlc_instance_t* inst = libvlc_new(0, NULL); libvlc_media_t* m = lib
我是一名优秀的程序员,十分优秀!