PPAPI开发之路(三)通过本地服务发布例子:media_stream_video的PPAPI
前言:
在进行下文之前,先介绍下发布PPAPI的几种格式 :
Chrome PPAPI插件只能使用PPAPI接口的NativeClient(NaCl)方式编写,
Native Client分别有三种embed类型:
1、“application/x-ppapi”:平台相关,唯一能直接使用win32 api的platfrom(有功能上的限制)。 dll格式,不允许通过Chrome web store分发。
2、“application/x-nacl”:只能通过PPAPI,平台无关,cpu相关。nexe格式,只能通过Chromeweb store分发。
3、“application/x-pnacl”:只能通过PPAPI,平台无关,cpu无关。pexe格式,可以不通过Chrome web store分发据说Flash就是采用第一种类型开发的。
编译:
由于本文是本地服务发布,所需要的格式是pexe格式,所以编译media_stream_video,得到所需要的文件:nmf、pexe等。
Makefile文件代码:
# Copyright (c) 2013 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. # GNU Makefile based on shared rules provided by the Native Client SDK. # See README.Makefiles for more details. VALID_TOOLCHAINS := pnacl glibc clang-newlib win NACL_SDK_ROOT ?= $(abspath $(CURDIR)/../../..) TARGET = media_stream_video include $(NACL_SDK_ROOT)/tools/common.mk LIBS = ppapi_gles2 ppapi_cpp ppapi pthread CFLAGS = -Wall SOURCES = media_stream_video.cc # Build rules generated by macros from common.mk: $(foreach src,$(SOURCES),$(eval $(call COMPILE_RULE,$(src),$(CFLAGS)))) # The PNaCl workflow uses both an unstripped and finalized/stripped binary. # On NaCl, only produce a stripped binary for Release configs (not Debug). ifneq (,$(or $(findstring pnacl,$(TOOLCHAIN)),$(findstring Release,$(CONFIG)))) $(eval $(call LINK_RULE,$(TARGET)_unstripped,$(SOURCES),$(LIBS),$(DEPS))) $(eval $(call STRIP_RULE,$(TARGET),$(TARGET)_unstripped)) else $(eval $(call LINK_RULE,$(TARGET),$(SOURCES),$(LIBS),$(DEPS))) endif $(eval $(call NMF_RULE,$(TARGET),))
启动本地服务器:
1、进入到......\nacl_sdk\pepper_49\tools目录,其他文件中启动,比如examples目录中用httpd.cmd,又如getting_started目录中用make serve
命令,其实都是启动的tools目录下的httpd.py文件;
2、运行httpd.py文件;
如上图则启动成功。
当然这只是启动服务器而已,当我们实际用的时候是在我们要用的目录启动,比如我们的测试目录是:
E:\SDK\nacl_sdk\pepper_49\media_stream_video;那么我们在该目录下新建一个httpd.cmd文件,代码:
启动成功之后在,chrome浏览器输入地址http://localhost:5103/;@echo off setlocal PATH=%CYGWIN%;%PATH% REM Use the path to this file (httpd.cmd) to get the REM path to httpd.py, so that we can run httpd.cmd from REM any directory. Pass up to 9 arguments to httpd.py. python %~dp0\..\tools\httpd.py %1 %2 %3 %4 %5 %6 %7 %8 %9
前提在E:\SDK\nacl_sdk\pepper_49\media_stream_video目录下存在几个文件:background.js、common.js、example.js、icon128.png、
index.html、manifest.json,这几个文件在.......examples\api\media_stream_video目录下。效果跟上文
注意:
你可能会出现控件没加载出来,如果是这样请通过命令chrome://nacl检查pnacl是否安装成功,如果是这样:
就需要安装pnacl,输入命令chrome://components/,最开始的版本是0.0.0.0,然后点击“检查是否有更新”,更新之后如图: