星期五, 4月 18, 2014

Nginx RTMP 功能研究

Nginx RTMP 功能研究
http://blog.csdn.net/cccallen/article/details/8440191

Nginx-RTMP功能调研

1. RTMP协议介绍

RTMP(Real Time Messaging Protocol)实时消息传送协议是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的私有协议。
它有三种变种:
1)工作在TCP之上的明文协议,使用端口1935
2)RTMPT封装HTTP请求之中,可穿越防火墙
3)RTMPS类似RTMPT,但使用的是HTTPS连接;

RTMP协议就像一个用来装数据包的容器,这些数据可以是AMF格式的数据,也可以是FLV中的视/音频数据。一个单一的连接可以通过不同的通道传输多路网络流。这些通道中的包都是按照固定大小的包传输的。


   


                                           1   RTMP交互图

更多协议的细节可以参见《rtmp specification 1.0

2. RTMP server

2.1当前的流媒体server


现在主要有两种rtmp server,商业的和开源的。商业的比开源的支持的功能多,个人根据需要选择吧

  商业的有FMS Wowza
  开源RTMP server
  1.  red5 java  有名
  2.  crtmpserver c++ 支持多种rtmp协议,移动设备以及IPTV相关网络协议 http://www.rtmpd.com/ Erlyvideo erlong 有开源和商业版本 https//github.com/erlyvideo/erlyvideo h
 3.  aXeVideo haXe 一个实验性的,轻量级的服务器 http://code.google.com/p/haxevideo/ 
 4. FluorineFx .Net To be defined http://www/fluorinefx.com 
 5. nginx-rtmp c nginx模块 支持rtmp和HLS https://github.com/arut/nginx-rtmp-module

2.2 Wowza功能


FMS是Adobe公司的产品,license非常昂贵。下面就wowza这个商业软件讲下流媒体Server,不仅仅是RTMP Server,在达到生产环境所需要的功能。wowza最突出的特定是多终端适应性,这个在如今多媒体融合的网络环境下有很强的实用意义。究其原理并无深入研究。国内尚为视讯是其代理公司。
Wowza Media Server是一款高性能、多线程的流媒体服务器软件。专为多种终端设备提供音视频内容播放服务,支持iOSwindowsAndroidBlackMerry等系统的终端设备,以HTTPRTSP/ RTPRTMP传输协议的流播放,还支持利用机顶盒进行播放的IPTV


通过对Wowza Media Server的深度定制开发,尚为网络视听管理系统实现了对网络音视频内容的采集、编码、编辑、转码、审核、播出与监控等完整的生命周期管理,突出了以下能力:
1) 自动化内容收录
  对网络视频的录制,采用服务器端录制模式,满足从28Kbps10Mbps码流范围的H.264编码流的自动化定时收录。
2) 快速在线编辑
云计算架构设计,服务器端处理。所有编辑任务都处在云端,对编辑机无要求,任务处理快捷简单。
  对视频的处理包括切条、合并、去除广告、添加logo等操作。
  支持同一素材多格式文件的一次性编辑处理,提高工作效率。
3) 云式转码
  采用云转码技术开发的音视频文件转码、实时流转码,实现了不同格式、码率、分辨率、帧数等参数的自由转换,满足不同终端的播放需求。
4) 多终端发布支持
  结合Wowza Media Server支持多协议多终端的特性,尚为网络视听系统一个平台即可支持多终端设备的视频访问,无论用任何设备都可访问所需的视频内容。
  在对多终端内容统一管理的基础之上,还可实现了多终端视频的断点续播功能。用户的播放在一个终端上播放暂停后,用户的信息、节目信息以及断点信息立刻传送给其它终端,实现了不同终端间的断点续播。
5) 稳定的安全保障
  全LINUX架构,保障系统的安全性。
  自动支持负载均衡部署,可满足大并发用户的数据响应处理。
扩展性好,可随需增减流媒体服务器来变更系统承载的并发用户数。
除此之外,个人认为完善的DRM版权管理对于视频直播分发是非常重要的功能,服务器状态实时监控是对运营的高效稳定也有非常最要的功能。

3. Nginx-basedRTMP server

3.1  Nginx rtmp 功能点

