CN106507181B - 一种获取并存储在线视频数据的方法 - Google Patents

一种获取并存储在线视频数据的方法 Download PDF

Info

Publication number
CN106507181B
CN106507181B CN201611088714.8A CN201611088714A CN106507181B CN 106507181 B CN106507181 B CN 106507181B CN 201611088714 A CN201611088714 A CN 201611088714A CN 106507181 B CN106507181 B CN 106507181B
Authority
CN
China
Prior art keywords
video
proxy server
file
request
video data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201611088714.8A
Other languages
English (en)
Other versions
CN106507181A (zh
Inventor
纪广兴
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Kuwo Technology Co Ltd
Original Assignee
Beijing Kuwo Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Kuwo Technology Co Ltd filed Critical Beijing Kuwo Technology Co Ltd
Priority to CN201611088714.8A priority Critical patent/CN106507181B/zh
Publication of CN106507181A publication Critical patent/CN106507181A/zh
Application granted granted Critical
Publication of CN106507181B publication Critical patent/CN106507181B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/433Content storage operation, e.g. storage operation in response to a pause request, caching operations
    • H04N21/4331Caching operations, e.g. of an advertisement for later insertion during playback
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/80Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
    • H04N21/85Assembly of content; Generation of multimedia applications
    • H04N21/858Linking data to content, e.g. by linking an URL to a video object, by creating a hotspot
    • H04N21/8586Linking data to content, e.g. by linking an URL to a video object, by creating a hotspot by using a URL

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)

Abstract

本发明涉及一种获取并存储在线视频数据的方法,通过视频数据库行ID和画质进行视频播放请求;把视频文件真实的URL地址发送给代理服务器,代理服务器返回代理服务器的URL地址给播放器;播放器按代理服务器的URL地址发起播放请求,代理服务器拦截到播放请求后,替换掉播放请求中的请求头相关信息后,把请求转发给视频文件真实的URL地址对应的真实服务器,并获取到视频数据;把获取到视频数据保存到本地文件中,保存后同时把数据再转发到播放器进行播放。本发明,对在线播放的视频能边播边存(存储到播放者的本地),支持各种系统内置视频播放控件的边播边存,实现一次请求就能在线播放及保存文件,节省手机流量。

Description

一种获取并存储在线视频数据的方法
技术领域
本发明涉及在线音视频播放技术领域,具体说是一种获取并存储在线视频数据的方法。
背景技术
在Android系统中,音频播放可以使用Android系统的AudioTrack类进行音频数据的捕获,从而可以实现边播边存功能。而在视频播放时,使用Android系统播放器不支持让上层拦截数据进行保存操作。而且,系统播放器在不同手机中实现也各不相同。
这就导致以下问题的出现:
在视频播放时,如果本地数据不全,数据只能全部在线获取,会消耗大量流量,而且下次播放时,由于不能边播边存,还是会再次消耗大量流量,占用资源多,不但耗电大而且增加了使用成本。
发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种获取并存储在线视频数据的方法,对在线播放的视频能边播边存(存储到播放者的本地),支持各种系统内置视频播放控件的边播边存,实现一次请求就能在线播放及保存文件,节省手机流量。
为达到以上目的,本发明采取的技术方案是:
一种获取并存储在线视频数据的方法,其特征在于,包括如下步骤:
步骤1,通过视频的视频数据库行ID和画质进行视频播放请求;
步骤2,当拦截获取到的视频文件真实的URL地址时,把真实的URL地址发送给代理服务器,代理服务器返回替换成代理服务器的URL地址,将代理服务器的URL地址发送给播放器;
步骤3,播放器按代理服务器的URL地址发起播放请求,代理服务器拦截到播放请求后,替换掉播放请求中的请求头相关信息后,把请求转发给视频文件真实的URL地址对应的真实服务器,并获取到视频数据;
步骤4,把获取到视频数据保存到本地文件中,保存后同时把数据再转发到播放器进行播放,即边播边存。
在上述技术方案的基础上,其特征在于:所述视频包括但不限于音乐短片MV。
在上述技术方案的基础上,步骤1中,首先判断是否是已下载视频,如果是已下载视频,则直接返回已下载视频文件路径,播放器进行本地播放;
如果不是已下载视频,进一步判断是否是已缓存过的视频,如果是已缓存过的视频,则直接返回缓存文件路径,播放器进行本地播放;
如果不是已缓存过的视频,则进行视频的播放防盗链请求,获取视频文件真实的URL地址。
在上述技术方案的基础上,视频播放界面加载后,通过传入的视频信息中的视频数据库行ID和画质,向视频播放管理类请求视频文件真实的URL地址。
在上述技术方案的基础上,步骤2中,所述代理服务器指边播边存代理服务器,边播边存代理服务器具体为一个http代理服务器;
启动边播边存代理服务器后,创建Http请求接收线程,在127.0.0.1本机IP上,随机打开一个Socket端口,等待播放器的Http请求。
在上述技术方案的基础上,步骤2中,把真实的URL地址发送给代理服务器后,
首先进行真实的URL地址的302跳转处理(302重定向),得到视频文件的真实URL,并保存在代理服务器中;
然后,把视频文件的真实URL中的域名和端口替换为代理服务器等待的本机127.0.0.1地址和随机打开的Socket端口,生成替换的代理服务器的URL地址作为播放URL。
在上述技术方案的基础上,步骤3中,代理服务器接收到播放请求后,代理服务器保存播放器请求的Socket,解析请求的Header信息,把请求头中关于源信息替换为代理服务器对应参数;
代理服务器新创建Socket,创建时根据软件全局是否打开免流量开关,把免流量代理服务器设置或取消:
如果启用免流量代理,则新创建Socket连接到免流量代理服务器IP和对应端口,
如果不启用免流量代理,则新创建Socket连接到真实服务器;
把替换后的Header信息,通过新创建Socket发送到真实服务器,请求下载视频数据。
在上述技术方案的基础上,步骤4中,当代理服务器新创建Socket返回Http响应数据后,首先解析Response的Header信息,得到所返回视频数据的长度、启始位置、数据的开始位置;
把解析后的视频数据,通过保存的播放器请求的Socket,回发给播放器,进行播放。
在上述技术方案的基础上,步骤4中,视频播放管理类判断本机是否有此视频的未完成缓存文件,
如果无未完成缓存文件,则创建新缓存文件,把视频数据保存到新缓存文件中,
如果有未完成缓存文件,则按未完成缓存文件的大小,把缺少的视频数据追加到未完成缓存文件中;
当缓存结束后,本机文件写入并改名保存,再次播放时,按已缓存过的视频直接使用缓存文件进行播放。
在上述技术方案的基础上,步骤4中,在边播边存过程中,如果用户拖动播放条进行跳转播放,则停止把视频数据保存到缓存文件中,只执行视频数据转发下载、播放。
本发明所述的获取并存储在线视频数据的方法,通过自定义代理服务方式进行边播边存,解决了Android手机内置视频播放控件不一,不支持拦截数据进行文件保存两个问题。
本发明所述的获取并存储在线视频数据的方法,能方便的设置免流量代理,且这一切都是对播放控件透明的,不需要修改、设置系统播放器。
本发明所述的获取并存储在线视频数据的方法,具有以下优点:
1.实现一次请求就能在线播放及保存文件,节省手机流量。
2.实现用户拖动、跳跃播放时边播边存自动终止功能,边播边存不限制用户拖动、跳跃播放。
3.实现免流量代理透明设置,不需要设置到播放器上,提高了手机系统兼容性。
4.实现一次播放缓存后,在无网时也能多次播放。
5.兼容各种品牌手机内置视频播放控件。
附图说明
本发明有如下附图:
图1本发明流程图。
具体实施方式
以下结合附图对本发明作进一步详细说明。
如图1所示,本发明所述的获取并存储在线视频数据的方法,所述视频可以为音乐短片MV(Music Video),包括如下步骤:
步骤1,通过视频的视频数据库行ID和画质进行视频播放请求;
首先判断是否是已下载视频,如果是已下载视频,则直接返回已下载视频文件路径,播放器进行本地播放;
如果不是已下载视频,进一步判断是否是已缓存过的视频,如果是已缓存过的视频,则直接返回缓存文件路径,播放器进行本地播放;
如果不是已缓存过的视频,则进行视频的播放防盗链请求,获取视频文件真实的URL地址;
步骤2,当拦截获取到的视频文件真实的URL地址时,把真实的URL地址发送给代理服务器,代理服务器返回替换成代理服务器的URL地址,将代理服务器的URL地址发送给播放器;
步骤3,播放器按代理服务器的URL地址发起播放请求,代理服务器拦截到播放请求后,替换掉播放请求中的请求头相关信息后,把请求转发给视频文件真实的URL地址对应的真实服务器,并获取到视频数据;
步骤4,把获取到视频数据保存到本地文件中,保存后同时把数据再转发到播放器进行播放,即边播边存。
本发明采用自定义Http代理服务,把播放器请求URL替换为自己开发的http服务器URL,播放器在请求在线视频进行播放时,所有的http请求URL都会发送到自定义http代理服务器,在自定义的http代理服务器中,进行视频请求转发及数据接收工作,同时把数据拦截后先保存成文件、再发送给播放器进行播放。
在上述技术方案的基础上,步骤1中,视频播放请求是指用户从列表选择视频点击播放。
在上述技术方案的基础上,步骤1中,视频播放界面加载后,通过传入的视频信息中的视频数据库行ID和画质,向视频播放管理类请求视频文件真实的URL地址。
在上述技术方案的基础上,步骤1中,视频播放管理类负责判断是否是已下载视频。
在上述技术方案的基础上,步骤1中,视频播放管理类负责判断是否是已缓存过的视频。
在上述技术方案的基础上,步骤2中,所述代理服务器指边播边存代理服务器,边播边存代理服务器具体为一个http代理服务器;
启动边播边存代理服务器后,创建Http请求接收线程,在127.0.0.1本机IP上,随机打开一个Socket端口,等待播放器的Http请求。
在上述技术方案的基础上,步骤2中,把真实的URL地址发送给代理服务器后,
首先进行真实的URL地址的302跳转处理(302重定向),得到视频文件的真实URL,并保存在代理服务器中;
然后,把视频文件的真实URL中的域名和端口替换为代理服务器等待的本机127.0.0.1地址和随机打开的Socket端口,生成替换的代理服务器的URL地址作为播放URL。
在上述技术方案的基础上,播放URL传到视频播放界面,设置到系统播放器,启动播放。
在上述技术方案的基础上,步骤3中,代理服务器接收到播放请求后,代理服务器保存播放器请求的Socket,解析请求的Header信息,把请求头中关于源信息替换为代理服务器对应参数;
代理服务器新创建Socket,创建时根据软件全局是否打开免流量开关,把免流量代理服务器设置或取消:
如果启用免流量代理,则新创建Socket连接到免流量代理服务器IP和对应端口,
如果不启用免流量代理,则新创建Socket连接到真实服务器;
把替换后的Header信息,通过新创建Socket发送到真实服务器,请求下载视频数据。
在上述技术方案的基础上,步骤4中,当代理服务器新创建Socket返回Http响应数据后,首先解析Response的Header信息,得到所返回视频数据的长度、启始位置、数据的开始位置;
把解析后的视频数据,通过保存的播放器请求的Socket,回发给播放器,进行播放。
在上述技术方案的基础上,步骤4中,视频播放管理类判断本机是否有此视频的未完成缓存文件,
如果无未完成缓存文件,则创建新缓存文件,把视频数据保存到新缓存文件中,
如果有未完成缓存文件,则按未完成缓存文件的大小,把缺少的视频数据追加到未完成缓存文件中;
当缓存结束后,本机文件写入并改名保存,再次播放时,按已缓存过的视频直接使用缓存文件进行播放。
在上述技术方案的基础上,步骤4中,在边播边存过程中,如果用户拖动播放条进行跳转播放,则停止把视频数据保存到缓存文件中,只执行视频数据转发下载、播放。
本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。

Claims (7)

1.一种获取并存储在线视频数据的方法,其特征在于,包括如下步骤:
步骤1,通过视频的视频数据库行ID和画质进行视频播放请求;
步骤1中,首先判断是否是已下载视频,如果是已下载视频,则直接返回已下载视频文件路径,播放器进行本地播放;
如果不是已下载视频,进一步判断是否是已缓存过的视频,如果是已缓存过的视频,则直接返回缓存文件路径,播放器进行本地播放;
如果不是已缓存过的视频,则进行视频的播放防盗链请求,获取视频文件真实的URL地址;
步骤2,当拦截获取到的视频文件真实的URL地址时,把真实的URL地址发送给代理服务器,代理服务器返回替换成代理服务器的URL地址,将代理服务器的URL地址发送给播放器;
步骤3,播放器按代理服务器的URL地址发起播放请求,代理服务器拦截到播放请求后,替换掉播放请求中的请求头相关信息后,把请求转发给视频文件真实的URL地址对应的真实服务器,并获取到视频数据;
步骤3中,代理服务器接收到播放请求后,代理服务器保存播放器请求的Socket,解析请求的Header信息,把请求头中关于源信息替换为代理服务器对应参数;
代理服务器新创建Socket,创建时根据软件全局是否打开免流量开关,把免流量代理服务器设置或取消:
如果启用免流量代理,则新创建Socket连接到免流量代理服务器IP和对应端口,
如果不启用免流量代理,则新创建Socket连接到真实服务器;
把替换后的Header信息,通过新创建Socket发送到真实服务器,请求下载视频数据;
步骤4,把获取到视频数据保存到本地文件中,保存后同时把数据再转发到播放器进行播放,即边播边存;
步骤4中,视频播放管理类判断本机是否有此视频的未完成缓存文件,
如果无未完成缓存文件,则创建新缓存文件,把视频数据保存到新缓存文件中,
如果有未完成缓存文件,则按未完成缓存文件的大小,把缺少的视频数据追加到未完成缓存文件中;
当缓存结束后,本机文件写入并改名保存,再次播放时,按已缓存过的视频直接使用缓存文件进行播放。
2.如权利要求1所述的获取并存储在线视频数据的方法,其特征在于:所述视频包括但不限于音乐短片MV。
3.如权利要求1所述的获取并存储在线视频数据的方法,其特征在于:视频播放界面加载后,通过传入的视频信息中的视频数据库行ID和画质,向视频播放管理类请求视频文件真实的URL地址。
4.如权利要求1所述的获取并存储在线视频数据的方法,其特征在于:步骤2中,所述代理服务器指边播边存代理服务器,边播边存代理服务器具体为一个http代理服务器;
启动边播边存代理服务器后,创建Http请求接收线程,在127.0.0.1本机IP上,随机打开一个Socket端口,等待播放器的Http请求。
5.如权利要求1所述的获取并存储在线视频数据的方法,其特征在于:步骤2中,把真实的URL地址发送给代理服务器后,
首先进行真实的URL地址的302跳转处理(302重定向),得到视频文件的真实URL,并保存在代理服务器中;
然后,把视频文件的真实URL中的域名和端口替换为代理服务器等待的本机127.0.0.1地址和随机打开的Socket端口,生成替换的代理服务器的URL地址作为播放URL。
6.如权利要求1所述的获取并存储在线视频数据的方法,其特征在于:步骤4中,当代理服务器新创建Socket返回Http响应数据后,首先解析Response的Header信息,得到所返回视频数据的长度、启始位置、数据的开始位置;
把解析后的视频数据,通过保存的播放器请求的Socket,回发给播放器,进行播放。
7.如权利要求1所述的获取并存储在线视频数据的方法,其特征在于:步骤4中,在边播边存过程中,如果用户拖动播放条进行跳转播放,则停止把视频数据保存到缓存文件中,只执行视频数据转发下载、播放。
CN201611088714.8A 2016-11-30 2016-11-30 一种获取并存储在线视频数据的方法 Active CN106507181B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201611088714.8A CN106507181B (zh) 2016-11-30 2016-11-30 一种获取并存储在线视频数据的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201611088714.8A CN106507181B (zh) 2016-11-30 2016-11-30 一种获取并存储在线视频数据的方法

Publications (2)

Publication Number Publication Date
CN106507181A CN106507181A (zh) 2017-03-15
CN106507181B true CN106507181B (zh) 2019-11-05

Family

ID=58329503

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201611088714.8A Active CN106507181B (zh) 2016-11-30 2016-11-30 一种获取并存储在线视频数据的方法

Country Status (1)

Country Link
CN (1) CN106507181B (zh)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107733938A (zh) * 2017-12-08 2018-02-23 北京酷我科技有限公司 一种Android上提升网络下载速度的优化策略
CN109963171B (zh) * 2017-12-14 2021-01-05 腾讯科技(深圳)有限公司 多媒体信息传输方法、传输设备及存储介质
CN108093270B (zh) * 2017-12-29 2020-09-25 北京酷我科技有限公司 一种播放时边播边存视频的方法
CN110581873B (zh) * 2018-06-11 2022-06-14 中国移动通信集团浙江有限公司 一种跨集群重定向方法及监控服务器
CN109246127B (zh) * 2018-10-12 2021-05-28 上海哔哩哔哩科技有限公司 一种音频资源的安全分享控制方法和系统
CN110446074B (zh) * 2019-07-17 2021-06-08 福建天泉教育科技有限公司 基于AVPlayer播放加密音视频的方法、存储介质
CN113938714A (zh) * 2020-06-29 2022-01-14 阿里巴巴集团控股有限公司 播放控制方法、装置、电子设备和存储介质
CN112291617A (zh) * 2020-09-11 2021-01-29 深圳市华曦达科技股份有限公司 一种音视频离线播放方法、装置及电子设备
CN115134420A (zh) * 2021-03-24 2022-09-30 华为技术有限公司 一种媒体播放方法、装置和电子设备
CN113207011A (zh) * 2021-04-30 2021-08-03 深圳沐奇科技有限公司 一种短视频处理用预加载方法
CN114143577B (zh) * 2021-11-26 2023-10-24 中电信数智科技有限公司 一种视频获取方法及系统
CN115225934B (zh) * 2022-07-25 2023-11-28 未来电视有限公司 视频播放方法、系统、电子设备以及存储介质
CN115460471A (zh) * 2022-08-11 2022-12-09 北京奇艺世纪科技有限公司 视频播放方法、装置、电子设备和计算机可读介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102299931A (zh) * 2011-09-19 2011-12-28 莫雅静 一种网页内容发送方法和代理服务器
CN103686198A (zh) * 2013-12-30 2014-03-26 优视科技有限公司 视频数据的处理方法、装置和系统
CN104902453A (zh) * 2015-06-30 2015-09-09 北京奇虎科技有限公司 一种用于移动终端的访问网络权限控制方法及移动终端
CN105681874A (zh) * 2015-06-02 2016-06-15 深圳Tcl数字技术有限公司 网络视频在线播放的方法和装置

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1728628B (zh) * 2004-07-30 2010-05-12 迈普通信技术股份有限公司 安全代理通道复用方法和安全代理通道复用服务器
US20090172752A1 (en) * 2007-12-28 2009-07-02 Yahoo! Inc. Streaming multiple videos in a playlist
US20120265853A1 (en) * 2010-12-17 2012-10-18 Akamai Technologies, Inc. Format-agnostic streaming architecture using an http network for streaming
CN103297452B (zh) * 2012-02-24 2016-08-24 北京对角巷科技发展有限公司 一种在互联网发布和直播流媒体的方法及系统
CN104768076B (zh) * 2014-01-06 2019-05-03 腾讯科技(北京)有限公司 视频播放方法和装置
CN104954894B (zh) * 2015-06-26 2019-03-26 网宿科技股份有限公司 一种视频流量引导方法、装置及一种电子设备

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102299931A (zh) * 2011-09-19 2011-12-28 莫雅静 一种网页内容发送方法和代理服务器
CN103686198A (zh) * 2013-12-30 2014-03-26 优视科技有限公司 视频数据的处理方法、装置和系统
CN105681874A (zh) * 2015-06-02 2016-06-15 深圳Tcl数字技术有限公司 网络视频在线播放的方法和装置
CN104902453A (zh) * 2015-06-30 2015-09-09 北京奇虎科技有限公司 一种用于移动终端的访问网络权限控制方法及移动终端

