Posted on 25-11-2011
Filed Under (技术) by waterlin

今天在 Ubuntu 下使用 OpenCV 来读取一个视频,碰到了下述问题:

  1. 自己手动安装的 OpenCV2.2.0 无法正确读取视频内容,用函数 cvCaptureFromAVI() 及 cvGetCaptureProperty() 均提示说失败:

    所有的测试视频在 Windows 下用 OpenCV2.2.0 是可以正常读取的,应该是 ffmpeg 安装不完全或是不正确。

  2. 从源里安装 OpenCV2.1 后,可以打开视频读取数据,可是在读取视频帧内容的时候,却提示如下错误:
    [swscaler @ 0x94b3e80]No accelerated colorspace conversion found from yuv420p to bgr24.
    

    这个问题应该是 OpenCV 在用 ffmpeg 解压 yuv420 数据时出错。

对于上述问题,可以采用下面的办法来解决:

  1. 重新安装 ffmpeg x264:Install and use the latest FFmpeg and x264
  2. 再重新安装 OpenCV,经测试,可以正确安装 OpenCV 2.3.1 版本,安装成功后,视频读写一切正常。

另外:如果是在 Ubuntu-Server 版下安装 OpenCV,在安装 libhighgui-dev 的时候,需要安装很多和桌面相关的依赖包。

(0) Comments    Read More   
Posted on 06-11-2011
Filed Under (技术) by waterlin

想弄一个 Java 内嵌网页服务器 ( Embedded Web Server ),这样,在我的 Java 应用程序里,可以直接提供网页服务,而不用再给用户配置一个网页服务器。对于轻量级的本地网页服务,这样就足够了!

在 Java 应用里内嵌一个网页服务器,Jetty 是一个很好的选择。以下是我在摸索过程中,总结的基本步骤:

1. Jetty 环境的配置

首先从官方网站下载开发包,再解压到你喜欢的目录,Java 的东西就是方便呀!

注意,Jetty 还分好几种包,Jetty@eclipse、Jetty@codehaus 是比较常见的,内容应该差不多,应该只是镜像罢了。

2. 在 Eclipse 里建立 Jetty 内嵌网页服务器 Hello World 程序

Java 开发中使用第三方库的时候,就需要把该库添加到工程里。Jetty 的库文件,全部在解压目录的 lib 目录下,比如说,在我这里就是

D:\eclipse\jetty-hightide-8.0.4.v20111024\lib

目录。在 Eclipse 里新建一个 Java 工程,同时,在工程上点右键,弹出的菜单里,选择”Properties”,打开工程属性对话框,进行如下操作:

在 “Java Build Path” ==> “Libraries” 选项卡里,选择 “Add External JARs” 按钮,然后切换到 Jetty 目录里的 lib 目录,把所有的 jar 包都添加到工程里。

现在,我们可以用最简单的例子来启动一个 Jetty 内嵌网页服务器,但是这个代码,只可以获得一个 404 错误。不过没有关系,这起码可以证明 Jetty Server is Ready!

相比于上面这个 404 错误的例子,相信你会更喜欢下面这个 HelloWorld 例子

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
 
import java.io.IOException;
 
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.handler.AbstractHandler;
 
public class HelloWorld extends AbstractHandler
{
    public void handle(String target,
                       Request baseRequest,
                       HttpServletRequest request,
                       HttpServletResponse response) 
        throws IOException, ServletException
    {
        response.setContentType("text/html;charset=utf-8");
        response.setStatus(HttpServletResponse.SC_OK);
        baseRequest.setHandled(true);
        response.getWriter().println("<h1>Hello World</h1>");
    }
 
    public static void main(String[] args) throws Exception
    {
        Server server = new Server(8080);
        server.setHandler(new HelloWorld());
 
        server.start();
        server.join();
    }
}

3. 其它添加 Jetty 库文件的方法

如果需要在 Java 工程里进行 Embeded Server 开发,也可以把 Jetty 的库目录包含到 CLASSPATH 环境变量里。事实上,只要能找到下面几个文件就可以了:

servlet-api-3.0.jar
jetty-util-8.0.4.v20111024.jar
jetty-8.x.jar

手册上是这样写的,不过最后一个 jetty-8.x.jar 文件,我没有找到。

(0) Comments    Read More