1.   支持音视频直播
2.   支持flv/mp4视频格式,输入可以是文件或者HTTP流
3.   支持两种流的分发模式 pushand pull
4.   可以将直播流录制成flv文件
5.   H264/AAC编码
6.   支持在线转码 Onlinetranscoding with FFmpeg
7.   支持HLS (HTTP LiveStreaming)需要 libavformat (>= 8. 53.31.100) from ffmpeg (ffmpeg.org)
8.   HTTPcallbacks (publish/play/record/update etc)
9.   支持外部程序(exec)
10.  HTTPcontrol module for recording audio/video and dropping clients
11.  先进内存控制技术,可以在使用少量内存的情况下完成流畅的直播功能。
12 . 可以和以下协同工作。FMS server(Wirecast, FMS, Wowza,)Player(JWPlayer, FlowPlayer, StrobeMediaPlayback,)外部程序(ffmpeg,avconv,rtmpdump,flvstreamer )
13. Statistics in XML/XSL in machine- & human- readable form
14.  支持跨平台 Linux/FreeBSD/MacOS

项目地址

nginx-rtmp-module Directives

总的来说Nginx-RTMP是个比较轻量的项目,可以满足直播的采集,编码和分发工作,该项目丰富的完善了nginx对视频的支持,特别的nginx-rtmp实现了对HLS的支持。

3.2 编译nginx rtmp模块

编译安装,和其他nginx模块一样
./configure--add-module=/path/to/nginx-rtmp-module
对于HLS的支持,需要额外的一个模块 .
./configure--add-module=/path/to/nginx-rtmp-module--add-module=/path/to/nginx-rtmp-module/hls


3.3 配置以及功能介绍

RTMP 直播的一般格式是rtmp://youdomain.com/app/name,其中app的名字对于application的名字,
1.      下列是直播的配置,app是live。
application live {
 
    live on;
}


2.    配置支持访问控制,你可以指定允许发布的IP以及允许收看的IP:
application live {
 
    live on;
 
    allow publish 127.0.0.1;
    deny publish all;
    allow play all;
rtmp_auto_push on;
 
rtmp {
 
    server {
 
        listen 1935;
 
        chunk_size 4000;
 
        # TV mode: one publisher, many subscribers
        application mytv {
            live on;
        }
    }
}

4. 流转码的功能,下面的例子使用了exec这种使用外部程序ffmpeg的功能.  Ffmpeg是一个强大的媒体处理工具,几乎可以做任意有关video/audio的处理。更多ffmpeg与RTMP流媒体连接用法可以参考以下链接。

# Transcoding (ffmpeg needed)
application big {
            live on;
            # Multiple exec lines can be specified.
            exec /usr/bin/ffmpeg -re -i rtmp://localhost:1935/$app/$name -vcodec flv -acodec copy -s 32x32 -f flv rtmp://localhost:1935/small/${name};
}
application small {
            live on;
            # Video with reduced resolution comes here from ffmpeg
}
 

5.Push和pull模式,用在多个server协助的情况下,输出流可以push,输入流可以pull。

 
        application mypush {
            live on;
 
            # Every stream published here
            # is automatically pushed to 
            # these two machines
            push rtmp1.example.com;
            push rtmp2.example.com:1934;
        }
 
        application mypull {
            live on;
 
            # Pull all streams from remote machine
            # and play locally
            pull rtmp://rtmp3.example.com pageUrl=www.example.com/index.html;
        }
 

3.4 用nginx-rtmp-module搭建直播环境

1.      需要准备视频源,这个可以使用ffmpeg模拟,或者通过FMS采集。使用ffmpeg比较方便,例如ffmpeg -re -i /root/test123.flv -f flv rtmp://192.168.100.135/myapp/test,这样一条命令就可以发布一个直播源。

2.      配置nginx-rtmp,完成相关功能配置,可以参考以上描述。

3.      搭建客户端测试环境,本文测试播放器使用的是jwplayer


https://github.com/arut/nginx-rtmp-module项目里面test目录下有相关的播放器设置和配置文件。

配置文件

[html] view plaincopy
  1. worker_processes  1;  
  2.   
  3. error_log  logs/error.log debug;  
  4. #error_log  logs/error.log  notice;  
  5. #error_log  logs/error.log  info;  
  6.   
  7. #pid        logs/nginx.pid;  
  8.   
  9.   
  10. events {  
  11.     worker_connections  1024;  
  12. }  
  13.   
  14.   
  15. rtmp {  
  16.   
  17.     server {  
  18.   
  19.         listen 1935;  
  20.   
  21.         chunk_size 128;  
  22.   
  23.         publish_time_fix off;  
  24.   
  25.         application myapp {   
  26.   
  27.             live on;  
  28.   
  29.             record keyframes;  
  30.          record_path /tmp;  
  31.   
  32.             record_max_size 128K;  
  33.             record_interval 30s;  
  34.   
  35.             record_suffix .flv;  
  36.   
  37.             on_publish http://localhost:8080/publish;  
  38.             on_play http://localhost:8080/play;  
  39.             on_record_done http://localhost:8080/record_done;  
  40.         }  
  41.   
  42.         application myapp2 {  
  43.             live on;  
  44.         }  
  45.   
  46. #        application mypull {  
  47. #            live on;  
  48. #            pull myapp mystream localhost;  
  49. #        }  
  50.   
  51. #        application mypush {  
  52. #            live on;  
  53. #            push myapp mystream localhost;  
  54. #            push myapp2 mystream localhost;  
  55. #        }  
  56.     }  
  57. }  
  58.   
  59.   
  60. http {  
  61.   
  62.     server {  
  63.   
  64.         listen      8080;  
  65.   
  66.         location /publish {  
  67.             return 201;  
  68.         }  
  69.   
  70.         location /play {  
  71.             return 202;  
  72.         }  
  73.   
  74.         location /record_done {  
  75.             return 203;  
  76.         }  
  77.   
  78.         location /stat {  
  79.             rtmp_stat all;  
  80.             rtmp_stat_stylesheet stat.xsl;  
  81.         }  
  82.   
  83.         location /stat.xsl {  
  84.             root /home/rarutyunyan/nginx-rtmp-module/;  
  85.         }  
  86.   
  87.         location /rtmp-publisher {  
  88.             root /home/rarutyunyan/nginx-rtmp-module/test;  
  89.         }  
  90. location / {  
  91.             root /home/rarutyunyan/nginx-rtmp-module/test/www;  
  92.         }  
  93.   
  94.   
  95.     }  
  96. }  
  97.   
  98.                   

测试用例:
/home/rarutyunyan/nginx-rtmp-module/test/rtmp-publisher
/home/rarutyunyan/nginx-rtmp-module/test/www

测试URL:

效果:




支持的配置指令有很多,没有一一研究。参见:

max_streams

syntax: max_streams value
context: rtmp, server
Setsmaximum number of RTMP streams. Data streams are multiplexed into a single datastream. Different channels are used for sending commands, audio, video etc.Default value is 32 which is usually ok for many cases.

exec

Syntax: exec command arg*
Context: rtmp, server, application
Specifiesexternal command with arguments to be executed on every stream published. Whenpublishing stops the process is terminated. Full path to binary should bespecified as the first argument. There are no assumptions about what thisprocess should do. However this feature is useful with ffmpeg for streamtranscoding. FFmpeg is supposed to connect to nginx-rtmp as a client and outputtranscoded stream back to nginx-rtmp as publisher. Substitutions of form$var/${var} can be used within command line:
·        $name - stream name
·        $app - application name
·        $addr - client address
·        $flashver - client flashversion
·        $swfurl - client swf url
·        $tcurl - client tc url
·        $pageurl - client page url
Thefollowing ffmpeg call transcodes incoming stream to HLS-ready stream(H264/AAC). FFmpeg should be compiled with libx264 & libfaac support forthis example to work.

3.5 Nginx rtmp对于HLS支持

HTTP Live Streaming(缩写是 HLS)是一个由苹果公司提出的基于HTTP的流媒体网络传输协议。是苹果公司QuickTime X和iPhone软件系统的一部分。它的工作原理是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。在开始一个流媒体会话时,客户端会下载一个包含元数据的extended M3U (m3u8) playlist文件,用于寻找可用的媒体流。
HLS只请求基本的HTTP报文,与实时传输协议(RTP)不同,HLS可以穿过任何允许HTTP数据通过的防火墙或者代理服务器。它也很容易使用内容分发网络来传输媒体流。
此协议详细内容请参考apple官方网站:https://developer.apple.com/resources/http-streaming/

搭建HLS server方式有以下三种:
1.      利用apple SDK,
2.      利用adobe 的fms,4.5版本支持hls,可以参考,
利用其他商业软件也可以比如wowza。
3.    一种是利用opensouce.Nginx-rtmp。
下面主要是Nginx-RTMP对HLS直播的支持。

HTTP Live Streaming (HLS)is an HTTP-based media streaming communications protocol implemented by AppleInc.
If you are interested in any of the following:
·        Streaming audio or video toiPhone, iPod touch, iPad, or Apple TV
·        Streaming live events withoutspecial server software
·        Sending video on demand withencryption and authentication
图5 HLS(HTTP Live Streaming)
使用nginx-rtmp完成hls支持,需要额外的segmenter支持,该工具可以将文件分割成 ts小文件并且产生m3u8列表。项目地址:https://github.com/johnf/m3u8-segmenter

下载编译只需要编译m3u8-segmenter.c即可,需要libc2.5以上支持。l
流化可以支持以下两种。第一种尚未找到具体方法,下面的实例是采用第二种基于文件的。
Stream Segmenter
Stream Segmenter reads live broadcast from network(normally udpprotocol) and publish HTTP Live Streaming into the internet. It reads theTransport Stream from the network and divides it into a series of small mediafiles of equal duration. Even though each segment is in a separate file, videofiles are made from a continuous stream which can be reconstructed seamlessly.
The segmenter also creates an index file containing references tothe individual media files. Each time the segmenter completes a new media file,the index file is updated. The index is used to track the availability andlocation of the media files. 
Media segments are saved as .ts files (MPEG-2 transport stream files). Indexfiles are saved as .M3U8 playlists.
File Segmenter
File Segmenter allows you to use a library of existing audio andvideo files for sending video on demand via HTTP Live Streaming. The FileSegmenter performs the same tasks as the Stream Segmenter, but it takes filesas input instead of streams.
Our File Segmenter supports MP4,TS, MOV, FLV and some otherfile formats. If you already have a media file encoded using supportedcodecs(H.264 + AAC or H.264 + MP3), you needn't to re-encode it, otherwise, youneed to re-encode the video or audio. The File Segmenter has two work mode:re-encode and no-re-encode.


1.      使用ffmpeg + segmenter:首先转化成ts文件,然后分割
ffmpeg -loglevel quiet  -i cctv1.ts -f mpegts - | segmenter -i - -d 10 -p /tmp/app/big_buck_bunny -m/tmp/app/big_buck.m3u8 -u http://inodes.org/hls/

2.       高版本的ffmpeg可以直接转化

ffmpeg -i test456.mp4 -f  segment -segment_time 10  -segment_format mpegts -segment_listlist_file.m3u8 -codec copy -bsf:v h264_mp4toannexb -map 0 output_file-%d.ts

HLS相关配置如下     
[html] view plaincopy
  1. application hls {  
  2.   
  3.                hls on;  
  4.   
  5.                hls_path /tmp/app;  
  6.   
  7.                hls_fragment 10s;  
  8.   
  9.       }  
  10.   
  11.       location /hls {  
  12.       # Serve HLS fragments  
  13.           alias /tmp/app;  
  14.   
  15.       }  


使用vlc测试。

测试成功。

星期二, 4月 15, 2014

Auto IRIS

Auto iris (DC and video)
There are two types of auto iris lenses: DC iris and video iris. Both have a motor-driven, automatically adjustable iris opening that responds to changes in light levels. Both also use an analog signal (often analog video signal) to control the iris opening. The difference between the two is where the circuitry to convert the analog signal into motor control signals is located. In a DC-iris lens, the circuit resides inside the camera; in a video iris, it is inside the lens.
In bright situations, a camera with an auto iris lens can be affected by diffraction and blurring when an iris opening becomes too small. This problem is especially prominent in megapixel and HDTV cameras since the pixels in the image sensors are smaller than standard resolution cameras. Therefore, the image quality is more dependent on getting the right iris opening (aperture). In order to optimize image quality, a camera needs to have control over the position of the iris opening. The problem with an auto iris lens is that this control cannot be made available to the camera or user.
P-Iris
P-Iris lens from KowaP-Iris is an automatic, precise iris control first developed by Axis Communications of Sweden and Kowa Company of Japan. It involves a P-Iris lens and specialized software that optimize image quality. The system is designed to address the shortcomings of an auto-iris lens. P-Iris provides improvements in contrast, clarity, resolution and depth of field.
Having good depth of field—where objects at different distances from the camera are in focus simultaneously—is important in the video monitoring of, for example, a long corridor or parking lot.
In bright situations, P-Iris limits the closing of the iris to avoid blurring (diffraction) caused when the iris opening becomes too small. This can typically happen in cameras that use DC-iris lenses in combination with megapixel sensors that have small pixels. Being able to avoid diffraction and at the same time benefit from an automatically controlled iris is highly valued in outdoor video surveillance applications.
A P-Iris lens uses a motor that allows the position of the iris opening to be precisely controlled. Together with software that is configured to optimize the performance of the lens and image sensor, P-Iris automatically provides the best iris position for optimal image quality in all lighting conditions.

In Axis network cameras with P-Iris, the user interface provides a scale of f-numbers that ranges between the widest and smallest iris opening. This feature enables the user to adjust the preferred iris position, which is the iris position used by the automatic control for most lighting conditions.

星期六, 4月 12, 2014

using wpa_cli setting wifi

妮仔的學習筆記

http://ninitsai0206.blogspot.tw/2010/11/using-wpacli-setting-wifi.html




using wpa_cli setting wifi

#!/system/bb/ash
start wpa_supplicant
sleep 1
wpa_cli -i tiwlan0 scan
wpa_cli -i tiwlan0 scan_result
wpa_cli -i tiwlan0 add_network
wpa_cli -i tiwlan0 set_network 0 key_mgmt NONE
wpa_cli -i tiwlan0 set_network 0 ssid '"QQ"'
wpa_cli -i tiwlan0 enable_network 0
;--------------------------------------------------

#!/system/bb/ash
start wpa_supplicant
sleep 1
wpa_cli -i tiwlan0 scan
wpa_cli -i tiwlan0 scan_result
wpa_cli -i tiwlan0 add_network
wpa_cli -i tiwlan0 set_network 0 key_mgmt NONE
wpa_cli -i tiwlan0 set_network 0 ssid '"'$1'"'
wpa_cli -i tiwlan0 enable_network 0
echo $1


;--------------------------------------------------
使用wpa_cli控制和管理wpa_supplicant
# wpa_cli -i wlan0 status (看看目前的狀態)
# wpa_cli -i wlan0 help (查看參數與指令)
# wpa_cli -i wlan0 terminate (關閉wpa_supplicant)
# wpa_cli -i wlan0 interface (查看有那些無線網卡介面)
# wpa_cli -i wlan0 list_networks (查看wpa_supplicant.conf檔裡的設定)
# wpa_cli -i wlan0 select_network (選擇不同的AP,id為AP代號0,1,2,3...)
# wpa_cli -i wlan0 enable_network
# wpa_cli -i wlan0 disable_network
# wpa_cli -i wlan0 remove_network (刪除AP資訊)
# wpa_cli -i wlan0 reconfigure (重新讀取wpa_supplicant.conf設定內容)
# wpa_cli -i wlan0 save_config (儲存寫入到wpa_supplicant.conf中,否責變更無效)
# wpa_cli -i wlan0 disconnect (斷線)
# wpa_cli -i wlan0 reconnect (重新連線)
# wpa_cli -i wlan0 scan (掃描附近的AP)
# wpa_cli -i wlan0 scan_results (印出附近AP的相關資訊)

;---------------------------------------
http://linux.die.net/man/8/wpa_cli

wpa_cli [ -p path to ctrl sockets ] [ -i ifname ] [ -hvB ] [ -a action file ] [ -P pid file ] [ command ... ]

Android ART运行时无缝替换Dalvik虚拟机的过程分析

兩篇文章, 給大家參考一下
Android ART运行时无缝替换Dalvik虚拟机的过程分析

Dalvik虚拟机简要介绍和学习计划

Small Camera



星期二, 3月 11, 2014

Reference from :愛做夢的蘆薈

在embedded的設備上,driver需要讀取某些設定檔並根據設定值設定硬體,除了ioctl, file read/write之外,最簡單的方式莫過於直接在kernel space進行設定檔的讀寫,不過通常”寫入”這個功能很少用到,所以我略過這個東西不提
在kernel讀取檔案的方式非常簡單,小弟粗分為三個步驟,這三個步驟後方所列的就是kernel的API
1.Open file: filp_open
2.Read file: f_op->read
3.Close file: filp_close
程式的範例請直接參考下面所列,
程式裡面比較值得一提的是get_fs和set_fs,kernel會根據set_fs的設定值決定要不要檢查讀/寫memory的界限,如果set_fs傳入的參數是kernel_ds,那kernel會bypass memory 界限的檢查,經過這樣的設定,才能正確取得檔案資料
#include <linux/kernel.h> 
#include <linux/module.h> 
#include <linux/init.h> 
#include <linux/slab.h> 
#include <linux/unistd.h> 
#include <linux/sched.h> 
#include <linux/fs.h> 
#include <linux/file.h> 
#include <linux/mm.h> 
#include <asm/uaccess.h> 
 
mm_segment_t oldfs;
 
struct file *openFile(char *path,int flag,int mode) { struct file *fp;
 
fp=filp_open(pathflag0)if (fp) return fpelse return NULL}
 
int readFile(struct file *fp,char *buf,int readlen) { if (fp->f_op && fp->f_op->read) return fp->f_op->read(fp,buf,readlen, &fp->f_pos)else return -1}
 
int closeFile(struct file *fp) { filp_close(fp,NULL)return 0}
 
void initKernelEnv(void) { oldfs = get_fs()set_fs(KERNEL_DS)}
 
static int __init readfile_init(void) { char buf[1024]struct file *fpint ret;
 
initKernelEnv()fp=openFile("/etc/myconfig",O_RDONLY,0)if (fp!=NULL) { memset(buf,0,1024)if ((ret=readFile(fp,buf,1024))>0) printk("buf:%s\n",buf)else printk("read file error %d\n",ret)closeFile(fp)} set_fs(oldfs)return 0}
 
static void __exit readfile_exit(void) {
 
printk("read file module remove successfully\n")} module_init(readfile_init)module_exit(readfile_exit);
 
MODULE_DESCRIPTION("read a file in kernel module")MODULE_AUTHOR("Joey Cheng")MODULE_LICENSE("GPL")MODULE_ALIAS("read file module");

星期三, 2月 19, 2014

專家觀點:成功發表新產品的十個訣竅

專家觀點:成功發表新產品的十個訣竅

http://www.eettaiwan.com/ART_8800695195_480102_NT_2d7b317c.HTM?click_from=8800110138,9950211892,2014-02-19,EETOL,ARTICLE_ALERT

筆者曾經與超過100家以上的零組件供應商合作,其中不乏在半導體元件與相關電子零件方面推出創新產品的業者;我也曾看過許多因為推出了成功的產品,而創造機遇與挑戰的獨特案例。綜合那些成功(以及少數失敗)的故事,以下是筆者歸納出的、當一家公司準備推出新產品時需要考慮的十個關鍵問題。
1. 到底誰是你的客戶群,他們的採購決策程序又是如何?
很多公司的產品設計可能是在美國,產品生產則是與亞洲的製造商合作,但通常在其他區域如俄羅斯或以色列也有專家團隊。你的關鍵客戶可能只有10或20家公司,因此你需要去了解他們在決策過程方面的細節。
2. 你的新產品價值主張為何?
想想你的新產品是否代表擁有全新功能,或是為現有的產品添加功能,還是一種入門款低價產品?也要思考該產品的定位,並與目前或預期中的競爭對手相比較。
3. 新產品的實際或預期競爭對手何在?
這個問題的答案可能對你、你的客戶以及價值供應鏈上的潛在廠商都很明顯,但也可能更微妙;你的客戶可能正在看同樣擁有你產品功能的其他產品,或是其他的替代品。
4. 你的產品市場潛力如何?
新聞媒體與分析師通常會問新產品目前或未來的市場營收潛力,將你的估計與一個或更多外部的觀察者分享,通常是會有價值的。
5. 你的產品價值鏈何在?你的新產品可能改變該價值連嗎?
如果你的新產品破壞了現有的價值鏈,例如消除了該價值鏈上的某一個階段(phase),你會遭遇更大的挑戰;你可能馬上就會與現有的客戶競爭,並且需要把產品賣給一組全新的客戶。
6. 你打算何時發表你的產品?
雖 然你的大部分重要客戶可能會去參加大型展會,但你或許可以在較小規模展會、專門技術研討會,或者是一對一的拜訪時取得他們「高品質的時間」。不要擠在某個 大型展會的第一天眾多廠商發表產品的時候,考量選擇一個與眾不同的時間發表你的產品;你需要抗拒來自公司董事會、客戶或其他人的誘惑與壓力,不要為了與某 個展會或研討會的時間一致,而過早發表產品。
7. 產業分析師扮演什麼角色?
產業分析師可能會成為你的產品在市場定位方面的重要發聲板,並能提供一個來自外部的、客觀的視角;很多分析師會討論他們對你的市場機會以及新產品的看法。
8. 媒體扮演什麼角色?
媒體扮演的主要角色就是報導新聞與趨勢,因此了解他們的興趣、可利用性,以及他們偏好取得資訊的方式很重要;你的行銷團隊應該要專注於與關鍵媒體建立關係,而不是只在產品發表時簡單地與媒體接觸。
9. 你的產品發表進行流程如何?
雖然每一次的產品發表狀況都不同,還是有幾個關鍵行動可確保成功:
‧在產品發表前5~10天,在保密協定(NDA)之下邀集最具影響力的分析師與媒體聚會;
‧針對不同關鍵市場排定最佳的產品發表時間,例如亞洲市場發表時間可選在某個亞洲區域產會舉行時;
‧在產品發表日公佈新聞稿,並將新聞稿以電子郵件形式發送給目標產業分析師與媒體;
‧如果合適,透過社交媒體來分享產品發表訊息,也許可利用一些小玩笑來讓人們期待產品的發表;
‧考量採用電子報來通知關鍵客戶以及潛在客戶有關產品發表的訊息;
‧針對所得到的回應與報導進行分析,評估訊息滲透的品質;舉例來說,那些回應是否符合預期?相關報導是否真實反映了記者會與透過網路所交流的訊息?
10. 如何知道產品發表是否成功?
在產品發表之前建立評量指標是很重要的,能讓決策者判定投資報酬率(ROI);對大多數人來說,基本評量指標包括短期銷售增加、長期性銷售提升,以及建立品牌所帶來的貢獻。
在一家公司的演進歷程中,產品發表通常是很關鍵的時期;提前進行相關研究、建立關鍵訊息、組織關鍵行動,並積極執行、根據評量指標來評估效果,將有助於確保成功。
編譯:Judith Cheng
(參考原文: 10 Tips for Your Product Launch,by Tim Johnson;本文作者為行銷顧問公司Stearns Johnson Communications總裁)

星期三, 1月 22, 2014

UCI

UCI系统
寫個 LuCI 介面設定 Serial Port 的 baud rate
HowTo: Using the JSON-RPC API
UCI (Unified Configuration Interface) – Technical Reference
openwrt - 入門( opkg, uci, luci )


 Using UCI on Ubuntu
http://www.wakoond.hu/2013/06/using-uci-on-ubuntu.html

Qemu



  1. Create empty rootfs
    1. qemu-img create -f qcow hda.img 10G
  2. Download kernel + initrd
    1. http://archive.debian.org/debian/dists/etch/main/installer-mips/current/images/qemu/netboot/
  3. Run
    1. qemu-system-mips -M mips -kernel vmlinux-2.6.18-6-qemu -initrd initrd.gz -hda hda.img -append "root=/dev/ram console=ttyS0" -nographic

Reference
  1. http://www.aurel32.net/info/debian_mips_qemu.php