CN103077057A - 一种基于Android智能机顶盒的Loader方法 - Google Patents
一种基于Android智能机顶盒的Loader方法 Download PDFInfo
- Publication number
- CN103077057A CN103077057A CN2012105948016A CN201210594801A CN103077057A CN 103077057 A CN103077057 A CN 103077057A CN 2012105948016 A CN2012105948016 A CN 2012105948016A CN 201210594801 A CN201210594801 A CN 201210594801A CN 103077057 A CN103077057 A CN 103077057A
- Authority
- CN
- China
- Prior art keywords
- thread
- section data
- data
- data block
- section
- 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.)
- Granted
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开了在Android上实现符合DVB标准的Loader方法,为达到快速稳定下载升级文件的目的,本发明利用多线程,无锁双向循环链表等技术在(0-12)Mbps的码率范围内能在一个周期下载完升级文件,用以支持大数据量升级文件(可能超过200M)的稳定快速下载及升级。
Description
技术领域
本发明涉及一种基于Android智能机顶盒的Loader方法。
背景技术
Android是Google开发的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,是首个为移动终端打造的真正开放的移动软件。由于其免费、开源、开放的特性,使得它在短短的几年内已经成为第一大智能手机操作系统。与此同时,很多数字电视及机顶盒厂商对Android趋之若鹜,纷纷把Android系统移植到数字电视及机顶盒上。基于DVB的机顶盒在软件升级上不仅要支持android的apk软件包升级方式,还需要支持在线升级整个机顶盒软件(即Loader)。
传统的Loader在得到升级信息后,即设置demux收数据,收到一个数据后马上分析数据并且写入flash或者缓存。在码率稍大(2Mbps以上)时,经常会丢包,一个下载周期不能下载完成,需要2个或者更多个周期才能完成下载任务。当遇到image文件经常比较大,经常需要半个多小时甚至更长时间才能下完,这是很难以忍受的。
发明内容
针对上述技术缺陷,本发明提出一种基于Android智能机顶盒的Loader方法。
为了解决上述技术问题,本发明的技术方案如下:
一种基于Android智能机顶盒的Loader方法,机顶盒将下载任务分为两个线程,第一个线程为收数据线程,所述第一个线程收集demux接收到的数据;第二个线程为section数据处理线程,根据第一个线程接收到的数据中的分区信息计算得出对应section数据块应该存放的正确位置并保存进文件或缓存,所述第一线程和所述第二线程同时操作一个双向循环链表,每个item存放一个section数据块,并有标志位标识此item是否已被占用,所述双向循环链表在所述第一线程和所述第二线程启动前初始化完毕,并开辟好2048个section数据块的缓存空间。
进一步的,两个线程启动后,收数据线程不停将收到的section数据块存入开辟的空间中,并置标志位,如果预先开辟的缓存用完,则申请新的空间,大小为取section数据块占空间和1024字节中大者,并将section数据块存入,section数据处理线程则不停检查当前指向的item是否已经置位,如是,则处理当前item存放的section数据块,并指向下一个item存放的section数据块,如果item没有置位,说明暂时没有数据,暂停此线程10ms,然后继续检查处理过程。
进一步的,当收数据线程不再接受数据,且section数据处理线程也停止处理数据后,进行flash烧写过程,通过对flash置位升级标志来判断flash是否烧录完成。
本发明的有益效果在于:在Android上实现符合DVB标准的Loader方法,为达到快速稳定下载升级文件的目的,本发明利用多线程,无锁双向循环链表等技术在(0-12)Mbps的码率范围内能在一个周期下载完升级文件,用以支持大数据量升级文件(可能超过200M)的稳定快速下载及升级。
附图说明
图1为打包后的TS流数据结构图;
图2为Download_Control_Section数据中Download Info表结构图;
图3为Download_Control_Section数据中partition control表结构图;
图4为Download_Control_Section数据中datagram表;
图5为双向循环链表的结构代码标示图。
具体实施方式
下面将结合附图和具体实施例对本发明做进一步的说明。
本发明中,其Loader流程跟现有技术不变,为:局端制作将制作好的升级文件分成一个个分区文件,打包成TS流,通过QAM(数字调制器)下发出去。机顶盒端通过分析NIT中描述符来判断是否有合适升级流,是否需要升级,如果需要升级则开始通过demux收数据并将数据整理合并成升级文件并开始flash数据的更新。
升级文件划分成分区文件的方法有2种。
第一种,按功能划分。每个分区文件都有特定功能,会对应到硬件nor-flash或者nand-flash上一个分区。例如,将升级文件划分为4个分区:启动画面(bootlogo.img),内核(kernel.img),root文件系统(root.img)system文件系统(system.img)。
第二种,固定分区文件大小划分。如按12M划分,将一个50M的文件划分为5个分区(4个12M的分区加上一个2M的分区)。
打包成TS流的原理很简单,将升级文件的信息以及分区文件打包成ts的section。如图1,
打包后的TS流由Download_Control_Section,
和Partition_Control_Section, Datagram_Section组成。
Download_Control_Section描述整个文件的信息,包含download_table_id,download_size,partition_count等信息。Partition_Control_Section描述分区信息,包含part_datagram_number,part_total_size等信息。Datagram_Section载有升级文件有效数据,包含last_section_number,magic_num,Datagram_current_section_number等信息。
如图2~图4所示,Download_Control_Section里面包含了Download Info表,Partition_Control_Section包含了partition control表, Datagram_Section包含了datagram表。
传统的Loader在得到升级信息后,即设置demux收数据,收到一个数据后马上分析数据并且写入flash或者缓存。在码率稍大(2Mbps以上)时,经常会丢包,一个下载周期不能下载完成,需要2个或者更多个周期才能完成下载任务。由于一般image文件经常比较大,经常需要半个多小时甚至更长时间才能下完,这是很难以忍受的。
为达到快速稳定下载升级文件的目的,本发明利用多线程,无锁双向循环链表等技术在(0-12)Mbps的码率范围内能在一个周期下载完升级文件。
此下载任务由两个线程完成,第一个为收数据线程,收集demux(分离器)接收到的数据,这个线程处理速度必须很快,不能阻塞数据的接受,否则会造成数据丢失。第二个为section数据处理线程,处理由前述线程收到的数据,根据分区信息计算得出此section数据块的数据应该存放的正确位置并保存进文件或缓存。
这两个线程同时操作一个双向循环链表,每个item存放一个section数据块,并有标志位标识此item是否已被占用。双向链表在两个线程启动前初始化完毕,并开辟好2048个section数据块的缓存空间。
双向循环链表的结构如图5所示,通过part_list进行链接。
两个线程启动后,收数据线程不停将收到的section数据块存入开辟的空间中,并置标志位,如果缓存用完,则申请新的空间,大小为max(section大小,1024)即取section数据块的大小和1024字节中大者,并将section数据块存入。处理线程则不停检查当前指向的item是否已经置位,如是,则处理当前item所存储的section数据块,并指向下一个item所存储的section数据块,否则说明暂时没有数据,则暂停此线程10ms,然后继续处理过程。
两个线程同时处理双向循环列表过程中,这个双向循环链表是个临界区,一般情况下要对其做锁处理。但这里使用了一个比较巧妙的方法,收数据线程只置标志位为1,而处理数据线程只置标志位为0。两个线程只通过判断标志位即可进行同步。
下载完成后进入flash烧写过程,此过程中不定因素较多,比如突然断电,为此设计了一种方案能确保在任何情况能正常升级。
烧写过程为:android系统下完成升级文件下载并校验通过后,置flash中升级标志为1,进入升级状态,重启后进入升级内核(不同于android的内核,只用于升级,主要包含flash烧写程序),开始烧写flash,如果烧写过程中出现断电等问题中断了烧写过程,重新开机后仍然进入升级内核,进入烧写过程。烧写完毕后,置flash中升级标志为0,进入正常启动android的状态。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员,在不脱离本发明构思的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明保护范围内。
Claims (3)
1.一种基于Android智能机顶盒的Loader方法,其特征在于,机顶盒将下载任务分为两个线程,第一个线程为收数据线程,所述第一个线程收集demux接收到的数据;第二个线程为section数据处理线程,根据第一个线程接收到的数据中的分区信息计算得出对应section数据块应该存放的正确位置并保存进文件或缓存,所述第一线程和所述第二线程同时操作一个双向循环链表,每个item存放一个section数据块,并有标志位标识此item是否已被占用,所述双向循环链表在所述第一线程和所述第二线程启动前初始化完毕,并开辟好2048个section数据块的缓存空间。
2.根据权利要求1所述的一种基于Android智能机顶盒的Loader方法,其特征在于,两个线程启动后,收数据线程不停将收到的section数据块存入开辟的空间中,并置标志位,如果预先开辟的缓存用完,则申请新的空间,大小为取section数据块占空间和1024字节中大者,并将section数据块存入,section数据处理线程则不停检查当前指向的item是否已经置位,如是,则处理当前item存放的section数据块,并指向下一个item存放的section数据块,如果item没有置位,说明暂时没有数据,暂停此线程10ms,然后继续检查处理过程。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210594801.6A CN103077057B (zh) | 2012-12-31 | 2012-12-31 | 一种基于Android智能机顶盒的Loader方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210594801.6A CN103077057B (zh) | 2012-12-31 | 2012-12-31 | 一种基于Android智能机顶盒的Loader方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103077057A true CN103077057A (zh) | 2013-05-01 |
CN103077057B CN103077057B (zh) | 2016-08-03 |
Family
ID=48153594
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210594801.6A Expired - Fee Related CN103077057B (zh) | 2012-12-31 | 2012-12-31 | 一种基于Android智能机顶盒的Loader方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103077057B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103677836A (zh) * | 2013-12-17 | 2014-03-26 | 康佳集团股份有限公司 | 在安卓系统中实现dvb-c数字电视的方法和终端 |
CN104424123A (zh) * | 2013-09-10 | 2015-03-18 | 中国石油化工股份有限公司 | 一种无锁数据缓冲区及其使用方法 |
CN105703945A (zh) * | 2016-01-08 | 2016-06-22 | 烽火通信科技股份有限公司 | 一种onu升级的方法 |
CN107330945A (zh) * | 2017-07-05 | 2017-11-07 | 合肥工业大学 | 一种基于视频的快速心率检测方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101179552A (zh) * | 2007-12-04 | 2008-05-14 | 中兴通讯股份有限公司 | 一种处理用户数据协议消息的方法及其系统 |
CN102541589A (zh) * | 2011-12-13 | 2012-07-04 | 四川长虹电器股份有限公司 | 一种机顶盒升级软件打包方法 |
US20120210331A1 (en) * | 2011-02-09 | 2012-08-16 | International Business Machines Corporation | Processor resource capacity management in an information handling system |
-
2012
- 2012-12-31 CN CN201210594801.6A patent/CN103077057B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101179552A (zh) * | 2007-12-04 | 2008-05-14 | 中兴通讯股份有限公司 | 一种处理用户数据协议消息的方法及其系统 |
US20120210331A1 (en) * | 2011-02-09 | 2012-08-16 | International Business Machines Corporation | Processor resource capacity management in an information handling system |
CN102541589A (zh) * | 2011-12-13 | 2012-07-04 | 四川长虹电器股份有限公司 | 一种机顶盒升级软件打包方法 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104424123A (zh) * | 2013-09-10 | 2015-03-18 | 中国石油化工股份有限公司 | 一种无锁数据缓冲区及其使用方法 |
CN103677836A (zh) * | 2013-12-17 | 2014-03-26 | 康佳集团股份有限公司 | 在安卓系统中实现dvb-c数字电视的方法和终端 |
CN103677836B (zh) * | 2013-12-17 | 2019-05-21 | 康佳集团股份有限公司 | 在安卓系统中实现dvb-c数字电视的方法和终端 |
CN105703945A (zh) * | 2016-01-08 | 2016-06-22 | 烽火通信科技股份有限公司 | 一种onu升级的方法 |
CN105703945B (zh) * | 2016-01-08 | 2019-04-16 | 烽火通信科技股份有限公司 | 一种onu升级的方法 |
CN107330945A (zh) * | 2017-07-05 | 2017-11-07 | 合肥工业大学 | 一种基于视频的快速心率检测方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103077057B (zh) | 2016-08-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8874892B1 (en) | Assessing BIOS information prior to reversion | |
US8840461B2 (en) | Game state synchronization and restoration across multiple devices | |
CN103077057A (zh) | 一种基于Android智能机顶盒的Loader方法 | |
US9106721B2 (en) | Application state synchronization across multiple devices | |
CN104133709B (zh) | 嵌入式系统的升级方法和装置 | |
CN105700926B (zh) | 差分升级包制作方法及装置、系统差分升级方法及装置 | |
CN107133063A (zh) | 一种定制化的软件升级方法及移动终端 | |
CN101841536B (zh) | 数字监控设备远程自动升级方法 | |
CN106371913A (zh) | 内存清理方法及装置 | |
CN109753297A (zh) | 终端待机时软件升级方法、装置及可读存储介质 | |
CN103941964B (zh) | 一种基于桌面组件的信息加载方法及智能终端 | |
CN104581397A (zh) | 安卓机顶盒的系统升级方法及装置 | |
CN105468410B (zh) | 系统升级方法及装置 | |
CN103593289A (zh) | 一种安卓机顶盒生产测试软件的设计方法 | |
CN111966311A (zh) | 云游戏的显示设置方法、装置、可读存储介质及设备 | |
CN106131646A (zh) | 一种基于Android系统的开机视频处理方法及系统 | |
EP4123983A1 (en) | Video stream playing control method and apparatus, and storage medium | |
CN103945264A (zh) | 一种机顶盒应用程序更新方法 | |
CN102890638A (zh) | 一种机顶盒升级方法 | |
CN106411883B (zh) | 一种节省流量的方法和省流量视频播放系统 | |
CN103491171A (zh) | 网络资源异步加载方法和装置 | |
CN102722392A (zh) | 软件运行方法和系统 | |
CN106851326A (zh) | 一种播放方法和装置 | |
CN109947450A (zh) | 系统文件升级方法、装置、移动终端及可读存储介质 | |
CN101742067A (zh) | 一种电视机主板在线升级的装置和方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20160803 Termination date: 20171231 |