【IoT】产品模型:基于 ARM 的音视频采集与传输系统

本文涉及的产品
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
对象存储 OSS,20GB 3个月
简介: 音视频采集系统

1 前言. 1

1.1 研究背景. 1

1.2 国内外发展概况. 1

1.3 论文的主要研究内容. 2

2 系统总体方案设计. 3

2.1 系统总体框图. 3

2.2 图像采集与编码模块方案介绍与论证. 3

2.2.1 DSP+视频采集芯片. 3

2.2.2 DSP+ARM+视频采集芯片. 4

2.2.3 ARM+视频压缩芯片+视频采集芯片. 4

2.2.4 ARM+T264编码库或FFmpeg x264编码库. 4

2.2.5 ARM+MJPG-streamer视频服务器. 5

2.3 音频采集与编解码模块. 6

2.3.1 音频采集与编码方案设计. 6

2.3.2 音频编程接口选择. 6

2.4 电力线载波通信模块. 6

2.4.1 电力线载波通信方案设计. 6

2.4.2 调制解调芯片选择. 7

2.5 嵌入式平台介绍及环境搭建. 7

2.5.1 硬件平台介绍. 7

2.5.2 平台软件环境搭建. 9

2.6 本章小结. 11

3 视频采集与编解码设计. 12

3.1 视频模块系统设计. 12

3.1.1 视频概述. 12

3.1.2 V4L2标准编程框架. 12

3.1.3 视频模块系统框图. 12

3.2 MJPG-streamer视频流服务器. 13

3.3 MJPG-streamer的移植. 13

3.3.1 JPEG库移植. 13

3.3.2 MJPG-streamer移植. 14

3.4 MJPG-streamer主程序处理流程. 15

3.5 视频服务器登陆设计. 16

3.5.1 Boa服务器概述. 16

3.5.2 Boa服务器功能. 16

3.5.3 Boa服务器移植. 16

3.5.4 CGI简介. 17

3.5.5 HTML简介. 18

3.5.6 JavaScript简介. 19

3.6 本章小结. 20

4 音频采集与编解码设计. 21

4.1 音频传输协议介绍. 21

4.2 音频基础介绍. 21

4.3 音频传输系统设计. 25

4.3.1 音频模块系统框图. 25

4.3.1 音频缓存区设计. 25

4.4 本章小结. 26

5 电力线载波通信设计. 27

5.1 电力线通信技术概述. 27

5.2 电力载波通信系统设计. 27

5.3 通信模块设计. 31

5.3.1 INT5500CS工作模式选择. 31

5.3.2 以太网模块设计. 31

5.3.3 用户接口协议. 32

5.4 本章小结. 34

6 样机系统功能测试. 35

6.1 系统测试准备. 35

6.1.1 音频测试. 35

6.1.2 视频测试. 35

6.1.2 电力线载波通信测试. 35

6.2 系统测试. 35

6.2.1 音频功能测试. 35

6.2.2 视频功能测试. 36

6.2.3 电力线载波通信功能测试. 38

6.2.4 联机测试. 38

6.3 总结与展望. 40

参考文献. 41

致 谢. 42

附 录. 43

1 前言
1.1 研究背景
随着电力线通信(Power Line Communication)网络技术的发展以及音视频编解码技术的不断完善,使得音视频采集与传输系统深入到人们生活的方方面面。在公共安全领域,音视频监控系统是安全技术防范产业发展的重要基础,为相关人员处理突发事件提供直接证据;在家庭生活领域,音视频采集与传输系统可以方便户主实时监测家庭环境,同时也使得父母时刻关注婴儿成长变成可能;在科技发展与研究领域,使得人们可以在不进入恶劣环境的情况下采集环境音视频数据参数并且为科技研究提供资料。

近几年PLC网络技术快速发展,传输带宽以及抗干扰的能力不断加强。由最初的FSK调制技术发展到如今流行的扩频技术与OFDM技术。传输带宽由几十Kbps到几百Mbps不等,部分小区已经开始PLC网络的试点,并且无需重新布线,随着关键技术的解决,电力线上网在逐步走进人们的生活。

综上所述,本课题针对需求,提出了具体的解决方案,将音频、视频和电力载波通信结合在一起,具有良好的实用价值和研究价值。

1.2 国内外发展概况
21世纪以来,智能化建筑迅速发展,随着高科技电子产品的不断更新与完善,极大促进了技防产品市场的发展。中国安防产业与家庭环境监测技术迅速发展,随着科技进步,安防行业领域仍将不断扩大,目前已经发展到了视频监控、出入口控制、入侵报警、防爆安检等十几个大类。

互联网技术已经渗透到人们生活的方方面面,同时随着各种新技术的大量涌现,作为一种崭新的技术,电力载波通信开始逐步走进人们的视野,该技术通过将载有数据信息的高频调制信号加载于电流,无需重新布线,利用已有的低压配电网络即可完成数据传输和信息交换。调制方式由最初的调频技术发展到如今流行的OFDM技术,传输带宽也随之达到几百Mbps,使得宽带电力线上网成为可能。电力载波通信技术已经成为国内外公司和科研单位研究的热点,而国外对电力载波通信的研究起步较早,并且制定了相应的协议规范,一些国家和地区已经开始尝试将电力线通信应用于室内组网和高速数据接入。将覆盖广泛的电力网用于网络通信,不仅无需建设新的通信网络、节约资源和成本,而且能充分发挥电力资源优势,实现电话、数据、视频和电力的有效结合,具有广阔的应用市场和前景。

1.3 论文的主要研究内容
嵌入式音视频采集与传输系统需要实现的主要内容是研究音视频编解码以及电力载波通信。本系统通过通用USB摄像头获取环境视频数据,搭建好的嵌入式服务器将采集到的数据进行编码压缩生成数据流,并通过网络传输至PC机,在终端显示图像数据。拾音器将采集到的音频数据组成RTP包发送至网络,在终端播放音频数据。为了深化本设计的实用性,采集到的数据首先通过OFDM调制进入到PLC网络,经过解调后发送至远端PC机。本次设计需要了解ARM体系基本架构,熟悉嵌入式Linux环境搭建过程;学习音视频编解码基本知识;学习流媒体相关知识;了解宽带电力线传输基本理论,熟悉国内外电力线网络发展概况;熟悉嵌入式网络服务器搭建的基本方法,了解网页制作等基本知识。

2 系统总体方案设计
2.1 系统总体框图
本系统涉及到音视频采集、音视频编码、电力线载波通信、音视频解码和终端显示几大部分,如图2-1所示:

图2-1 音视频采集与传输系统总体框图

2.2 图像采集与编码模块方案介绍与论证
2.2.1 DSP+视频采集芯片
该方案属于硬件压缩,使用视频采集芯片完成图像A/D的转换,通过DSP芯片完成数字图像数据的存储和编码压缩,典型方案如图2-2所示:

图2-2 视频采集与编码方案一

2.2.2 DSP+ARM+视频采集芯片
该方案属于硬件压缩,视频采集芯片完成模拟图像A/D的转换,DSP实现数字图像压缩编码,ARM实现系统控制和网络传输。该方案增加了嵌入式处理器,可以运行操作系统,增加了系统灵活性,典型方案如图2-3所示:

图2-3 视频采集与编码方案二

2.2.3 ARM+视频压缩芯片+视频采集芯片
该方案属于硬件压缩,经过转化的数字视频流由专用编码芯片编码,ARM控制图像数据存储和传输,典型方案如图2-4所示:

图2-4 视频采集与编码方案三

2.2.4 ARM+T264编码库或FFmpeg x264编码库
该方案属于软件压缩,ARM微处理器通过V4L接口从摄像头获取视频数据,调用编码库对数据编码,通过以太网传输,但T264编码库处理视频格式有限,灵活性较差。相比于T264编码库,FFmpeg x264功能强大,支持更加广泛。典型方案如图2-5所示:

图2-5 视频采集与编码方案四

2.2.5 ARM+MJPG-streamer视频服务器
该方案属于软件压缩,开源工程MJPG-streamer是以TCP/IP协议为基础,结合v4l标准接口,实现的视频流服务器。它首先通过v4l标准接口采集图像数据,并将采集到的数据编码压缩后以流的形式传输至终端浏览器实时播放显示,该服务器也可以利用某些摄像头的硬件压缩功能来降低服务器CPU的软件开销,典型方案如图2-6所示:

图2-6 视频采集与编码方案五

相比于软件压缩,硬件压缩效率较高,尤其是方案三,灵活性以及编码效率都要比其他方案更具有实用价值。但本系统涉及研究内容较多,成本以及开发周期有限,因此采用方案五,经实验测试完全可以满足本次设计要求。

2.3 音频采集与编解码模块
2.3.1 音频采集与编码方案设计
该部分设计需要实现音频数据的实时有效传输,发送端首先将拾音器采集到音频数据进行ADPCM编码,编码后的数字语音信号按RTP/UDP/IP等相关协议进行网络组包并将数据发送到局域网,接收方将接收到的语音信号实时解码播放。方案设计如图2-7所示:

图2-7 音频采集与编码方案

2.3.2 音频编程接口选择
Linux系统为用户操作音频设备提供了统一的编程接口,在Linux系统中,先后出现了两种音频框架:OSS(Open Sound System)和ALSA(Advanced Linux Sound Architecture)。

OSS可移植性好,但具有声卡独占问题,闭源;ALSA具有声卡共享的特性,兼容OSS接口,开源。2.6版本的Linux内核用ALSA代替了OSS。但为了兼容以前的程序,ALSA提供OSS模拟。

综上所述,ALSA接口优点明显同时由于本次设计系统版本不支持OSS接口,因此采用ALSA接口。

2.4 电力线载波通信模块
2.4.1 电力线载波通信方案设计
编码后的音视频数据首先经过调制进入电力线通信网络,接收端解调后传输至终端。方案设计如图2-8所示:

图2-8 电力线载波通信方案

2.4.2 调制解调芯片选择
由于音视频数据量较大,使用FSK调制和扩频技术都不能满足要求,下面仅对OFDM调制芯片做对比选择,如表2-1所示:

表2-1 芯片对比

公司名称

芯片

芯片速率

执行标准

Intellon

(目前已被高通收购)

INT5200

14Mbps

HomePlug1.0

INT5500

85Mbps

HomePlug1.0+

INT6000

200Mbps

HomePlug1.0 AV

Maxim

MAX2986

14Mbps

HomePlug1.0

Qualcomm Atheros

QCA6410

200Mbps

HomePlug1.0 AV

图像采集以320*240个像素点,每个像素点16位,每秒20帧为例,传输带宽大概需要23Mbit/s,设定本次设计压缩比为10:1,则视频传输所需带宽为2.3Mbit/s;语音采集以44KHz采样频率,每个采样点16位为例,传输带宽需要704Kbit/s。

从通信速率角度来看以上芯片都可以满足本次设计要求,但考虑到电力线网络的复杂性且考虑到PLC通信芯片的传输距离与通信速率成反比关系,折中选择INT5500芯片。

2.5 嵌入式平台介绍及环境搭建
2.5.1 硬件平台介绍
本次样机设计核心处理器选用三星公司的32位RISC微处理器S5PV210,该处理器基于ARMv7架构,CPU采用Cortex-A8内核,芯片运行主频高达1GHz。该芯片的组成如图2-9所示:

图2-9 S5PV210结构框图

网卡采用以太网芯片LAN9220设计,该芯片具有支持10/100Mbps、小型化、电压从1.8V到3.3V可变和CPU开销小等特点。该芯片支持内存缓冲同时具有与SRAM类似的高性能从接口,并且集成以太网数据链路层和物理层接口。LAN9220芯片连接电路如图2-10所示:

图2-10 LAN9220连接电路图

声卡采用支持AC97接口的WM9713芯片,该芯片内部集成AD、DA控制器和触摸屏处理的部分功能,芯片通过内部有64个寄存器进行配置。WM9713芯片连接电路如图2-11所示:

图2-11 WM9713连接电路图

2.5.2 平台软件环境搭建
安装交叉编译器:

  1. 建立目录

mkdir –p/usr/local/arm

  1. 解压源码

tar jxvf arm-linux-gcc-4.3.2.bz2–C /usr/local/arm

  1. 修改环境变量

sudo vim ~/.bashrc (打开脚本并在最后加入下面这行)

exportPATH=/usr/local/arm/4.3.2/bin:$PATH

source ~/.bashrc (重新启动脚本使环境变量设置立即生效)

配置编译u-boot:

  1. 解压源码

tar zxvf unsp210_u-boot.tar.gz

  1. 进入解压后的文件目录中

cd unsp210_u-boot

  1. 编译前清除旧的配置文件

make distclean

  1. 生成新的配置文件

make unsp210_config

  1. 编译生成u-boot 可执行文件

make

在当前目录下会生成一个u-boot.bin 的文件

  1. 将tools 目录下生成的mkimage 文件拷贝到/bin 目录中,后面用于制作u-boot 所需格式的内核

cp u-boot/tools/mkimage /bin

配置编译内核:

  1. 解压源码

tar zxvf unsp210_linux_2.6.35.tar.gz

  1. 进入解压后的文件目录

cd unsp210_linux_2.6.35

  1. 清除旧的内核配置文件

make distclean

  1. 重命名内核配置文件

cp config_sunplusedu_20130604 .config

  1. 配置内核

make menuconfig

  1. 生成内核镜像文件

make 或make zImage

在/arch/arm/boot 下会生成zImage 文件

yaffs 根文件系统的制作:

yaffs 格式的根文件系统是可读可写的文件系统,没有经过压缩

解压源码

tar zxvf rootfs_gtk.tar.gz

给mkyaffs2image 添加可执行权限

chmod +x mkyaffs2image

拷贝mkyaffs2image 文件到/bin 下

sudo cp mkyaffs2image /bin

生成根文件系统镜像

mkyaffs2image rootfs rootfs.yaffs

镜像烧写方法

  1. 首先确保网线连接正确,电源线,串口线接触良好;
  2. 上电使用开发板平台进入U-boot 命令行模式;
  3. 输入命令:print 会有下面的提示信息:
  4. 根据PC机IP对开发平台进行IP设置"serverip(windows'sIP)" and "ipaddr(开发平台的IP)";
  5. 分别使用的命令是:setenv serverip172.20.223.XX(windows IP) 或10.221.X.XX(windows IP)

setenv ipaddr 172.20.223.XX(开发板的IP)或10.221.X.XX(开发板的IP)

  1. 保存刚才对硬件平台的设置:使用命令进行设置:saveenv;
  2. 使用ping 命令查看PC机和A8平台的网络是否连通:(可在开发板上ping PC 机);

ping ..*.(windows 的IP 地址)

  1. 打开PC机端tftp服务器tftpd32.exe 文件,并将编译好的u-boot、内核镜像和文件系统拷贝到tftp服务器目录;
  2. 然后输入命令:update 会有下面的提示信息:

10.如果烧写U-boot,可以输入命令:update boot u-boot.bin

如果烧写kernel,可以输入命令:update kernel zImage

如果烧写rootfs,可以输入命令:update yaffs rootfs.yaffs

如果烧写三个镜像,可以输入命令:updateimage

2.6 本章小结
本章主要对系统实现方案进行了论证和选择,在视频编码部分主要对硬件和软件压缩的优缺点进行了比较和论证;在音频编码部分主要对相关协议接口进行了选择和论证;在电力线载波通信部分对相关芯片进行了比较和选择。最后详细介绍了嵌入式软件环境搭建的相关内容,本章确定了课题各模块的总体设计方案。

3 视频采集与编解码设计
3.1 视频模块系统设计
3.1.1 视频概述
视频是连续渐变的静态图像沿时间轴依次更换显示而形成的画面。根据视觉暂留原理,图像帧率变化超过24次/s时,人眼将无法辨别单幅的静态画面,此时就会产生平滑连续的视觉效果。其中帧率是指每秒播放静态画面的数量,单位是fps,帧率越高视频也会越流畅、越逼真,典型的帧率为24fps。

3.1.2 V4L2标准编程框架
目前,V4L2已经成为Linux内核中音视频的标准编程框架。通过V4L2编程框架,内核为应用程序提供了访问音、视频设备的统一接口。V4L2支持多种设备,其主要用于音频的采集,视频的输入及输出。在Linux中,一切设备都可以通过文件的方式来操作,而通过V4L2标准接口操作视频设备文件,如标准USB摄像头,就可以实现对硬件视频采集设备的访问和读写操作。

V4L2编程步骤:

1) 打开图像采集设备(open);

2) 设置图像采集设备的相关参数(ioctl);

3) 读图像采集设备(read、ioctl);

4) 关闭图像采集设备(close)。

3.1.3 视频模块系统框图
视频采集模块涉及到图像采集、流媒体服务器、Boa服务器和网页终端设计相关内容。该模块具体工作过程如下:首先Boa服务器得到浏览器请求的密码验证信息并将该信息传递给CGI处理程序,CGI程序验证信息正确后回送信息实现监控页面跳转登录,然后流媒体服务器将USB摄像头采集到的图像数据进行编码处理后发送到客户端浏览器实时显示。视频模块系统框图如图3-1所示:

图3-1 视频模块系统框图

3.2 MJPG-streamer视频流服务器
该开源视频流服务器可以从标准USB摄像头获取图像,并将图像数据编码后传输到终端显示。此服务器适合应用于基于IP协议的网络中,从摄像机中获取图像,并将编码后生成的JPEG格式的图像发送至终端浏览器播放显示,例如Firefox浏览器。该服务器来源于uvc_streamer,是专为在CPU和RAM上存在资源限制的嵌入式设备而开发的,兼容Linux-uvc的摄像机可以直接生成JPEG数据。

该视频流服务器使用C语言进行开发,源代码结构清晰,采用模块化的设计方法,支持不同的硬件平台。用户可以根据产品需求,自行添加修改或选择所需模块。该视频流服务器最主要的组件是输入和输出组件,MJPG-streamer组件体系结构如图3-2所示:

图3-2 MJPG-streamer组件体系结构图

3.3 MJPG-streamer的移植
3.3.1 JPEG库移植
MJPG-streamer的移植需要jpeg库,因此首先移植jpeg库。

1)解压源码包

tar xvf jpegsrc.v8c.tar.gz

2)配置源码

./configure--prefix=/home/edu/share/video/jpeg --host=arm-linux

cd jpeg-8c

3)编译和安装

make

make install

4)拷贝库到A8平台根文件系统中

cp /home/edu/share/video/jpeg/lib/libjpeg.so.* /lib -rfa

3.3.2 MJPG-streamer移植
1)解压源码包

tar xvf mjpg-streamer-r63.tar.gz

2)修改源码

cd mjpg-streamer-r63

修改plugins/input_uvc/Makfile

修改

CFLAGS +=-O2 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC


CFLAGS += -O2 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC

-I/home/edu/share/video/jpeg/include

修改

$(CC)$(CFLAGS) -ljpeg -o $@ input_ uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo

$(CC)$(CFLAGS) -ljpeg -L/home/edu/share/jpeg/lib -o $@ input_uvc.c v4l2uvc.lo

jpeg_utils.lodynctrl.lo

3)编译

make CC=arm-linux-gcc

4)复制应用程序和库到A8平台根文件系统中

mkdir /usr/mjpg-streamer

cp *.so /usr/mjpg-streamer/ -rfa

cp mjpg-streamer /usr/mjpg-streamer/

cp www /usr/mjpg-streamer/ -rf

5)进入MJPG-streamer目录在开发板运行

注:必须先插入usb摄像头

./mjpg_streamer -i "./input_uvc.so -y -r 320*480" -o "./output_http.so

-w ./www"

默认端口8080,默认设备/dev/video0,必须设置输出分辨率

Input_screen.so

6)在源码目录下有start.sh,这个脚本里有一些MJPG-streamer的使用方法及说明,

可以执行start.sh脚本运行视频服务器,首先注释掉所有行,然后添加以下几行:

export LD_LIBRARY_PATH="$(pwd)"

WEBSERVER=.

$WEBSERVER/mjpg_streamer-o "$WEBSERVER/output_http.so -p8000 -w

$WEBSERVER/www" -i"$WEBSERVER/input_uvc.so -y -r 320*480 -d /dev/video0"

3.4 MJPG-streamer主程序处理流程
主程序流程如图3-3所示:

图3-3 MJPG-streamer主程序流程图

3.5 视频服务器登陆设计
3.5.1 Boa服务器概述
Boa是一款可以运行在Linux下的服务器,具有源代码开放、小巧高效的特点。该服务器适合于对资源限制较高的嵌入式系统,作为一款单任务web服务器,Boa只能依次完成用户请求,但它可以为CGI程序创建进程来实现连接请求,通过这种方式可以较大节省系统资源。

3.5.2 Boa服务器功能
Boa服务器可以为网页终端提供数据交互,Boa的工作流程主要包括:

1.由于Boa是一款基于TCP/IP协议的服务器,因此首先需要创建TCP网络套接字、绑定端口、启动侦听等过程,同时也需要对一些环境变量进行相应的初始化,之后循环等待接收客户端的连接请求;

2、客户端浏览器发出连接请求,Boa网络服务器接收到请求;

3、服务器通过CGI程序分析客户端请求,同时根据请求做出相应的处理,并向客户端发送相应的响应信息;

4、完成客户端和服务器的数据交互,关闭相应的TCP套接字连接,释放相关资源。

Boa服务器根据客户端请求方法的不同,做出不同的响应:

1、当服务器检测到客户端浏览器的请求方法为HEAD时,则Boa服务器直接向客户端返回响应首部;

2、当服务器检测到客户端浏览器的请求方法为GET时,则Boa服务器首先返回响应首部, 之后将读出的URL文件信息发送给浏览器;

3、当服务器检测到客户端浏览器请求方法为POST时,则通过CGI程序处理Boa服务器接收到的表单信息,处理完表单信息后再通过Boa服务器将相关信息传送至浏览器,Boa服务器实现的过程和TCP/IP协议一致。

3.5.3 Boa服务器移植
1、编译boa程序

(1) tar zxvf boa-0.94.13-src.tar.gz 解压

(2) cd boa-0.94.13-src

(3) cd ./src

(4) ./configure

(5) make clean

(6) make

2、修改配置文件boa.conf

(1) 建立boa.conf目录, 并复制boa.conf到建立的目录下

(2) 进入存放boa.conf的目录并修改其中的boa.conf文件

(3) 修改Usernobody 为 User 0 ; 修改Groupnogroup 为 Group 0

(4) 修改ErrorLog选项和AccessLog选项为:

ErrorLog /home/boa/log/error_log

AccessLog /home/boa/log/access_log

(5) 设置html文件目录:DocumentRoot /home/boa/www

(6) 设置默认首页:DirectoryIndex homepage.html

(7) 设置ScriptAlias选项为:

ScriptAlias /cgi-bin/ /home/boa/www/cgi-bin/

3、修改Makefile文件:

将:

CC = gcc

CPP = gcc -E

改为:

CC = arm-linux-gcc

CPP = arm-linux-gcc -E

Make clean;make即可。

4、拷贝PC上/etc/mime.types文件到设置好的mime.types文件目录下

3.5.4 CGI简介
1)CGI概述

CGI可以处理浏览器的输入请求,本设计中CGI程序运行在Boa服务器上,服务器将接收到的客户端请求传送给CGI程序进行处理,处理结束后,CGI程序又通过服务器将相关信息返回给客户端。CGI简单地讲是个运行在Web服务器上的程序,由浏览器的输入触发。 这个程序在客户端浏览器、服务器端其他应用程序和Boa服务器之间起到桥梁作用。 网络上很多工具例如搜索引擎、留言板、BBS等都是CGI程序。

CGI是用来沟通HTML表单和服务器端程序的接口(interface)。如果一种语言支持标准输入和输出,可以设置环境变量,就可以实现CGI程序。

2)CGI处理步骤

1、通过Internet把用户请求送到服务器。

2、服务器接收用户请求并交给CGI程序处理。

3、CGI程序把处理结果传送给服务器。

4、服务器把结果送回到用户。

3)编写CGI

C语言具有标准输入和输出,并且可以设置环境变量,因此本次设计可以使用C语言来实现CGI程序。

1、CGI程序的输出:

类似于Linux编程中的描述符重定向,本设计使用C语言编写的CGI程序的标准输出重定向到了客户端浏览器,因此在Boa服务器终端上不会输出任何内容。当Boa服务器接收到客户端请求时,CGI通过标准输出返回的信息就会直接显示在网页上,这也是CGI程序的一个基本原理。

2、CGI程序第一行输出的内容必须指定Content-Type如:

"Content-Type:text/html",这个输出作为HTML的文件头。Boa服务器通过CGI向客户端传送文件时需要说明文件类型,CGI可以向客户端浏览器输出的类型包括:普通文本、HTML文本、图像和声音数据信息。

3、两个重要的CGI环境变量

QUERY-STRING:GET方法。用来获得表单输入的数据。

CONTENT-LENGTH:POST方法。用来获得输入数据的字节数。

3.5.5 HTML简介
1)HTML概述

1、HTML是用来描述网页的语言;

2、HTML是指超文本标记语言;

3、HTML属于标记语言;

4、标记语言是一套标记标签(markup tag);

5、HTML使用标记标签来描述网页。

2)HTML标签

1、HTML标签是由尖括号包围的关键词,比如

2、HTML标签是通常是成对出现的比如

3、标签中的第一个标签是开始标签,第二个标签是结束标签

4、开始和结束标签也被成为开放标签和闭合标签

3)HTML文件

1、HTML文件 = 网页,HTML文档被称为网页

2、HTML文件描述网页

3、HTML文件包含HTML标签和纯文本

本次设计中浏览器通过标签解释Boa服务器传送的HTML文件,然后在网页上显示HTML内容。

4)文件构成元素

1、文本

2、图像

3、超链接

超链接是网站的灵魂,是从一个网站指向另一个目的端的链接。

4、表格

表格是网页排版的灵魂,通过表格可以精确地控制各网页元素在网页中的位置。

5、表单

表单是用来搜集站点访问者的域集。站点访问者填写表单的方式是输入文本、单击单选按钮与复选框,以及从下拉菜单中选择选项等,表单数据会使用相应的程序进行处理。

6、GIF动画

动画是网页上最活跃的元素,通常制作优秀、创意出众的动画是吸引浏览者的最有效的方法。不过现在的网页往往不是缺乏动画,而是太多动画让人眼花潦乱,无心细看。

7、Flash动画

8、框架

框架是网页的一种组织形式,将相互关联的多个网页的内容组织在一个浏览器窗口中显示。

3.5.6 JavaScript简介
JavaScript是一种基于对象的脚本语言,该脚本语言通过客户端浏览器内部的解释器解析为可执行格式,具有简单性、跨平台性、面向对象和动态性的特点。

JavaScript脚本被设计用来向HTML 页面添加交互行为,是一种脚本语言(脚本语言是一种轻量级的编程语言),由数行可执行计算机代码组成,可以在HTML代码中实现。

JavaScript在网页中使用有三种形式:

4、直接在网页中添加脚本:

5、在script中插入脚本:

//在这里编写JavaScript代码

6、链接脚本本件:

3.6 本章小结
本章对视频采集与编解码进行了详细介绍,首先对视频基础知识作了简要介绍,然后详细介绍了视频流服务器和Boa服务器的搭建相关工作。由于本次设计图像数据直接在浏览器上进行显示,因此在章节最后对网页设计相关内容进行了详细介绍。

4 音频采集与编解码设计
4.1 音频传输协议介绍
本次设计需要将环境中采集到的语音数据传输到终端进行实时播放,虽然TCP协议能够确保IP数据的正确性,但TCP协议具有以下缺点:启动时需要“三次握手”建立连接、结束时需要“四次挥手”结束连接;当检测到数据出错或数据包丢失时,TCP将启动重传机制或拥塞控制机制;TCP报文头不能提供时间戳和编解码信息。因此,TCP/IP协议栈不适合实时语音数据传输。

UDP协议取消了重传机制,是一种面向无连接的数据包方式,但UDP协议传输数据容易丢包,因此需要结合RTP与RTCP协议保证通信的正确性和实时性。

流媒体传输协议RTP需要和RTCP协议配合使用才能保证数据的实时可靠传输。在RTP数据传输过程中,需要周期性传送RTCP包来保证传输质量,本设计中,每传输100个RTP包发送一次RTCP包。RTCP中包含相应控制验证信息和数据包的数量信息等,服务器或客户端可以根据RTCP包数据信息来动态控制传输速率。RTP与RTCP在网络层次中的位置如4-1图所示:

图4-1 RTP与RTCP在网络层次中位置

4.2 音频基础介绍
数字语音设计中涉及到以下技术指标,即音频三要素:采样频率、采样位数和声道数。采样频率是指数字化时数据每秒的采样次数,根据采样定理,本设计采样频率设为44.1kHz;每个采样点幅度数据的二进制位数就是采样位数,本设计采样位数为16位;声道数是指录音或放音时硬件线路的数量,声道分为双声道和单声道,从人的主观感知上来说,双声道的音质和音色要优于单声道,但占用存储空间是单声道的二倍。

声卡有一个硬件缓存区来保存记录下来的样本数据。音频采集过程中,当缓存区满时,声卡将产生一个中断,声卡驱动使用DMA将样本数据快速传送到应用程序缓存区;音频播放时,程序使用DMA将相应的缓存区数据传送到声卡的硬件缓存区中。

周期和帧:一个周期(period)存储一些帧(frames)。每一帧包含时间上一个点所抓取的样本。对于立体声设备,一个帧会包含两个信道上的样本。一个缓存区分解成周期,然后是帧,最后是样本。数据关系如图4-2所示:

图4-2 帧、周期和样本关系图

音频ALSA接口设备文件为:/dev/snd/pcmC0D0c 用于录音的pcm0设备,/dev/snd/pcmC0D1c 用于录音的pcm1设备,/dev/snd/pcmC0D0p 用于播放的pcm0设备,

/dev/snd/pcmC0D1p 用于播放的pcm1设备,/dev/snd/controlC0 用于声卡的控制,/dev/snd/timer定时器。音频alsa-lib是Linux的标准函数库,alsa-lib通过系统调用与内核进行数据交互。编程过程如下:

1、打开录音或回放接口,获得PCM句柄:

snd_pcm_open(&pcm_handle,"default", stream, 0);

pcm_handle:

音频设备句柄

stream取值:

回放:SND_PCM_STREAM_PLAYBACK

录音:SND_PCM_STREAM_CAPTURE

2、设置硬件参数,如采样位数,信道数和采样率:

//以声卡默认参数初始化params结构体

snd_pcm_hw_params_any(pcm_handle, params);

//设置数据布局格式

snd_pcm_hw_params_set_access(pcm_handle,params,

SND_PCM_ACCESS_RW_INTERLEAVED);

//设置采样率

snd_pcm_hw_params_set_rate_near(pcm_handle,params,

&sample_rate, &dir);

//采样位数

snd_pcm_hw_params_set_format(pcm_handle,params,

SND_PCM_FORMAT_S16_LE);

//通道数

snd_pcm_hw_params_set_channels(pcm_handle,params,

channels);

//设定每周期获取数据帧数

snd_pcm_hw_params_set_period_size_near(pcm_handle,

params, period, &dir);

ALSA接口结构框图如图4-3所示:

图4-3 ALSA接口结构框图

alsa_lib和utils的移植

移植alsa接口需要做以下几方面的工作

1、内核支持;

2、alsa_lib移植;

3、untils是工具集合,可以移植使用;

4、asound移植。

alsa_lib库的移植:

1、配置环境变量:

exportPREFIX=/usr/lib/alsa_lib

mkdir$PREFIX

2、解压并进入文件:

tar xvfalsa-lib-1.0.27.2.tar.bz2

cdalsa-lib-1.0.27.2

3、配置编译:

./configure--host=arm-linux --prefix=$PREFIX --with-configdir=/etc/alsa/--with-plugindir=/usr/lib/alsa_lib --disable-python

make

sudo -s

exportPATH=/usr/local/arm/4.3.2/bin:$PATH

4、安装:

makeinstall

5、移植到A8硬件平台:

将"/etc/alsa/"和"/usr/lib/alsa_lib"拷贝到A8平台相应目录下,设置额外链接库的路径:

exportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/alsa/alsa_lib/lib

6、配置内核以支持alsa接口:

7、建立音频接口链接:

mkdir /dev/snd

ln -s/dev/pcmC0D0c /dev/snd/pcmC0D0c

ln -s /dev/pcmC0D1c /dev/snd/pcmC0D1c

ln -s/dev/pcmC0D0p /dev/snd/pcmC0D0p

ln -s/dev/pcmC0D1p /dev/snd/pcmC0D1p

ln -s/dev/controlC0 /dev/snd/controlC0

ln -s/dev/timer /dev/snd/timer

工具集utils的移植:

1、解压源码:

tar xvfalsa-utils-1.0.27.2.tar.bz2

2、配置编译:

cdalsa-utils-1.0.27.2

./configure--host=arm-linux --prefix=$PREFIX --with-alsa-inc-prefix=$PREFIX/include --with-alsa-prefix=$PREFIX/lib --disable-alsamixer --disable-xmlto

make

sudo –s

3、安装:

makeinstall

4、A8硬件平台设置:

修改A8平台环境变量,LD_LIBRARY_PATH库的额外链接路径,PATH可执行程序自动搜寻路径,注意根据自己的库还有可执行的aplay在开发板的路径去设置

exportPATH=$PATH:/usr/local/arm/gtk_dfb/sbin:/usr/alsa/alsa_lib/lib/bin

aplay 文件名

4.3 音频传输系统设计
4.3.1 音频模块系统框图
系统要实现两个不同硬件平台的实时语音通信,采用多线程技术实现语音的采集、传输和播放。语音采集端,线程将拾音器采集到的数据编码和组包后发送到PLC网络;语音接收端使用一个线程实时接收音频流并记录相应的RTCP反馈信息,另一个线程定时从相应缓冲区中提取数据并解码播放。具体实现框图如图4-4所示:

图4-4 音频传输系统框图

4.3.1 音频缓存区设计
由于语音传输过程中会发生抖动,因此需要定义语音缓存。为了提高语音传输的实时性,发送端需要将语音缓存中的数据及时发送到网络中,由于UDP协议以太网数据包中最大存储数据1472字节,因此缓冲区需小于1472字节,本次设计缓冲区采用640字节。

4.4 本章小结
本章对音频采集与编解码进行了详细介绍,首先对音频和流媒体等基础知识作了简要介绍,然后详细介绍了ALSA接口库文件移植以及编程步骤,最后详细介绍了音频编解码模块代码设计流程以及数据传输过程。

5 电力线载波通信设计
5.1 电力线通信技术概述
电力载波通信是应用于电力系统的一种通信方式,将载有信息的射频信号以电流的形式加载到电力线上进行传输。

正交频分复用技术,即OFDM技术,采用不连续的多音调制技术,具有较强的抗干扰能力。作为一种多载波调制技术,OFDM技术可以将数据转化为相互独立的子数据流进行传输,可以更好的适应复杂的电力线通信环境。OFDM在PLC应用中有许多优势:抗多径时延、抗频率选择性衰落、传输速率高、频带利用率高和均衡技术简单等优点。

本次设计的PLC网络使用HomePlug协议标准,该协议是由家庭插电联盟制定的网络通信协议标准,HomePlug协议具有以下主要特点:物理层协议和数据链路层协议紧密结合;物理层数据速率约为14Mbps;在线性条件下,发送器动态调节适配速率;采用OFDM技术;载波屏蔽并与其它电力线业务兼容,符合国际规范;MAC自动重发请求,保证可靠性;采用CSMA/CA技术,保证优先帧有序发送;具有MII兼容的可选接口。本次设计采用的HomePlug协议使用HomePlugMAC管理入口协议MME,该协议出现在INT5500CS的任意数据帧处理的过程中。

5.2 电力载波通信系统设计
本系统以INT5500CS芯片为核心进行设计,在数据采集端,摄像头或拾音器采集到的数据经过编码后通过以太网芯片的MII接口将发送至INT5500CS芯片,经过OFDM调制后由模拟前端芯片INT1200将数据耦合到电力线传输线路;在数据接收端,模拟前端耦合得到电力线上的射频信号并将数据传送至INT5500CS芯片解调,之后,音视频数据又通过以太网芯片传输到PC机解码显示或播放。通信系统框图如图5-1所示:

图5-1 电力线载波通信系统框图

本次电力线调制解调芯片采用Intellon公司的INT5500CS芯片,该芯片内核运行在1.8V,I/O口运行在3.3V,100引脚LQFP封装,Intellon公司通过提供可以和INT5500无缝连接的模拟前端芯片INT1200,实现了一个完整的电力线载波通信解决方案。该芯片具有以下特点:集成MII接口的单芯片电力线网络收发器,在电力线上高达85Mbps的数据传输速率,可以直接和英特龙模拟前端芯片INT1200连接,兼容协议HomePlug 1.0,支持QAM 256/64/16,DQPSK,DBPSK和ROBO调制方案,低功耗,在干扰环境下高可靠性的具有专利的信号处理技术:正交频分复用(OFDM),在恶劣信道条件下,智能信道适应吞吐量最大化,集成的服务质量特性(QoS),56位DES加密并具有安全电力线通信的密钥管理。INT5500CS引脚图如图5-2所示:

图5-2 INT5500CS引脚图

在主机配置模式下,INT5500的固件和配置在启动时通过外部主机下载到INT5500内;在独立的启动模式下,INT5500的固件和配置在启动时通过读外部串行闪存加载到INT5500内。INT5500CS芯片可以通过两种工作模式启动,一种是Host/DTE模式,在此模式下该芯片类似以太网的数据链路层芯片,通过标准MII接口与以太网物理层芯片连接;另一种是PHY模式,在此模式下该芯片类似以太网的物理层芯片,通过标准MII接口与以太网数据链路层芯片连接。MII接口包括一个数据和管理接口,数据接口用于INT5500CS与具有MII标准接口的以太网芯片传输数据,管理接口允许INT5500CS控制和监控以太网物理层芯片。MII接口传输和接收数据由四位组成,INT5500CS接收以太网PHY层的一个同步时钟,则MAC和PHY层传输一次四位数据,MII接口时序如图5-3所示:

图5-3 MII接口时序图

INT5500CS芯片必须与模拟前端芯片INT1200配合才能使用,通过AFE接口相互连接,INT1200内部集成ADC和DAC控制器,同时可以调节开关增益放大器的放大倍数,连接框图如图5-4所示:

图5-4 INT5500CS与INT1200连接框图

模拟前端接口时序如图5-5所示:

图5-5 模拟前端接口时序图

INT5500CS芯片包含两个内部存储块,分别是位于地址0x00010000处的128K字节的应用程序RAM和位于地址0x80000000处的96K字节的包缓冲。未被压缩的固件映像位于应用程序RAM中并且也在该RAM中运行,而包缓冲是一个输入输出数据的缓冲队列。INT5500内存的变更取决于它是否正在运行一个加载程序或MAC映像。当运行一个加载程序时,启动ROM位于地址0x00000000,应用程序RAM位于0x00010000;当运行一个MAC映像时,应用程序RAM位于地址0x00000000,包缓冲总是位于0x80000000。具体内存映射如图5-6所示:

图5-6 数据存储映射图

5.3 通信模块设计
5.3.1 INT5500CS工作模式选择
INT5500CS芯片工作模式的选择是通过外部引脚的高低电平来配置的。为了驱动模拟前端的AFE接口,ASC_EN引脚必须设为低电平;模式选择引脚设为低电平用于连接以太网PHY层芯片;时钟频率设为50MHz,即将ASC_CLK引脚拉低;选择从FLASH启动方式,INT5500需要一个1Mbit的串行闪存,该FLASH采用INT5500CS数据手册中指定的串行FLASH芯片来存储MAC地址和默认用户秘钥信息,并且这个串行设备只能是ST Micro STM25P10-A,一旦该闪存被初始化,非易失MME可以取出闪存中参数信息,该芯片通过标准SPI接口与INT5500CS芯片连接。具体配置如下表5-1所示:

表5-1引脚配置

管脚

功能

电平

设置

ASC_EN

保留

低电平

设置为低

ASC_DATA/MODE

模式

低电平

Host/DTE模式

高电平

PHY模式

ASC_CLK

保留

低电平

设置为低

ASC_PWRDWN/MAC_CLK

时钟速度

低电平

50MHz

高电平

75MHz

GPIO_6

启动方式

低电平

FLASH启动

高电平

主机启动

5.3.2 以太网模块设计
为了和以太网接口RJ45连接,需要使用以太网控制芯片,本次设计采用美国Broadcom公司的AC101L芯片。该芯片是一款低功耗的10/100M物理层收发芯片,AC101L需要3.3V和2.5V两种电压,该芯片引脚如图5-7所示:

图5-7 AC101L引脚图

由于模式选择引脚设置为低电平,则INT5500CS芯片工作在主机模式下,类似于以太网的数据链路层芯片,与AC101L的连接图如下所示:

图5-7 INT5500CS与AC101L连接图

5.3.3 用户接口协议
HomePlug MAC 管理入口MME出现在INT5500的任意帧处理过程中,INT5500CS芯片利用MAC管理在HomePlug 1.0.1规格书中指定帧格式。远程应答MME工作过程如下:

  1. PTS发送一个数据帧到本地INT5500,包含设置远端站地址的DA,设置PTS地址的SA。附加MME的网络密钥,其EKS设为0,并且EK设置远程站DEK,远程应答MME和应答帧;
  2. PTS的INT5500远程连接附加MME密钥,使用指定的EKS和EK加密结果帧并将帧数据发送到电力线上;
  3. 远程INT5500从电力线上收到相应数据帧,数据是被远程主机的DEK加密的;
  4. 通过INT5500返回一个远程应答MME到PTS,远程主机应答;
  5. DUT INT5500转寄远程应答MME到电力线上,并使用NEK加密;
  6. PTS INT5500收到远程应答MME并且转寄它到PTS;
  7. 远程主机发送封装应答帧到远程INT5500;
  8. DUT INT5500正常执行应答帧,如果需要转寄数据帧到电力线上;
  9. 远程主机重复转寄远程应答MME上的数据帧;

10.DUT INT5500继续正常重复执行应答帧;

11.远程主机向DUT INT5500发送第二个应答帧;

12.DUT INT5500执行第二个应答帧。

13.重复11和12步骤,直到远程主机发送最后重复应答帧。

14.DUT INT5500执行最后应答帧。

数据传送过程如图5-8所示:

图5-8 数据传送过程图

5.4 本章小结
本章对电力线载波通信模块的实现进行了详细介绍,首先对OFDM调制技术作了简要介绍,然后详细介绍了INT5500CS芯片的内部资源以及工作模式配置和编程协议接口相关内容,同时本章也对外围关键芯片做了简要介绍。

6 样机系统功能测试
6.1 系统测试准备
本设计主要分为音频、视频和电力线载波通信三部分,下面分别对各功能测试所需工具软件作简要介绍。

6.1.1 音频测试
所需工具:嵌入式A8硬件样机平台、拾音器、win7端Linux操作系统和网线;

软件环境:搭建好的嵌入式Linux软件环境,A8硬件平台和PC端Linux需要安装ALSA

接口库文件,支持声卡驱动。

6.1.2 视频测试
所需工具:嵌入式A8硬件样机平台、USB摄像头、win7端浏览器和网线;

软件环境:主机端搭建好的嵌入式Linux软件环境,配置安装视频流服务器和Boa服务器,支持USB摄像头驱动;

6.1.2 电力线载波通信测试
所需工具:INT5500CS调制解调器硬件平台、插排、PC机、嵌入式A8硬件样机平台和网线;

软件环境:PC端需要安装Intellon公司的PowerPacket Utility软件测试数据传输速率和通信质量相关信息。

准备好以上软硬件环境就可以对本设计各模块进行功能测试。

6.2 系统测试
下面分别对音频、视频和电力线载波通信模块进行功能测试:

6.2.1 音频功能测试
使用网线和串口线连接A8样机平台和PC机,同时打开串口终端以便通过命令控制A8平台,将PC端IP地址和A8平台IP地址设在同一网段。

通过串口命令进入A8平台相应文件目录,在命令行输入./arm -h 10.220.1.114(目的IP) –l,目的IP地址为PC端虚拟机中Linux操作系统的IP地址。进入PC端Linu操作系统相应目录,在命令行输入./x86 -l -h 10.220.1.123(目的ip),目的IP为A8平台Linux操作系统的IP地址。运行结果如图6-1和6-2所示:

图6-1 PC端运行结果

图6-1 A8平台运行结果

将手机放在A8硬件平台附近并播放歌曲,在PC端(可以戴上耳机)就可以听到清晰的歌声;由于本次设计可以实现全双工通信,将手机放在PC机附近,也可以在A8平台听到清晰的歌声。通过测试,音频方案完全满足设计要求。

6.2.2 视频功能测试
使用网线和串口线连接A8样机平台和PC机,同时打开串口终端以便通过命令控制A8平台,将PC端IP地址和A8平台IP地址设在同一网段。

通过串口命令进入A8平台相应文件目录,首先在命令行输入kill -9 76关闭系统自启动的Boa服务器,之后在命令行输入./image.sh运行shell脚本文件,此时视频流服务器和Boa服务器启动;打开PC机上的谷歌浏览器,在网址窗口输入服务器IP地址10.220.1.123,即为A8平台Linux操作系统的IP地址,点击回车后进入视频登陆界面,如图6-3所示:

图6-3 视频登陆界面

在用户窗口输入root,密码窗口输入111111,点击登陆后进入选择登陆界面,如图6-4所示:

图6-4 选择登陆界面

点击图像采集后进入视频显示终端页面,如图6-5所示:

图6-5 视频实时显示页面

通过测试,视频方案完全满足设计要求。

6.2.3 电力线载波通信功能测试
使用网线将调制解调器1与PC机连接,将调制解调器2与A8平台连接,同时将两个调制解调器插接在同一个插座上并打开PC端的PowerPacket Utility软件。稳定后可以观察到两个调制解调器的三个指示灯全亮,表示两个硬件通信正常,点击PowerPacket Utility软件上的Connect按钮,可以看到通信速率相关信息,如图6-6所示:

图6-6 PowerPacket Utility软件测试效果

由上图可知,本次测试与PC机相连接的调制解调器的MAC地址是00:26:75:37:D4:46,与A8平台相连接的调制解调器的MAC地址是00:26:75:45:10:16,通信速率高达85Mbps。通过以上测试,电力线载波通信方案完全满足设计要求。

6.2.4 联机测试
通过对三个模块的单独测试,各模块完全满足设计要求,下面对系统总体功能进行测试。

编写A8平台GTK+界面显示代码,修改image.sh脚本文件,使用串口线、插座和网线连接PC机和A8硬件平台,打开串口调试终端,通过PowerPacket Utility软件测试网络连接。进入A8平台Linux操作系统相应目录,关闭系统自启动Boa服务器,在命令行输入./image.sh运行脚本文件,此时视频流服务器、Boa服务器和音频流服务器全部正常开启。在PC端打开谷歌浏览器,输入服务器IP地址,登陆进入视频显示页面;进入PC端Linux操作系统相应目录,在命令行输入./x86 –l –h 10.220.1.123,此时可以实现实时音频通信。

网络连接情况如图6-7所示:

图6-7 网络连接情况图

由上图可知,系统网络连接正常。

服务器登陆情况如图6-8所示:

图6-8 网络服务器登陆图

由上图可知,系统Boa服务器运行正常。

视频流采集情况如图6-9所示:

图6-9 视频显示页面

由上图可知,视频流服务器运行正常,图像采集正常。

音视频流采集情况如图6-10所示:

图6-10 音视频播放与显示页面

在A8硬件平台附近或PC机附近说话,可以在另一端听到相应声音;改变摄像头位置,可以看到网页端图像发生相应变化。经过以上测试,本次系统方案完全满足设计要求。

6.3 总结与展望
本章在开始部分介绍了测试前所需要的工具软件,接下来分别对音频、视频和电力线载波通信模块进行了功能测试,最后对系统进行了整体功能测试。

经过测试,本系统按要求实现了所有功能。但由于时间以及成本的问题,仍有许多不足需要改进。在视频编码部分,由于采用软件压缩,增加了系统软件开销并且编码效率要比硬件压缩低;在音频编码部分,由于本次设计未对音频数据进行压缩处理,增加了传输所需带宽。为了增加设计的实用性,必将继续努力,不断学习新的知识和技能,不断完善本次设计。

从《天道》的角度谈谈产品规划
原创2023-02-24 21:05·产品人卫朋
今天主要借用《天道》中丁元英的商业案例来谈谈产品规划这个话题。

《天道》这部被众人追捧的影视剧来源于豆豆的成名作《遥远的救世主》。

如果没有全局做过产品或者市场的规划,而且是初次接触这部剧。

你就会惊叹于主人公的组局、布局,以及成局的能力。

从互联网拥簇的评论声中,也可见一斑。

剧中的丁元英甚至都有一种被神化的趋势。

而随着个人知识和阅历的增加,再加上每年也都要做产品规划。

也逐渐对这部剧或者这本书有了一些新的认识。

究其本质,这是一种战略性的思维,也是一种规划的能力。

更是一种市场与内部能力的匹配过程。

笔者之前也分享过这块的内容,也看到了一些质疑。

怎么能用虚拟的案例做讲解呢?

其实这么做的原因主要有两点考虑:

首先,这部剧中的商业案例的整体逻辑是自洽的,而且也符合当时的商业环境。

其次,整部剧将整个商业案例完整地呈现了出来,也包括其中很多的决策细节。

这就要比分析现实案例直观得多,也更加有指导意义。

再回到产品规划这个话题上来。

产品规划从本质上来说是一种推演能力,也就是根据第一性原则推演产品从0到1、从1到100的一个过程。

如果说一款产品是一个点的话,那产品规划便是通过构造一种系统能力以达成企业最终的商业目的。

第一性原理是埃隆·马斯克非常推崇的一种思维模型。

通常来说,企业愿景对应的便是企业的第一性原则。

围绕第一性原则可以激发资源优势、制定细分市场目标,最终实现企业目标。

下面以影视剧中丁元英操盘的格律诗音响项目为例,谈谈产品规划。

格律诗音响公司的企业愿景是实现王庙村生产力和市场的对接,最终实现农户脱贫。

这是企业的愿景,同时也是丁元英承诺要给红颜知己芮小丹创造的神话。

启动一个项目或产品,资源和人力配置是你首先要考虑的。

企业在不同的发展周期,对人的要求是有很大差异的。

丁元英在分析完这些人的本质之后,并没有把自己的全套计划完整地告诉原始这些人。

而是通过市场的变化来淘汰掉一部分人。

因为这部分人现在不淘汰掉,在以后的市场变化中,可能会给公司带来毁灭性的灾难。

下面就先梳理一下其中的关键人物:

丁元英作为格律诗音响项目的唯一操盘手,全局规划了整个项目。

他的优势是自己在欧洲的人脉和战略规划能力,以及在欧阳雪等人心中的影响力。

同时,作为发烧级音乐玩家,他对音箱的独特见解也为他们打造差异化的产品起到了关键助力作用。

差异化的意思是相比于竞争对手,你的独特优势或者护城河,没有这个前提,整个策略也就无从谈起,这为他们赢得了时间上的先机。

在音响这个市场,竞品已经很成功了,而且他们提供的价值点已经被用户接受。

如果按照他们的价值点去做产品,你就永远只能跟在他们身后。

这时候就需要找一个跟他们不一样的价值点,做差异化。

欧阳雪这个人呢,做事很踏实,很讲义气,不贪心。优势是人脉、资金和社会地位。

这个人的价值在于她对格律诗的绝对控股,这样就可以确保关键决策权的归属。

由于每个人的认知水平的限制,很多时候不同个体看到的终局是有极大差异的,这个时候你就需要考虑如何增加成事的确定性。

如果开公司的话,股权的分配问题是你优先要考虑的。

不赚钱的时候,大家还都能力出一孔。一旦公司有起色,每个人就开始有自己的诉求,不确定性也就随之而来。

肖亚文见过世面,知道公司怎么运行,知道商务谈判和商务合作的事情,是很精明的职场人物。

而冯世杰和叶晓明想成就一番事业,但没有机会,能够脚踏实地的做事情,但眼光欠缺。刘冰是小人物,唯利是图,关键时刻不能顶上,迟早会被淘汰。

叶晓明,冯世杰,刘冰这三个人的优势就是懂音乐,会组装,可以作为高级技术工。

同时,这三人和王庙村农民有一定的关系,可以作为连接的纽带,核心竞争力是技术和人脉。

乐圣公司的掌舵人是林雨峰(竞争对手),但太过刚硬,只知道进攻,不懂防守,考虑问题存在漏洞。

这就有点类似竞争分析了,通过分析竞争对手的漏洞,找到破局点,制定商业竞争策略。

接下来就需要统一思想了:

想要以小博大,达成乐圣跟王庙村合作的目的,就必须把优势发挥到最大效果。

这才有几次股东开会,召集农民兄弟一起开会等,就是为了统一思想。

市场的生存竞争非常残酷,胜负往往就在毫厘之间,微弱的优势都可能成为关键一环,你比他多一口气,你就是赢家。

最后,丁元英就把这些人的优势资源整合起来,按照需要组建公司,精心规划。

详细案例分析可以参阅笔者之前的文章。

卫朋

人人都是产品经理受邀专栏作家,CSDN 嵌入式领域新星创作者、资深技术博主。2020 年 8 月开始写产品相关内容,截至目前,人人都是产品经理单渠道阅读 56 万+,鸟哥笔记单渠道阅读200 万+,CSDN 单渠道阅读 210 万+,51CTO单渠道阅读 180 万+。

卫朋入围2021/2022年人人都是产品经理平台年度作者,光环国际学习社区首批原创者、知识合作伙伴,商业新知 2021 年度产品十佳创作者,腾讯调研云2022年达人榜第三名。

文章被人人都是产品经理、CSDN、华为云、运营派、产品壹佰、鸟哥笔记、光环国际、商业新知、腾讯调研云等头部垂直类媒体转载。文章见仁见智,各位看官可策略性选择对于自己有用的部分。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
相关文章
|
6月前
|
消息中间件 网络安全 数据安全/隐私保护
麒麟系统ARM安装rabbitmq
麒麟系统ARM安装rabbitmq
|
6月前
|
Ubuntu Windows
【Ubuntu/Arm】Ubuntu 系统如何链接有线网络(非虚拟机)?
【Ubuntu/Arm】Ubuntu 系统如何链接有线网络(非虚拟机)?
|
6月前
|
算法 编译器 Linux
【Qt4 部署】ARM系统上使用Qt 4 进行开发的QWS 等环境变量部署
【Qt4 部署】ARM系统上使用Qt 4 进行开发的QWS 等环境变量部署
128 0
|
6月前
|
传感器 物联网 网络架构
ENS、IoT设备、X86、ARM
ENS(Enterprise Name Service)是企业名称服务,是一种为物联网设备提供命名和寻址服务的技术。ENS通过为物联网设备分配唯一的名称和地址,使得物联网设备可以被网络中的其他设备和服务所识别和访问。 IoT设备(Internet of Things device)是连接到互联网的物理设备,可以收集和共享数据,用于监测、控制和优化各种业务流程和操作。IoT设备包括各种传感器、执行器、网关和路由器等。
89 2
|
3月前
|
Ubuntu Linux
查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号
查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号
897 3
|
1月前
|
传感器 存储 架构师
构建基于 IoT 的废物管理系统:软件架构师指南
构建基于 IoT 的废物管理系统:软件架构师指南
74 9
|
1月前
|
Ubuntu Shell API
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
|
3月前
|
Linux 网络安全 开发工具
内核实验(二):自定义一个迷你Linux ARM系统,基于Kernel v5.15.102, Busybox,Qemu
本文介绍了如何基于Linux Kernel 5.15.102版本和BusyBox创建一个自定义的迷你Linux ARM系统,并使用QEMU进行启动和调试,包括内核和BusyBox的编译配置、根文件系统的制作以及运行QEMU时的命令和参数设置。
305 0
内核实验(二):自定义一个迷你Linux ARM系统,基于Kernel v5.15.102, Busybox,Qemu
|
3月前
|
存储 SQL JSON
【Azure IoT Hub】从设备端如何向IOT发送海量数据,可以使用从设备到IoT连接的直接传输吗?如何把IoT Hub中的数据存储到Azure Storage中?
【Azure IoT Hub】从设备端如何向IOT发送海量数据,可以使用从设备到IoT连接的直接传输吗?如何把IoT Hub中的数据存储到Azure Storage中?
|
5月前
|
存储 Ubuntu 编译器
合肥中科深谷嵌入式项目实战——基于ARM语音识别的智能家居系统(三)
合肥中科深谷嵌入式项目实战——基于ARM语音识别的智能家居系统(三)
合肥中科深谷嵌入式项目实战——基于ARM语音识别的智能家居系统(三)
下一篇
无影云桌面