- Android音视频通话
Android音视频通话前言一、准备工作1、编写Jni接口2、通过javah工具生成头文件3、集成speex、webrtc二、初始化工作三、开启socketudp服务四、判断socket是否可读五、发送数据到远端1、视频数据1.1、初始化MediaCodec1.2、通过MediaCodec进行H264编码2、音频数据2.1、webrtc消回声2.2、speex编码压缩六、断开连接前言Android
- RTSP系列三:RTP协议介绍
BreakingY
网络音视频
我的音视频/流媒体开源项目(github)RTSP系列:RTSP系列一:RTSP协议介绍-CSDN博客RTSP系列二:RTSP协议鉴权-CSDN博客RTSP系列三:RTP协议介绍-CSDN博客RTSP系列四:RTSPServer/Client实战项目-CSDN博客目录一、基本概念二、RTP报文格式三、RTP封装视频3.1、RTP封装H2643.1.1、单一封包模式3.1.2、组合封包模式3.1.3
- HTML5里video标签支持哪些格式的视频文件
Lucky_chengzi
video标签支持的视频格式:Ogg、MPEG4、WebMMP4=MPEG4文件使用H264视频编解码器和AAC音频编解码器WebM=WebM文件使用VP8视频编解码器和Vorbis音频编解码器Ogg=Ogg文件使用Theora视频编解码器和Vorbis音频编解码器
- ffmpeg 视频编码流程及主要API
melonbo
FFMPEGffmpeg音视频
一、编码流程初始化组件配置编码器参数打开编码器处理输入帧编码循环写入输出数据收尾释放资源二、核心步骤与API详解1.初始化与参数配置注册组件(旧版本需手动注册,新版本自动处理)avformat_network_init();//网络相关初始化(可选)查找编码器AVCodec*codec=avcodec_find_encoder(AV_CODEC_ID_H264);//支持H.264/HEVC等创建
- 基于Live555实现RTSP服务器来推送H264实时码流
静止了 所有的花开
音视频h.264
实现了一个单播的rtsp服务器来推送实时的h264码流,参考了官方的testProgs目录下的testOnDemandRTSPServer例程和liveMedia目录下的DeviceSource.cpp文件。我这边是把编码出来的h264码流放入了一个缓冲队列,然后从缓冲队列里取出来进行推流。rtsp.h:#ifndef_RTSP_H_#define_RTSP_H_#include"liveMedi
- H264码流介绍 及 FFmpeg解封装得到H264码流方法
冰冰的coco
音视频ffmpeg
参考文章音视频H264编解码协议-知乎视频H264编码详解(上)-知乎H.264媒体流AnnexB和AVCC格式分析-CSDNH264之NALU解析-知乎H264帧,SPS,PPS概念-知乎H.264流媒体协议格式中的AnnexB格式和AVCC格式深度解析-CSDNH264简介H.264从1999年开始,到2003年形成草案,最后在2007年定稿有待核实。在ITU的标准⾥称为H.264,在MPEG
- 轻松掌握视频格式转换:利用FFmpeg将H264裸流封装为MP4
霍梦含Jessie
轻松掌握视频格式转换:利用FFmpeg将H264裸流封装为MP4【下载地址】利用FFmpeg将H264裸流文件封装为MP4文件并保存利用FFmpeg将H264裸流文件封装为MP4文件并保存本仓库提供了一个资源文件,详细介绍了如何利用FFmpeg库将H264裸流文件读取到内存中,并将其封装为MP4文件并保存到本地项目地址:https://gitcode.com/open-source-toolkit
- Ubuntu下使用ffmpeg封装h264裸流为MP4文件
最近在研究ffmpeg封装h264裸流为MP4相关问题,这里需要解释下为什么要封装h264视频,通过编码器得到的h264视频流仅仅是裸流,只包含一些流的头信息和视频数据,没有时间戳的概念,所以使用播放器播放h264视频时,会出现播放速度不正常的现象(我遇到的是快进现象),所以将h264封装成MP4格式可以添加时间戳的信息进去,即可使用播放器正常播放视频。参考网上的代码(https://blog.c
- 将h.264视频流封装成flv格式文件(二.开始动手)
darkdragonking
flv264flvh.264rtmpc++windows
前面写了flv文件的解析,有h264裸流的话就开始封装吧。网上大多数都是用ffmeg库来做这个工作的,哎,学习资料少学不会,还是自己动手吧。封装前要先了解下h.264格式,只需要知道一点点就可以了,我看了h.264官方文档,我靠,3百多页,还全是中文,什么,是中文?既然是中文的我就勉强看下吧,我靠,看起来还很复杂的,果断不看了,不需要,也没时间,我又不做解码,这东西具体步骤资料又少,基本都是那一两
- RK3288解码视频时遇到的奇葩问题
melonbo
百问-音视频音视频
1、亮线问题用rk3288做视频显示,qt界面是1024x768,在切换视频源时,屏幕偶尔会出现亮线,位置在屏幕的正中间。解决方法是将qt的界面设置为1023x767,完美解决。2、亮点rk3288在解码显示h264视频时,界面的图像会出现斑驳的亮点,不仔细看还看不出来,出现的亮点有的在视频图像上,有的在qt界面上。解决方法是在现实图像界面前,先用ffplay播放一个全屏的画面,然后再显示程序的界
- 音视频及H264/H256编码相关原理
Everbrilliant89
音视频开发音视频视频编解码H264编码H265编码音视频编解码
一、音视频封装格式原理:我们播放的视频文件一般都是用一种封装格式封装起来的,封装格式的作用是什么呢?一般视频文件里不光有视频,还有音频,封装格式的作用就是把视频和音频打包起来。所以我们先要解封装格式,看有哪些视频流和哪些音频流,此时的音频流和视频流都还是压缩数据,不能直接用于显示的,这就需要解码。如FFmpeg视频文件就是一个容器(视频流(H264)音频流(aac))。1、视频文件封装格式:封装格
- 音视频基础概念扫盲
Charlotte_jc
音视频
音视频概念相关参考地址ffmpeg视频压缩视频尺寸(视频分辨率/帧大小)视频分辨率,常见的分辨率有4096×2160,2560x1440,1920*1080,1280*720视频编码视频编码方式就是指通过特定的压缩技术,将某个视频格式的文件转换成另一种视频格式文件的方式。常见的编码格式有:H264,VP8,AVS,RMVB,WMV,QuickTime音频编码音频编码方式指通过特定的压缩技术对音频数
- 【TroubleShoot】Windows10视频文件没有预览图的解决办法
tealcwu
windows音视频h.264vp9
【问题描述】Windows文件夹中,有一部分的MP4视频在文件以图标显示的时候,是可以直接看到预览图的,但有一部分没法预览,只能显示为统一的文件类型图标。【解决方法】检查发现,两类MP4都是使用H264格式,用VLCMediaPlayer等专门的播放器都能播放,但使用Windows自带的WindowsMediaPlayer,可以预览的就可以正常播放,不能预览的就不能播放,而且播放器会停止响应。由此
- 某腾X视频下载器2.1
摆渡搜不到你
音视频python
importreimportosimporttimefrombs4importBeautifulSoupfromDrissionPageimportChromiumPage,ChromiumOptionsimportsubprocess#编码和清晰度映射表codec_mapping={'f321004':('H264','1080'),'f321003':('H264','720'),'f3210
- 利用WireShark分析H264码流
阿基米东
wiresharkh264
背景:最近在参与一个ARM平台的音视频传输的项目,同事说已经是高清视频了,但是显示模糊,显然不能达到高清要求,于是就想抓包分析一下。Step1:执行如下命令,在ARM平台上用tcpdump抓包并保存为test.cap。tcpdump–ieth0–nn–wtest.cap然后启动我们的多媒体通信程序,抓取几秒的数据即可。Step2:用WireShark工具打开test.cap文件。Step3:右键点
- Wireshark使用教程(含安装包和安装教程)
光电的一只菜鸡
嵌入式wireshark测试工具网络
Wireshark使用入门教程0.资源下载以及软件安装1.Wireshark中无法显示网卡列表2.Wireshark抓取H264过程0.资源下载以及软件安装 参考blog:抓包神器wireshark安装保姆级教程 压缩包下载:Wireshark安装包1.Wireshark中无法显示网卡列表 Wireshark中无法显示网卡列表的解决方法:Wireshark中无法显示网卡列表的解决方法2.Wi
- FFmpeg 解码视频流实现yuv播放
书弋江山
ffmpegcC++IOSffmpegh264codecyuv解码
参考文章雷神文章FFMPEG–裸码流解码AVCodec最简单的基于FFmpeg的libswscale的示例(YUV转RGB)视频流测试端口初始化解码器相关变量-(void)initDecoder{if(decodeFrame){return;}intcodec_id=AV_CODEC_ID_H264;pCodec=avcodec_find_decoder(codec_id);if(!pCodec)
- USB虚拟化工具之:虚拟UVC摄像头,提供下载测试链接(支持win7,win10等系统)
驱动开发007
驱动开发计算机外设云计算数码相机usb虚拟化usb重定向
//6.UVC帧格式comboFrameFormat=newQComboBox(this);comboFrameFormat->addItems({"MJPEG","YUV420P","NV12","H264","H265"});支持"MJPEG","YUV420P","NV12","H264","H265"5种帧格式。MJPEG兼容性较好,支持4K,支持windows自带相机,微信,抖音直播伴侣
- 录制mp4
AI算法网奇
python基础opencvpython计算机视觉
目录单线程保存mp4多线程保存mp4rtspffmpeg录制mp4单线程保存mp4importcv2importimageiocv2.namedWindow('photo',0)#0窗口大小可以任意拖动,1自适应cv2.resizeWindow('photo',1280,720)url="rtsp://admin:
[email protected]/h264/ch1/main/av_str
- 视频编码实战
生椰_李点点
ffmpeg音视频
FFmpeg流程从本地读取YUV数据编码为h264格式的数据,然后再存⼊到本地,编码后的数据有带startcode。与FFmpeg示例⾳频编码的流程基本⼀致。函数说明:avcodec_find_encoder_by_name:根据指定的编码器名称查找注册的编码器。avcodec_alloc_context3:为AVCodecContext分配内存。avcodec_open2:打开编解码器。avco
- 编解码器不支持OpenCV:FFmpeg:tag 0x34363268/‘;h264‘;
潮易
opencvffmpeg人工智能
在Python中处理视频时,我们经常会遇到解码器不支持OpenCV的问题。这通常是由于你的系统上没有安装或配置正确的FFmpeg版本导致的。解决这个问题的一种方法是检查你的系统中是否已经安装了FFmpeg,以及它是否位于系统的PATH环境变量中。如果FFmpeg未正确安装,或者不在PATH中,那么Python的cv2库可能无法找到它。如果你的系统上已安装了FFmpeg,但是仍然出现上述错误,那么可
- 编译opencv,及其依赖ffmpeg, 以支持h264,h265
northeastsqure
opencvffmpegh265h264
ubuntu,更改自:https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu警告:ffmpeg一定要编译为动态库,非静态库1.编译ffmpegsudoapt-getupdate-qq&&sudoapt-get-yinstall\autoconf\automake\build-essential\cmake\git-core\libass-dev\l
- 蝌蚪窝html5 video not,html - HTML5 Video does not play in any browser - Stack Overflow
远方之巅
蝌蚪窝html5videonot
IhaveavideowiththefollowinginformationItisMP4videowithH264codecHowever,usingthefollowingcode:Yourbrowserdoesnotsupportthevideotag.ThevideodoesnotplayandlookslikethiswhenIrenderitRenderedVideoIhavechec
- Error! DLL amfrt64.dll failed to open
wangzhpwang
pythonffmpeg
Intel集显,win10下ffmpeg报DLLamfrt64.dllfailedtoopen解决办法创建:C:\Users\用户1\.matplotlib\matplotlibrc设置:animation.codec:h264_qsv#Codectouseforwritingmoviefigure.dpi:300figure.figsize:7,4.5axes.labelsize:18legen
- 树莓派4b配置csi摄像头
2401_89317718
opencv
安装好最新系统后,接好csi摄像头,不要看网上那些教程去改config.txt文件,直接跑指令测试:libcamera-hello--qt-preview拍照:libcamera-jpeg-otest.jpg--qt-preview录像:libcamera-vid-t10000-otest.h264--qt-preview直接跑指令就能成像改文件后反而成像不了opencv也用不了
- iOS视频编码详细步骤(视频编码器,基于 VideoToolbox,支持硬件编码 H264/H265)
Unlimitedz
app开发ios音视频
iOS视频编码详细步骤流程1.视频采集阶段视频采集所使用的代码和之前的相同,所以不再过多进行赘述初始化配置:通过VideoCaptureConfig设置分辨率1920x1080、帧率30fps、像素格式kCVPixelFormatType_420YpCbCr8BiPlanarFullRange设置摄像头位置(默认前置)和镜像模式授权与初始化:检查并请求相机权限创建AVCaptureSession会
- RV1126笔记一:ffmpeg+rtmp
leona_nuaa
笔记ffmpeg
一、介绍移植FFMPEG主要是为了实现RTMP推流功能、RTMP拉流功能和SRT推流功能,主要分为3个小项目:1、单路/多路RTMP推流2、单路/多路RTMP拉流3、SRT推流项目主要涉及多个知识点,x264,x265,srt等,RV1126可以直接采用硬件编码方式和解码方式采集H264和H265,我们只需要把数据和音频通过RTMP等协议推出去和拉取显示,操作为内网操作,在本地部署RTMP服务器来
- 各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式
wishfly
视频ffmpeg
编解码学习笔记(一):基本概念媒体业务是网络的主要业务之间。尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析、应用开发、释放license收费等等。最近因为项目的关系,需要理清媒体的codec,比较搞的是,在豆丁网上看运营商的规范标准,同一运营商同样的业务在不同文档中不同的要求,而且有些要求就我看来应当是历史的延续,也就是现在已经很少采用了。所以
- Github每日精选(第50期):RTSP / RTMP / LL-HLS 服务器rtsp-simple-server
go2coding
Github每日精选服务器github运维
rtsp-simple-serverrtsp-simple-server是RTSP/RTMP/LL-HLS服务器和代理,允许读取、发布和代理视频和音频流。目前支持的流有:RTSP,RTMP,HLS。github的地址在这里。特征:将直播流发布到服务器从服务器读取实时流来自其他服务器或摄像机的代理流,始终或按需每个流可以有多个视频和音频轨道,用任何RTP兼容的编解码器编码,包括H264、H265、V
- docker自建rustdesk-server远程桌面
大地爱
面试学习路线阿里巴巴docker容器运维
rustdesk简介RustDesk是一款可以平替TeamViewer的开源软件,旨在提供安全便捷的自建方案。RustDesk是一款功能齐全的远程桌面应用,具有以下特性:支持Windows、macOS、Linux、iOS、Android、Web等多个平台。支持VP8/VP9/AV1软件编解码器和H264/H265硬件编解码器。完全掌控数据,轻松自建。P2P连接,端到端加密。在Windows上可以非
- java杨辉三角
3213213333332132
java基础
package com.algorithm;
/**
* @Description 杨辉三角
* @author FuJianyong
* 2015-1-22上午10:10:59
*/
public class YangHui {
public static void main(String[] args) {
//初始化二维数组长度
int[][] y
- 《大话重构》之大布局的辛酸历史
白糖_
重构
《大话重构》中提到“大布局你伤不起”,如果企图重构一个陈旧的大型系统是有非常大的风险,重构不是想象中那么简单。我目前所在公司正好对产品做了一次“大布局重构”,下面我就分享这个“大布局”项目经验给大家。
背景
公司专注于企业级管理产品软件,企业有大中小之分,在2000年初公司用JSP/Servlet开发了一套针对中
- 电驴链接在线视频播放源码
dubinwei
源码电驴播放器视频ed2k
本项目是个搜索电驴(ed2k)链接的应用,借助于磁力视频播放器(官网:
http://loveandroid.duapp.com/ 开放平台),可以实现在线播放视频,也可以用迅雷或者其他下载工具下载。
项目源码:
http://git.oschina.net/svo/Emule,动态更新。也可从附件中下载。
项目源码依赖于两个库项目,库项目一链接:
http://git.oschina.
- Javascript中函数的toString()方法
周凡杨
JavaScriptjstoStringfunctionobject
简述
The toString() method returns a string representing the source code of the function.
简译之,Javascript的toString()方法返回一个代表函数源代码的字符串。
句法
function.
- struts处理自定义异常
g21121
struts
很多时候我们会用到自定义异常来表示特定的错误情况,自定义异常比较简单,只要分清是运行时异常还是非运行时异常即可,运行时异常不需要捕获,继承自RuntimeException,是由容器自己抛出,例如空指针异常。
非运行时异常继承自Exception,在抛出后需要捕获,例如文件未找到异常。
此处我们用的是非运行时异常,首先定义一个异常LoginException:
/**
* 类描述:登录相
- Linux中find常见用法示例
510888780
linux
Linux中find常见用法示例
·find path -option [ -print ] [ -exec -ok command ] {} \;
find命令的参数;
- SpringMVC的各种参数绑定方式
Harry642
springMVC绑定表单
1. 基本数据类型(以int为例,其他类似):
Controller代码:
@RequestMapping("saysth.do")
public void test(int count) {
}
表单代码:
<form action="saysth.do" method="post&q
- Java 获取Oracle ROWID
aijuans
javaoracle
A ROWID is an identification tag unique for each row of an Oracle Database table. The ROWID can be thought of as a virtual column, containing the ID for each row.
The oracle.sql.ROWID class i
- java获取方法的参数名
antlove
javajdkparametermethodreflect
reflect.ClassInformationUtil.java
package reflect;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
import javassist.Modifier;
import javassist.bytecode.CodeAtt
- JAVA正则表达式匹配 查找 替换 提取操作
百合不是茶
java正则表达式替换提取查找
正则表达式的查找;主要是用到String类中的split();
String str;
str.split();方法中传入按照什么规则截取,返回一个String数组
常见的截取规则:
str.split("\\.")按照.来截取
str.
- Java中equals()与hashCode()方法详解
bijian1013
javasetequals()hashCode()
一.equals()方法详解
equals()方法在object类中定义如下:
public boolean equals(Object obj) {
return (this == obj);
}
很明显是对两个对象的地址值进行的比较(即比较引用是否相同)。但是我们知道,String 、Math、I
- 精通Oracle10编程SQL(4)使用SQL语句
bijian1013
oracle数据库plsql
--工资级别表
create table SALGRADE
(
GRADE NUMBER(10),
LOSAL NUMBER(10,2),
HISAL NUMBER(10,2)
)
insert into SALGRADE values(1,0,100);
insert into SALGRADE values(2,100,200);
inser
- 【Nginx二】Nginx作为静态文件HTTP服务器
bit1129
HTTP服务器
Nginx作为静态文件HTTP服务器
在本地系统中创建/data/www目录,存放html文件(包括index.html)
创建/data/images目录,存放imags图片
在主配置文件中添加http指令
http {
server {
listen 80;
server_name
- kafka获得最新partition offset
blackproof
kafkapartitionoffset最新
kafka获得partition下标,需要用到kafka的simpleconsumer
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.
- centos 7安装docker两种方式
ronin47
第一种是采用yum 方式
yum install -y docker
 
- java-60-在O(1)时间删除链表结点
bylijinnan
java
public class DeleteNode_O1_Time {
/**
* Q 60 在O(1)时间删除链表结点
* 给定链表的头指针和一个结点指针(!!),在O(1)时间删除该结点
*
* Assume the list is:
* head->...->nodeToDelete->mNode->nNode->..
- nginx利用proxy_cache来缓存文件
cfyme
cache
user zhangy users;
worker_processes 10;
error_log /var/vlogs/nginx_error.log crit;
pid /var/vlogs/nginx.pid;
#Specifies the value for ma
- [JWFD开源工作流]JWFD嵌入式语法分析器负号的使用问题
comsci
嵌入式
假如我们需要用JWFD的语法分析模块定义一个带负号的方程式,直接在方程式之前添加负号是不正确的,而必须这样做:
string str01 = "a=3.14;b=2.71;c=0;c-((a*a)+(b*b))"
定义一个0整数c,然后用这个整数c去
- 如何集成支付宝官方文档
dai_lm
android
官方文档下载地址
https://b.alipay.com/order/productDetail.htm?productId=2012120700377310&tabId=4#ps-tabinfo-hash
集成的必要条件
1. 需要有自己的Server接收支付宝的消息
2. 需要先制作app,然后提交支付宝审核,通过后才能集成
调试的时候估计会真的扣款,请注意
- 应该在什么时候使用Hadoop
datamachine
hadoop
原帖地址:http://blog.chinaunix.net/uid-301743-id-3925358.html
存档,某些观点与我不谋而合,过度技术化不可取,且hadoop并非万能。
--------------------------------------------万能的分割线--------------------------------
有人问我,“你在大数据和Hado
- 在GridView中对于有外键的字段使用关联模型进行搜索和排序
dcj3sjt126com
yii
在GridView中使用关联模型进行搜索和排序
首先我们有两个模型它们直接有关联:
class Author extends CActiveRecord {
...
}
class Post extends CActiveRecord {
...
function relations() {
return array(
'
- 使用NSString 的格式化大全
dcj3sjt126com
Objective-C
格式定义The format specifiers supported by the NSString formatting methods and CFString formatting functions follow the IEEE printf specification; the specifiers are summarized in Table 1. Note that you c
- 使用activeX插件对象object滚动有重影
蕃薯耀
activeX插件滚动有重影
使用activeX插件对象object滚动有重影 <object style="width:0;" id="abc" classid="CLSID:D3E3970F-2927-9680-BBB4-5D0889909DF6" codebase="activex/OAX339.CAB#
- SpringMVC4零配置
hanqunfeng
springmvc4
基于Servlet3.0规范和SpringMVC4注解式配置方式,实现零xml配置,弄了个小demo,供交流讨论。
项目说明如下:
1.db.sql是项目中用到的表,数据库使用的是oracle11g
2.该项目使用mvn进行管理,私服为自搭建nexus,项目只用到一个第三方 jar,就是oracle的驱动;
3.默认项目为零配置启动,如果需要更改启动方式,请
- 《开源框架那点事儿16》:缓存相关代码的演变
j2eetop
开源框架
问题引入
上次我参与某个大型项目的优化工作,由于系统要求有比较高的TPS,因此就免不了要使用缓冲。
该项目中用的缓冲比较多,有MemCache,有Redis,有的还需要提供二级缓冲,也就是说应用服务器这层也可以设置一些缓冲。
当然去看相关实现代代码的时候,大致是下面的样子。
[java]
view plain
copy
print
?
public vo
- AngularJS浅析
kvhur
JavaScript
概念
AngularJS is a structural framework for dynamic web apps.
了解更多详情请见原文链接:http://www.gbtags.com/gb/share/5726.htm
Directive
扩展html,给html添加声明语句,以便实现自己的需求。对于页面中html元素以ng为前缀的属性名称,ng是angular的命名空间
- 架构师之jdk的bug排查(一)---------------split的点号陷阱
nannan408
split
1.前言.
jdk1.6的lang包的split方法是有bug的,它不能有效识别A.b.c这种类型,导致截取长度始终是0.而对于其他字符,则无此问题.不知道官方有没有修复这个bug.
2.代码
String[] paths = "object.object2.prop11".split("'");
System.ou
- 如何对10亿数据量级的mongoDB作高效的全表扫描
quentinXXZ
mongodb
本文链接:
http://quentinXXZ.iteye.com/blog/2149440
一、正常情况下,不应该有这种需求
首先,大家应该有个概念,标题中的这个问题,在大多情况下是一个伪命题,不应该被提出来。要知道,对于一般较大数据量的数据库,全表查询,这种操作一般情况下是不应该出现的,在做正常查询的时候,如果是范围查询,你至少应该要加上limit。
说一下,
- C语言算法之水仙花数
qiufeihu
c算法
/**
* 水仙花数
*/
#include <stdio.h>
#define N 10
int main()
{
int x,y,z;
for(x=1;x<=N;x++)
for(y=0;y<=N;y++)
for(z=0;z<=N;z++)
if(x*100+y*10+z == x*x*x
- JSP指令
wyzuomumu
jsp
jsp指令的一般语法格式: <%@ 指令名 属性 =”值 ” %>
常用的三种指令: page,include,taglib
page指令语法形式: <%@ page 属性 1=”值 1” 属性 2=”值 2”%>
include指令语法形式: <%@include file=”relative url”%> (jsp可以通过 include