Also Published As

Publication number Publication date
CN106507181A (zh) 2017-03-15

Similar Documents

Publication Publication Date Title
CN106507181B (zh) 一种获取并存储在线视频数据的方法
CN105072172B (zh) 一种基于内容分发网络的热点统计及推送方法及系统
CN107251525B (zh) 用于支持移动设备用户的预测内容预取服务的分布式服务器架构
CN106330997B (zh) 一种用于移动终端应用的内容分发的方法和系统
CN104137104B (zh) 基于共享元信息的网页的协作式加载
CN100556129C (zh) 一种对等连接流媒体直播系统和装置
CN104717231B (zh) 内容分发网络的预分发处理方法及装置
CN102546608B (zh) 用于同步播放媒体信息的方法、装置、设备和系统
JP2015179518A (ja) コンテンツを検索、選択、及び表示する方法及びシステム
CN106658054B (zh) 一种视频广告请求链路优化方法和装置
CN103164505B (zh) 基于实际使用频率对应用软件进行排名的系统及方法
CN108737898A (zh) 一种热点直播推送方法、服务器及存储介质
CN109218362A (zh) 一种互联网内容分发方法、装置和系统
CN109874028A (zh) 一种hls流媒体的播放方法、系统及存储介质
CN110796466B (zh) 一种互联网广告投放方法和装置
CN103108008A (zh) 一种下载文件的方法及文件下载系统
WO2011000313A1 (zh) 实现用户原创内容发布到电信系统的方法、装置及系统
CN100527695C (zh) 构建半固定p2p网络的方法及其系统
CN108965910A (zh) 一种视频缓存方法及播放器
CN104967646B (zh) 文件下载方法及装置
CN110535961A (zh) 资源获取方法、装置、电子设备和存储介质
CN107426613A (zh) 基于网络直播间的视频资源镜像加载播放方法及系统
CN102982470B (zh) 移动广告系统中提供移动广告服务的装置和方法
CN104010046B (zh) 一种服务器选择方法及系统、记录服务器、测量服务器
CN106331172A (zh) 一种应用于内容分发网络的资源检测方法及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant