Android手机视频编解码部件需求说明书v1.0_

合集下载

视频解码器 用户手册说明书

视频解码器 用户手册说明书

视频解码器用户手册资料版本:V1.04感谢您购买我们的产品。

使用时若遇到任何问题,请您及时和经销商联系。

声明注意:本产品的默认密码仅供首次登录使用,为保证安全,请您确保在首次登录后修改默认密码。

强烈建议您将密码设置为强密码,字符不小于9位。

•本手册中的产品外观图仅供参考,请以实物为准。

•截取的界面图仅当说明示例,各版本界面存在差异,请以实际界面为准。

•本手册能作为多个型号产品的使用指导,但不一一列举每个产品的使用情况,请您根据实际产品自行对照。

•本公司保留在没有任何通知或者提示的情况下对本手册的内容进行修改的权利,但并不确保手册内容完全没有错误。

•由于物理环境等不确定因素,部分数据的实际值可能与手册中提供的参考值存在偏差,如有任何疑问或争议,请以本公司最终解释为准。

•您使用产品过程中,请遵守本手册操作说明。

对于未按说明而引起的问题,我司恕不负责,感谢您的配合。

安全须知负责安装和日常维护本设备的人员必须具备安全操作基本技能。

在操作本设备前,请务必认真阅读和执行产品手册规定的安全规范。

•此为A级产品,在生活环境中,该产品可能会造成无线电干扰。

在这种情况下,可能需要用户对其干扰采取切实可行的措施。

•请确保设备安装平稳可靠,周围通风良好,设备在工作时必须确保通风口的畅通。

•使设备工作在允许的温度及湿度范围内,避免置于潮湿,多尘,极热,极冷,强电磁辐射、震动等场所。

•请确保环境电压稳定并符合设备供电要求,设备仅可在额定输入输出范围内使用,满足防雷要求,并良好接地。

•请保护电源软线免受踩踏或挤压,特别是在插头、电源插座和从装置引出的接点处。

•安装完成后请检查正确性,以免通电时由于连接错误造成人体伤害和设备部件损坏!•请勿自行拆开设备机箱盖上的防拆封条。

若您要拆封,请先与本公司当地代理商联系;否则,若擅自操作导致设备无法维护,本公司将不承担由此引起的所有后果,感谢您的配合!•异常断电会造成设备硬盘损坏或功能异常,若需对设备关机,请严格按手册说明进行操作。

视频解码器用户手册

视频解码器用户手册

RUN:设备运行指示灯 绿色,闪烁,表示设备运行正常
ACT:系统联机灯
亮:注册平台 灭:未注册平台
图 1 视频解码器前面板
视频输出接口
BNC,连接显示设备
音频输入接口
RCA,连接调音台或线 路设备等
10/100M 自适应以太网口
绿灯亮:接入以太网;黄灯 闪烁:以太网口有数据传输
电源输入口
请使用设备自带的电 源适配器
RS485 串口,现场控制,连接键盘等设备 通过网络控制台升级 148mm*94mm*29mm 390g

.2.
设备外观
设备外观
视频解码器用户手册
本手册涉及的视频解码器均采用黑色金属外壳,前面板有指示灯显示,后面板有各种外设的 接口。
视频解码器前后面板分别如下图所示。
公司 LOGO
温湿度及海拔高度要求
视频解码器对温湿度的要求如下表所示。如果安装环境无法达到下述要求,可采用安装防护 箱等措施保护设备。
工作时
温度 0℃~40℃
表 2 温湿度环境要求表
相对湿度
海拔高度
10%~85%(无凝结)
-60m~3000m
防静电防雷击要求 当静电和雷击超过一定限度时,会对电子设备造成一定的损害。 将设备的接地端子接地,并在要求的温湿度环境下使用设备,可以有效减小静电和雷击的损 害。 如果需要更好的防雷击效果,可以考虑采取安装避雷器等措施。
表 1 技术指标一览表
PAL MPEG-4、H.264 10/100M 自适应 支持 PPPoE 拨号、穿越 NAT 等
BNC 输出 RCA 单声道输入、MIC 输入
RCA 单声道输出 DC 12V

.1.
产品简介

网络视频解码器_使用说明书(N6平台NVS0404DH和NVS0104DH)V1.0.0_110815

网络视频解码器_使用说明书(N6平台NVS0404DH和NVS0104DH)V1.0.0_110815

本说明书仅供操作参考,遇到疑难问题请及时与公司客服部联系。 检查物品清单
小心打开包装盒,对照配件清单检查包装盒里面应包含的配件是否齐全,如有发现配件短缺或者损坏 的情况,请及时与经销商联系。
i
网络视频解码器
目录 目录
第一章 产品介绍 ------------------------------------------------------------------------------------------------------------------- - 1 1.1 产品概述 ----------------------------------------------------------------------------------------------------------------------- - 1 1.2 产品技术参数 ----------------------------------------------------------------------------------------------------------------- - 1 1.3 产品主要功能特性 ----------------------------------------------------------------------------------------------------------- - 2 第二章 网络视频解码器安装使用前期操作手册 --------------------------------------------------------------------------- - 4 -
网络视频解码器
使用说明书
网络视频解码器

SNView手机监控软件使用手册

SNView手机监控软件使用手册

SNView手机监控软件使用手册版本号:V1.0用户须知本手册是对SNView手机监控软件的使用及相关内容的说明,主要针对手机监控软件用户及其内部工作人员使用。

本手册适用于SNView软件,文中说明和图片均以Android手机操作系统为例,仅供参考,请以实际软件为准。

此外,我们将不定期对手册进行更新,恕不另行通知。

更新内容将直接编入新版说明书,同时会在公司网站下载中心提供最新版的说明书。

本手册可能包含技术上的不准确或印刷方面的错误,真诚地希望您能把意见及时反馈给我们,在以后的版本中,我们会加以充实或改进。

目录第1章软件介绍 (4)1.1软件概述 (4)1.2约定 (4)第2章软件配置与安装说明 (5)2.1软件环境 (5)2.2性能参数 (5)2.2软件安装 (5)2.3软件卸载 (7)第3章软件操作指南 (8)3.1软件运行 (8)3.2设备管理 (9)3.1.1以IP地址方式添加设备 (10)3.1.2以域名方式添加设备 (11)3.1.3设备切换、修改及删除 (14)3.3实时预览 (15)3.2.1普通预览 (15)3.2.1全屏预览 (16)3.2.1切换通道 (16)3.2.1抓拍图片 (17)3.4云台控制 (17)第4章FAQ (19)第1章软件介绍1.1软件概述SNView手机客户端软件是基于移动手持设备开发的一款监控软件,支持3G、2G、Wi-Fi 网络接入,实现对硬盘录像机、网络摄像机和网络球机的实时图像预览与云台控制等功能,使管理者可以通过互联网或局域网在自己的办公室或其他任意地点(不受地域限制)使用手机实时远程移动观看现场,并且能够抓拍实时预览画面和云台控制。

3G、2G、Wi-Fi数据连接需手机支持。

软件使用中可能会产生一定的数据流量费用,详情请咨询当地运营商。

1.2约定在本手册中为了简化描述,做以下约定:第2章软件配置与安装说明2.1软件环境本软件适用于Android(1.6或更高版本)、iPhone OS(3.0或更高版本)、Symbian OS S60第三版和Windows Mobile 6.5四种手机操作系统。

用户使用手册简版v1.0

用户使用手册简版v1.0

协同管理系统网上办公(OA系统)用户使用手册(简版v1.0)2015年03月【本文档仅限用户操作使用】目录一.安装配置 (3)1.客户端环境要求 (3)2.安装广讯通(PC端) (3)3.浏览器修复工具安装 (4)二.广讯通 (6)1.跨平台群组 (6)2.发送图片 (7)3.视频通讯 (8)4.模糊搜索 (8)5.远程协助 (8)6.群发消息 (9)7.收发文件 (9)8.微门户 (10)9.快速审批 (11)三.移动广讯通和移动平台 (12)1.移动平台及移动广讯通下载安装 (12)2.移动平台登录 (13)3.操作指南 (15)4.移动办公平台 (17)四.公文管理 (18)1.公文流转 (18)2.公文查询 (25)3.公文交换 (26)五.信息发布 (28)1.发布信息 (28)2.查看信息 (29)六.文档管理 (30)1.文档中心 (30)2.借阅审核 (32)七.通讯录 (32)1.组织通讯录 (33)2.外部通讯录 (33)3.个人通讯录 (33)八.任务中心 (34)1.草稿 (34)2.待办 (35)3.待阅 (35)4.已办 (35)5.已阅 (36)6.提交 (36)7.完成 (37)一.安装配置1.客户端环境要求操作系统:Win7/win8 推荐Win 7 最佳浏览器:IE8.0,IE9.0,IE10、IE11推荐IE 9.0或IE10 最佳移动终端系统:Android 2.1或更高版本、IOS6.0或更高版本( 不支持WP系统手机) 注意:下载、安装前请退出360安全卫士(如没有退出,安装过程中会弹出360禁止提示框,点击允许运行即可显示如下图:)2.安装广讯通(PC端)打开浏览器,输入新办公平台网址http://61.187.88.235:8888,点击[下载广讯通],下载后按照提示安装,直至安装完成,启动广讯通。

1)登录广讯通账号密码登录。

3.浏览器修复工具安装(请依据下图三个步骤操作)1 广讯通登陆后,切换至软件频道界面,点击[浏览器修复工具],会自动弹出浏览器修复工具下载界面,点击[下一步]安装即可:2 安装完成进入检测界面3 检测过程大约5分钟时间,修复完成显示如下图即可(过程中需安装java软件,点击安装即可)二.广讯通新版本广讯通提供了跨平台群组、发送图片、视频通讯、模糊查找、远程协助、群发消息、收发文件、微门户、快速审批等功能。

网络视频解码器 解码卡硬件说明说明书

网络视频解码器 解码卡硬件说明说明书

目录一、硬件说明 (4)1.1硬件参数介绍 (4)1.1.1网络视频解码器/解码卡参数介绍 (4)1.2、硬件接口介绍 (4)1.2.1接口板硬件接口介绍 (4)1.2.2解码板硬件接口介绍 (6)二、软件说明 (7)2.1内置web网页使用说明 (7)2.1.1 IE设置 (7)2.1.2系统登录 (8)2.1.3功能介绍 (9)三、键盘控制说明 (23)3.1 485键盘 (23)3.1.1透明通道 (23)3.1.2 PelcoP协议 (23)3.2网络键盘 (24)3.2.1键盘设置 (24)3.2.2设置键盘的IP地址 (24)3.2.3使用键盘控制解码器 (25)3.2.2按键说明 (26)免责声明●本手册可能包含不准确的地方、产品功能操作方面的不符情况、或印刷错误。

我司将根据产品功能的增强和变化而更新本手册内容,并定期改进更新本手册描述的软硬件产品。

更新的信息会在本手册的最新版本中体现,恕不另行通知●由于我司不断采用新技术,产品参数变化恕不另行通知。

●本手册仅为客户提供参考指导作用,并不保证和实物完全一致,实际应用以实物为准。

●本手册提到的部件、组件和附件不代表设备的标准配置,详细配置以装箱单为准。

●本手册的所有文字、表格及图片信息均受国家相关法律保护,未经许可不得私自转用。

●本手册的版权和最终解释权归本公司所有。

一、硬件说明1.1硬件参数介绍1.1.1网络视频解码器/解码卡参数介绍1.2、硬件接口介绍1.2.1接口板硬件接口介绍1~161.2.2解码板硬件接口介绍二、软件说明2.1内置web网页使用说明2.1.1 IE设置如果是第一次使用S系列网络视频产品,则需要下载ActiveX控件,下载前需要对IE浏览器做适当设置以确保成功下载控件。

注意:使用Windows操作系统自带的IE浏览器,确保版本在6.0以上,请不要使用任何第三方浏览器如Maxthon、FireFox等,我们不确保使用此类软件可以正常登录网络视频服务器。

Android用MediaCodec实现视频硬解码

Android用MediaCodec实现视频硬解码

Android⽤MediaCodec实现视频硬解码本⽂向你讲述如何⽤android标准的API (MediaCodec)实现视频的硬件编解码。

例程将从摄像头采集视频开始,然后进⾏H264编码,再解码,然后显⽰。

1、从摄像头采集视频可以通过摄像头Preview的回调,来获取视频数据。

⾸先创建摄像头,并设置参数:[java]01. cam = Camera.open();02. cam.setPreviewDisplay(holder);03. Camera.Parameters parameters = cam.getParameters();04. parameters.setFlashMode("off"); // ⽆闪光灯05. parameters.setWhiteBalance(Camera.Parameters.WHITE_BALANCE_AUTO);06. parameters.setSceneMode(Camera.Parameters.SCENE_MODE_AUTO);07. parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);08. parameters.setPreviewFormat(ImageFormat.YV12);09. parameters.setPictureSize(camWidth, camHeight);10. parameters.setPreviewSize(camWidth, camHeight);11. //这两个属性如果这两个属性设置的和真实⼿机的不⼀样时,就会报错12. cam.setParameters(parameters);宽度和⾼度必须是摄像头⽀持的尺⼨,否则会报错。

要获得所有⽀持的尺⼨,可⽤getSupportedPreviewSizes,这⾥不再累述。

视频解码器用户手册说明书

视频解码器用户手册说明书

Video DecoderUser Manual Manual Version:V1.00Thank you for purchasing our product. If there are any questions, or requests, please do not hesitate to contact the dealer.CopyrightCopyright 2016 Zhejiang Uniview Technologies Co., Ltd. All rights reserved. No part of this manual may be copied, reproduced, translated, or distributed in any form or by any means without prior consent in writing from our company.Trademark Acknowledgementand other Uniview's trademarks and logos are the property ofZhejiang Uniview Technologies Co., Ltd. Other trademarks, company names and product names contained in this manual are the property of their respective owners.DisclaimerCAUTION!The default password is used for your first login. To ensure account security, please change the password after your first login. You are recommended to set a strong password (no less than eight characters).●To the maximum extent permitted by applicable law, the productdescribed, with its hardware, software, firmware and documents, isprovided on an "as is" basis.●Best effort has been made to verify the integrity and correctness ofthe contents in this manual, but no statement, information, orrecommendation in this manual shall constitute formal guaranteeof any kind, expressed or implied. We shall not be held responsiblecontents of this manual are subject to change without prior notice.Update will be added to the new version of this manual.●Use of this manual and the product and the subsequent result shallbe entirely on the user's own responsibility. In no event shall we beliable for any special, consequential, incidental, or indirectdamages, including, among others, damages for loss of businessprofits, business interruption, or loss of data or documentation, orproduct malfunction or information leakage caused by cyber attack,hacking or virus in connection with the use of this product.●Video and audio surveillance can be regulated by laws that varyfrom country to country. Check the law in your local region beforeusing this product for surveillance purposes. We shall not be heldresponsible for any consequences resulting from illegal operationsof the device.●The illustrations in this manual are for reference only and may varydepending on the version or model. The screenshots in this manualmay have been customized to meet specific requirements and userpreferences. As a result, some of the examples and functionsfeatured may differ from those displayed on your monitor.●This manual is a guide for multiple product models and so it is notintended for any specific product.●Due to uncertainties such as physical environment, discrepancymay exist between the actual values and reference values providedin this manual. The ultimate right to interpretation resides in ourcompany.Environmental ProtectionThis product has been designed to comply with the requirements onenvironmental protection. For the proper storage, use and disposal ofthis product, national laws and regulations must be observed.Safety and Compliance InformationSafety SymbolsThe symbols in the following table may be found on installation-related equipment. Be aware of the situations indicated and take necessary safety precautions during equipment installation and maintenance.The symbols in the following table may be found in this manual.Carefully follow the instructions indicated by the symbols to avoid hazardous situations and use the product properly.Symbol DescriptionWARNING!Indicates a hazardous situation which, if not avoided, could result in bodily injury or death.CAUTION!Indicates a situation which, if not avoided, could result in damage, data loss or malfunction to product.NOTE!Indicates useful or supplemental information about the use of product.Safety InformationRead through the instructions carefully before starting installation and operation.Installation and maintenance must be performed by qualified●This device is a class A product and may cause radio interference.Take measures if necessary.●While shipping, the device should be packed in its original packing.●Disconnect power before installation and cable connection. Powerdown the device before connecting and disconnecting cables, accessories and peripherals.●Verify installation and cable connection are correct before use.Incorrect installation and connection may cause personal injury and device damage.●Protect the power cable from being stepped on or pressed,particularly at the plug, receptacle, and the part leading out of the device.●Follow the procedure to shut down the device properly. Use anUninterrupted Power Supply (UPS) if possible. Sudden power failures can cause disk damage or device malfunction.●Improper use or replacement of the battery may cause risk ofexplosion. Use the manufacturer recommended battery. Dispose of the used battery according to local regulations or the battery manufacturer's instructions. Never dispose of the battery in fire.●Ensure a proper operating environment, including temperature,humidity, ventilation, power supply, and lightning protection. Make sure the device is always properly grounded. Keep the device from dust, excessive vibration and strong electromagnetic radiation.●Do not use the device near water or expose to rain or moisture.Never spill liquid of any kind on the device. Never let liquid of any kind enter the device.●Never stare at the optical module or optical fiber connector duringoperation.●Take necessary measures to ensure data security and protect thedevice from network attack and hacking (when connected toInternet). Possible risks and consequences are at user's solediscretion.● Contact your dealer if the device does not work properly. Neverattempt to disassemble the device yourself. User shall assume allresponsibility for damage, loss, or injury caused by unauthorizedrepair or maintenance.WARNING!● Never look at the transmit laser while the power is on. Never look directly at the fiber ports and the fiber cable ends when they are powered on.●Use of controls or adjustments to the performance or procedures other than those specified herein may result in hazardous laser emissions.Regulatory ComplianceFCC Part 15This equipment has been tested and found to comply with the limits for digital device, pursuant to part 15 of the FCC Rules. These limits are designed to provide reasonable protection against harmful interference when the equipment is operated in a commercial environment. This equipment generates, uses, and can radiate radio frequency energy and, if not installed and used in accordance with the instruction manual, may cause harmful interference to radio communications. Operation of this equipment in a residential area is likely to cause harmful interference in which case the user will be required to correct the interference at his own expense.This product complies with Part 15 of the FCC Rules. Operation is subject1.This device may not cause harmful interference.2.This device must accept any interference received, includinginterference that may cause undesired operation.LVD/EMC DirectiveThis product complies with the European Low Voltage Directive 2006/95/EC and EMC Directive 2004/108/EC.WEEE Directive–2002/96/ECThe product this manual refers to is covered by the Waste Electrical & Electronic Equipment (WEEE) Directive and must be disposed of in a responsible manner.Contents1 Introduction (1)2 Login (1)3 Common Functions (2)4 Network (3)TCP/IP (3)Telnet (4)SNMP (5)5 Audio and Video (7)Audio (7)Video (8)Media Stream (8)6 Service (9)Image (9)Transparent Channel (11)7 System (12)User (12)Time (12)Management Platform (13)Serial Port (14)8 Maintenance (16)Maintenance (17)Device Status (17)Decoding Status (18)1 IntroductionThis manual describes how to manage the device on a Web browser.The figures in this manual are only for illustration purpose. Theparameters, options and values actually displayed on the Web pages ofyour device may be different from those in this manual.2 LoginBefore you start, check that:The device is operating properly.The computer is connected to the device.The computer is installed with Microsoft Internet Explorer (IE) 7.0 or higher, and no proxy server is being used.NOTE!●The default IP address of your device is 192.168.0.14; the defaultsubnet mask is 255.255.255.0; the default gateway is 192.168.0.1.●Use admin as the username and password for first-time login. Pleasechange the default password under System to ensure accountsecurity.Follow the steps to log in to the device:1.Enter the device's IP address in the address bar and then pressEnter.2.Log in with the correct username and password. The Commonpage is displayed to list the frequently used functions. For details,see Common Functions.3 Common FunctionsThe Common page lists functions that are frequently used to manage the device. The table below describes the meaning of the icons on this page.firmware version, network settings, and management mode.For more details, seethe screen, image resolution and refresh rate, and remainingdecoding capacity of the device. For more details, seeDecoding StatusSet network parameters such as IP address for the device.For more details, seeSet parameters required if the device is to be managed by amanagement platform (central server). For more details, seeManagement PlatformSet vidoe output parameters, including the number ofwindows that appear on the screen, image resolution andrefresh rate. For details, seeSet maintenance parameters. For details, see4 NetworkSet network settings include TCP/IP and Telnet so that the device can communicate with other devices on the network.TCP/IPAssign a static IP address manually, or obtain one using the DHCP server.1.Click Network > TCP/IP.2.Set the parameters. Some are described in the table below.3.Click Save.TelnetEnable Telnet if you want to access the device from a computer with Telnet. The username and password for Telnet are the one you use to access the device on a Web browser. If the password for Web access is changed, the Telnet password changes too. By default the admin username cannot be changed.1.Click Network > Telnet.2.Select the check box to enable Telnet, and then click Save. SNMPEnable Simple Network Management Protocol (SNMPv3) if the device operates in server mode (managed via a central server). Through SNMP the central server synchronizes audio/video channel configurations and some of the scheduled tasks to the device, and the device reports device alarms to the central server.1.Click Network > SNMP.2.Set the parameters. Some are described in the table below.5 Audio and VideoSet video, audio and media stream parameters. The major functionsprovided on the Video&Audio menu are listed in the table below.NOTE!●In standalone mode, all parameters under Video & Audio can beconfigured on the client computer.●In server mode, only Display Mode can be configured on the clientcomputer; other parameters can only be configured on the centralserver.AudioSelect the output channel and adjust the sound volume as needed.1.Click Audio & Video > Audio.2.Set the parameters and then click Save.VideoSelect the output channel and then set the number of windows on the screen, image resolution and refresh rate.1.Click Audio & Video > Video.2.Set the parameters and then click Save.Media StreamSet media stream parameters, including the stream source address and address format, so that the device can receive media streams from the connected cameras.1.Click Audio & Video > Media Stream.2.Set the parameters. Some are described in the table below.6 ServiceSet image parameters and a transparent channel as needed. The major functions provided on the Service menu are listed in the table below.ImageSet the image display ratio, width and color of the divider line on the screen, and crop images as needed.1.Click Service > Image.2.Set the parameters. Some are described in the table below.Transparent ChannelSet the transparent channel to transfer video and audio signals through a serial port.1.Click Service > Transparent Channel.2.Set the parameters. Some are described in the table below.7 SystemSet system parameters, including the user password, system time, system language, management platform, and serial port.UserChange the default password to a strong one (at least 8 digits) after your first login. It is also recommended that you change the password periodically to ensure account security.1.Click System > User.2.Enter the old and new passwords.3.Click Save.TimeSet system time for your device and how the time is updated.1.Click System > Time.2.Set the parameters. Some are described in the table below.NOTE!The device synchronizes time with the central server when operating in server mode.Management PlatformConfigure the management platform only when the device operates inserver mode (managed by a central server).1.Click System > Platform.2.Select Connect to Platform.3.Set the parameters. Some are described in the table below.4.Click Save.Serial PortSet the serial port on the device, including the port type, baud rate, parity check, and flow control method.1.Click System > Serial Port.2.Select the desired port and then set parameters accordingly. Theparameters displayed vary with the serial port selected. Thefigure below shows the parameters displayed when COM 1isselected.The figure below shows the parameters displayed when COM 2is selected.3.Some parameters are described in the table below.NOTE!In server mode, only Duplex can be configured on the Web browser, and all the other parameters can be configured only on the central server. 8 MaintenanceThe major functions provided on the Maintenance menu are listed inthe table below.MaintenanceClick Maintenance> Maintenance and then perform maintenance operations as needed. You can restart the device, restore some factory default settings, import and export configuration files, export logs, and upgrade the device.Device StatusClick Maintenance> Device Status to view basic information of the device, its network settings and operation status. The following shows an example.Decoding StatusClick Maintenance> Decoding Status to view decoding status, including the output channel, number of windows on the screen, image resolution and refresh rate, remaining decoding capacity, and stream source address. The following shows an example.。

音视频编解码_V1.0

音视频编解码_V1.0

音视频编解码基础知识详解1、概述音视频技术主要包含以下几点:封装技术,视频压缩编码技术以及音频压缩编码技术。

播放器播放一个互联网上的音视频文件,需要经过以下几个步骤:解协议,解封装,解码视音频,视音频同步。

如果播放本地文件则不需要解协议,为以下几个步骤:解封装,解码视音频,视音频同步。

其过程如图所示。

解协议的作用,就是将流媒体协议的数据,解析为标准的相应的封装格式数据。

视音频在网络上传播的时候,常常采用各种流媒体协议,例如HTTP,RTMP,或是MMS等等。

这些协议在传输视音频数据的同时,也会传输一些信令数据。

这些信令数据包括对播放的控制(播放,暂停,停止),或者对网络状态的描述等。

解协议的过程中会去除掉信令数据而只保留视音频数据。

例如,采用RTMP协议传输的数据,经过解协议操作后,输出FLV格式的数据。

解封装的作用,就是将输入的封装格式的数据,分离成为音频流压缩编码数据和视频流压缩编码数据。

封装格式种类很多,例如MP4,MKV,RMVB,TS,FLV,AVI等等,它的作用就是将已经压缩编码的视频数据和音频数据按照一定的格式放到一起。

例如,FLV格式的数据,经过解封装操作后,输出H.264编码的视频码流和AAC编码的音频码流。

解码的作用,就是将视频/音频压缩编码数据,解码成为非压缩的视频/音频原始数据。

音频的压缩编码标准包含AAC,MP3,AC-3等等,视频的压缩编码标准则包含H.264,MPEG2,VC-1等等。

解码是整个系统中最重要也是最复杂的一个环节。

通过解码,压缩编码的视频数据输出成为非压缩的颜色数据,例如YUV420P,RGB等等;压缩编码的音频数据输出成为非压缩的音频抽样数据,例如PCM数据。

视音频同步的作用,就是根据解封装模块处理过程中获取到的参数信息,同步解码出来的视频和音频数据,并将视频音频数据送至系统的显卡和声卡播放出来。

2、常用的基本知识2.1 基本概念2.1.1 编解码编解码器(codec)指的是一个能够对一个信号或者一个数据流进行变换的设备或者程序。

mediacodec使用方法

mediacodec使用方法

mediacodec使用方法MediaCodec是Android平台上用于实时的音视频编解码的API。

通过使用MediaCodec,开发者可以高效地对音视频数据进行编解码操作,实现音视频的录制、播放、编解码等功能。

一、MediaCodec简介MediaCodec是Android提供的一个多媒体编解码器,它允许开发者对音频和视频进行编解码操作,是实现音视频处理的重要组件之一。

MediaCodec提供了硬件加速的选项,可以提高音视频编解码的性能,减少CPU的负载。

同时,它也支持软件编解码,适用于不支持硬件加速的平台。

二、MediaCodec的基本概念1. 编码器(Encoder):将原始的音视频数据压缩成特定格式的编码器,如将PCM音频编码为AAC格式。

2. 解码器(Decoder):将已经编码的音视频数据解压缩还原为原始的数据格式,如将AAC音频解码为PCM格式。

3. 媒体格式(MediaFormat):用于描述音视频数据的格式,包括媒体类型(音频或视频)、采样率、位宽、编码器名称等。

4. 输入缓冲区(Input Buffer):用于存储待编码的音视频数据,在编码之前需要将数据填充到输入缓冲区。

5. 输出缓冲区(Output Buffer):用于存储编码后或解码后的音视频数据,在编解码完成后可以从输出缓冲区获取数据。

三、使用MediaCodec进行音视频编码以下是使用MediaCodec进行音视频编码的步骤:1. 创建一个MediaCodec实例:调用MediaCodec.createEncoderByType()方法或MediaCodec.createDecoderByType()方法创建一个编码器或解码器实例。

传入媒体类型参数,如"audio/mp4a-latm"表示AAC音频编码器。

2. 配置编码器或解码器:配置媒体格式(MediaFormat),包括音频采样率、位宽、声道数等信息。

android mediacodec 用法

android mediacodec 用法

android mediacodec 用法Android Mediacodec 是Android 提供的一个用于音视频编解码的API,它可以让开发者在自己的应用程序中直接使用硬件加速的编解码器来进行音视频处理。

本文将以"Android Mediacodec 用法"为主题,详细介绍Mediacodec的使用方法。

一、什么是Android MediacodecAndroid Mediacodec 是Android 系统提供的一个多媒体编解码库,它可以让开发者使用硬件加速的编解码器来处理音频和视频数据。

相比于传统的软件编解码方式,Mediacodec 在性能上有很大的提升,能够更好地满足应用程序对音视频处理的需求。

二、Mediacodec 的基本使用步骤在开始使用Mediacodec 之前,首先需要了解一下Mediacodec 的基本使用步骤。

下面是Mediacodec 的基本使用步骤:1. 创建Mediacodec 对象:使用Mediacodec 的静态方法`createDecoderByType` 或`createEncoderByType` 来创建一个Mediacodec 对象。

需要传入一个String 类型的参数,表示要使用的编解码器的类型,例如"video/avc" 表示使用H.264 编解码器。

2. 配置Mediacodec:在创建Mediacodec 对象之后,需要通过调用`configure` 方法来配置Mediacodec。

需要传入一个MediaFormat 对象,该对象需要指定各种参数,例如输入数据的格式、输出数据的格式、编码码率等等。

3. 启动Mediacodec:在配置Mediacodec 完成之后,调用`start` 方法来启动Mediacodec。

4. 处理输入数据:使用Mediacodec 的`dequeueInputBuffer` 方法获取一个可以用于填充输入数据的ByteBuffer 对象,并将音视频数据填充到ByteBuffer 中。

mediacodec configure参数

mediacodec configure参数

【导言】在Android开发中,mediacodec是一个用于音视瓶编解码的重要类,通过对其configure参数进行合理配置可以提高音视瓶编解码的效率和质量。

本文将对mediacodec configure参数的相关知识进行详细介绍,帮助读者更好地理解和使用mediacodec类。

【正文】1. mediacodec概述在Android开发中,mediacodec是一个用于音视瓶编解码的重要类,可以实现对音视瓶数据的硬件加速编解码。

通过mediacodec,开发者可以在Android设备上更加高效地完成音视瓶编解码任务,提高应用的性能和用户体验。

2. mediacodec configure参数在使用mediacodec进行音视瓶编解码时,configure参数的合理配置是非常重要的。

configure参数可以影响音视瓶编解码的效率、质量和稳定性,因此开发者需要对其进行深入了解和合理设置。

3. configure参数的类型在mediacodec中,configure参数主要分为input参数和output 参数两种类型。

input参数用于配置输入流的相关参数,包括音视瓶数据的格式、编码方式、采样率等。

通过合理设置input参数,可以使mediacodec更好地理解和处理输入的音视瓶数据。

output参数用于配置输出流的相关参数,包括编解码后的音视瓶数据的格式、采样率、码率等。

通过合理设置output参数,可以使mediacodec更好地输出符合应用需求的音视瓶数据。

4. configure参数的常见配置方法在实际开发中,开发者可以根据自己的需求,对configure参数进行不同的设置。

常见的配置方法包括:(1)设置音视瓶数据的格式和编码方式。

在configure参数中,开发者可以指定音视瓶数据的格式和编码方式,以确保mediacodec能够正确地解析和处理输入的音视瓶数据。

(2)设置音视瓶数据的采样率和码率。

android 使用MediaCodec 编解码总结

android 使用MediaCodec 编解码总结

android 使用MediaCodec 编解码总结本文将主要介绍在安卓中调用MediaCodec类实现视频文件的硬解码,以及如何将以byte[]类型存储的图像数据通过硬编码合成视频文件。

1.MediaCodec类的编解码原理参考链接:https:///reference/android/media/M ediaCodec.html工作流是这样的:以编码为例,首先要初始化硬件编码器,配置要编码的格式、视频文件的长宽、码率、帧率、关键帧间隔等等。

这一步叫configure。

之后开启编码器,当前编码器便是可用状态,随时准备接收数据。

下一个过程便是编码的running过程,在此过程中,需要维护两个buffer队列,InputBuffer 和OutputBuffer,用户需要不断出队InputBuffer (即dequeueInputBuffer),往里边放入需要编码的图像数据之后再入队等待处理,然后硬件编码器开始异步处理,一旦处理结束,他会将数据放在OutputBuffer中,并且通知用户当前有输出数据可用了,那么用户就可以出队一个OutputBuffer,将其中的数据拿走,然后释放掉这个buffer。

结束条件在于end-of-stream这个flag标志位的设定。

在编码结束后,编码器调用stop函数停止编码,之后调用release 函数将编码器完全释放掉,整体流程结束。

2. 视频解码程序示例代码来源于Android: MediaCodec视频文件硬件解码以下所有代码可以在此处下载[java] view plain copyprint?package com.example.guoheng_iri.helloworld;import android.graphics.ImageFormat;import android.graphics.Rect;import android.graphics.YuvImage;import android.media.Image;import android.media.MediaCodec;import android.media.MediaCodecInfo;import android.media.MediaExtractor;import android.media.MediaFormat;import android.util.Log;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.nio.ByteBuffer;import java.util.concurrent.LinkedBlockingQueue;public class VideoDecode {private static final String TAG = "VideoToFrames";private static final boolean VERBOSE = true;private static final long DEFAULT_TIMEOUT_US = 10000;private static final int COLOR_FormatI420 = 1;private static final int COLOR_FormatNV21 = 2;public static final int FILE_TypeI420 = 1;public static final int FILE_TypeNV21 = 2;public static final int FILE_TypeJPEG = 3;private final int decodeColorFormat = MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV4 20Flexible;private int outputImageFileType = -1;private String OUTPUT_DIR;public int ImageWidth=0;public int ImageHeight=0;MediaExtractor extractor = null;MediaCodec decoder = null;MediaFormat mediaFormat;public void setSaveFrames(String dir, int fileType) throws IOException {if (fileType != FILE_TypeI420 && fileType != FILE_TypeNV21 && fileType != FILE_TypeJPEG) {throw new IllegalArgumentException("only support FILE_TypeI420 " + "and FILE_TypeNV21 " + "and FILE_TypeJPEG");}outputImageFileType = fileType;File theDir = new File(dir);if (!theDir.exists()) {theDir.mkdirs();} else if (!theDir.isDirectory()) {throw new IOException("Not a directory");}OUTPUT_DIR = theDir.getAbsolutePath() + "/";}public void VideoDecodePrepare(String videoFilePath) {extractor = null;decoder = null;try {File videoFile = new File(videoFilePath);extractor = new MediaExtractor();extractor.setDataSource(videoFile.toString());int trackIndex = selectTrack(extractor);if (trackIndex < 0) {throw new RuntimeException("No video track found in " + videoFilePath);}extractor.selectTrack(trackIndex);mediaFormat =extractor.getTrackFormat(trackIndex);String mime =mediaFormat.getString(MediaFormat.KEY_MIME);decoder =MediaCodec.createDecoderByType(mime);showSupportedColorFormat(decoder.getCodecInfo().getC apabilitiesForType(mime));if(isColorFormatSupported(decodeColorFormat, decoder.getCodecInfo().getCapabilitiesForType(mime))) {mediaFormat.setInteger(MediaFormat.KEY_COLOR_FOR MAT, decodeColorFormat);Log.i(TAG, "set decode color format to type " + decodeColorFormat);} else {Log.i(TAG, "unable to set decode color format, color format type " + decodeColorFormat + " not supported");}decoder.configure(mediaFormat, null, null, 0);decoder.start();} catch (IOException ioe) {throw new RuntimeException("failed init encoder", ioe);}}public void close() {decoder.stop();decoder.release();if (extractor != null) {extractor.release();extractor = null;}}public void excuate(){try {decodeFramesToImage(decoder, extractor, mediaFormat);}finally {// release encoder, muxer, and input Surfaceclose();}}private voidshowSupportedColorFormat(MediaCodecInfo.CodecCapabilities caps) {System.out.print("supported color format: ");for (int c : caps.colorFormats) {System.out.print(c + "\t");}System.out.println();}private boolean isColorFormatSupported(int colorFormat, MediaCodecInfo.CodecCapabilities caps) { for (int c : caps.colorFormats) {if (c == colorFormat) {return true;}}return false;}public void decodeFramesToImage(MediaCodec decoder, MediaExtractor extractor, MediaFormat mediaFormat) {MediaCodec.BufferInfo info = newMediaCodec.BufferInfo();boolean sawInputEOS = false;boolean sawOutputEOS = false;final int width =mediaFormat.getInteger(MediaFormat.KEY_WIDTH);final int height =mediaFormat.getInteger(MediaFormat.KEY_HEIGHT);ImageWidth=width;ImageHeight=height;int outputFrameCount = 0;while (!sawOutputEOS) {if (!sawInputEOS) {int inputBufferId =decoder.dequeueInputBuffer(DEFAULT_TIMEOUT_US);if (inputBufferId >= 0) {ByteBuffer inputBuffer = decoder.getInputBuffer(inputBufferId);int sampleSize =extractor.readSampleData(inputBuffer, 0); //将一部分视频数据读取到inputbuffer中,大小为sampleSizeif (sampleSize < 0) {decoder.queueInputBuffer(inputBufferId, 0, 0, 0L, MediaCodec.BUFFER_FLAG_END_OF_STREAM);sawInputEOS = true;} else {long presentationTimeUs = extractor.getSampleTime();decoder.queueInputBuffer(inputBufferId, 0, sampleSize, presentationTimeUs, 0);extractor.advance(); //移动到视频文件的下一个地址}}}int outputBufferId =decoder.dequeueOutputBuffer(info,DEFAULT_TIMEOUT_US);if (outputBufferId >= 0) {if ((info.flags &MediaCodec.BUFFER_FLAG_END_OF_STREAM) != 0) {sawOutputEOS = true;}boolean doRender = (info.size != 0);if (doRender) {outputFrameCount++;Image image =decoder.getOutputImage(outputBufferId);System.out.println("image format: " + image.getFormat());if (outputImageFileType != -1) {String fileName;switch (outputImageFileType) {case FILE_TypeI420:fileName = OUTPUT_DIR +String.format("frame_%05d_I420_%dx%d.yuv", outputFrameCount, width, height);dumpFile(fileName, getDataFromImage(image, COLOR_FormatI420));break;case FILE_TypeNV21:fileName = OUTPUT_DIR +String.format("frame_%05d_NV21_%dx%d.yuv", outputFrameCount, width, height);dumpFile(fileName, getDataFromImage(image, COLOR_FormatNV21));break;case FILE_TypeJPEG:fileName = OUTPUT_DIR + String.format("frame_%05d.jpg", outputFrameCount);compressToJpeg(fileName, image);break;}}image.close();decoder.releaseOutputBuffer(outputBufferId, true);}}}}private static int selectTrack(MediaExtractor extractor) {int numTracks = extractor.getTrackCount();for (int i = 0; i < numTracks; i++) {MediaFormat format =extractor.getTrackFormat(i);String mime =format.getString(MediaFormat.KEY_MIME);if (mime.startsWith("video/")) {if (VERBOSE) {Log.d(TAG, "Extractor selected track " + i + " (" + mime + "): " + format);}return i;}}return -1;}private static booleanisImageFormatSupported(Image image) {int format = image.getFormat();switch (format) {case ImageFormat.YUV_420_888:case ImageFormat.NV21:case ImageFormat.YV12:return true;}return false;}public static byte[] getGrayFromData(Image image, int colorFormat) {if (colorFormat != COLOR_FormatI420&& colorFormat != COLOR_FormatNV21) {throw new IllegalArgumentException("only support COLOR_FormatI420 " + "andCOLOR_FormatNV21");}if (!isImageFormatSupported(image)) {throw new RuntimeException("can't convert Image to byte array, format " + image.getFormat());}Image.Plane[] planes = image.getPlanes();int i = 0;ByteBuffer buffer = planes[i].getBuffer();byte[] data = new byte[buffer.remaining()];buffer.get(data, 0, data.length);if (VERBOSE) Log.v(TAG, "Finished reading data from plane " + i);return data;}public static byte[] getDataFromImage(Image image, int colorFormat) {if (colorFormat != COLOR_FormatI420&& colorFormat != COLOR_FormatNV21) {throw new IllegalArgumentException("only support COLOR_FormatI420 " + "andCOLOR_FormatNV21");}if (!isImageFormatSupported(image)) {throw new RuntimeException("can't convert Image to byte array, format " + image.getFormat());}Rect crop = image.getCropRect();int format = image.getFormat();int width = crop.width();int height = crop.height();Image.Plane[] planes = image.getPlanes();byte[] data = new byte[width * height * ImageFormat.getBitsPerPixel(format) / 8];byte[] rowData = newbyte[planes[0].getRowStride()];int channelOffset = 0;int outputStride = 1;for (int i = 0; i < planes.length; i++) {switch (i) {case 0:channelOffset = 0;outputStride = 1;break;case 1:if (colorFormat ==COLOR_FormatI420) {channelOffset = width * height;outputStride = 1;} else if (colorFormat ==COLOR_FormatNV21) {channelOffset = width * height ;outputStride = 2;}break;case 2:if (colorFormat ==COLOR_FormatI420) {channelOffset = (int) (width * height * 1.25);outputStride = 1;} else if (colorFormat =。

移动 DRM 播放器 v1.0 用户使用说明书

移动 DRM 播放器 v1.0 用户使用说明书

Mobile DRM Player V1.0 用户使用说明书河南科技大学2013年5月Mobile DRM Player V1.0系统简介随着移动互联网络传输速度的不断提升,以及手机、PDA等移动终端设备性能的不断提高,用户利用手机等移动设备下载并体验音视频数字内容进行娱乐活动更加普遍。

与此同时,原本只在PC机上突出存在的“数字内容易于无损复制和分发”等版权保护问题,在移动终端设备上也逐渐显现出来。

本系统针对移动终端上的音视频数字版权保护问题,选取目前移动终端市场占有率最高的Android系统为目标平台,GUI采用JA V A语言开发,环境为Windows下Android SDK +ADT +Eclipse;播放器内核采用C/C++语言开发,环境为Linux下Android源码编译所需的GCC等工具。

最终在Android平台上实现了基于数字许可证的音视频内容与数字权利分离发送机制,满足了移动终端Android平台上音视频授权使用控制与数字版权保护的目的,且系统运行稳定,人机界面友好和易用。

系统基本环境1)移动终端基本硬件配置:CPU 1G,320MB ROM+512MB RAM,扩展32GB,支持Java扩展2)移动终端操作系统:Android OS 2.1以上平台系统功能说明1.播放器启动时的欢迎界面2. 软件启动后进入音乐播放列表(1)用TabHost 将播放列表按音乐列表与视频列表分开显示。

左标签是音乐播放列表,右标签是视频播放列表。

(2)列表显示音视频内容的部分信息和用户对该音视频所拥有的权限信息,用户可根据该信息判断本机是否能够播放该音视频。

(3)按中快捷菜单按钮,会弹出快捷菜单,包括四项功能:更新列表、SD卡信息、歌曲排序、退出。

(4)实时更新播放列表功能:实时更新SD 卡中文件的变更情况。

(5)SD 卡查询功能:查询SD 卡空间的使用情况。

(6)歌曲排序功能:支持对播放列表进行各种排序。

Android音视频编解码

Android音视频编解码

Android音视频编解码Android 音视频编解码ubuntu下ndk编译ffmpeg0.8.1ffmpeg最新版本有些问题,比如jni/liblibavcodec/ac3enc_combined.c在最新的版本中已经没有了,但是又多了一个ac3enc_template.c的文件。

虽然更新版本对于开发人员可以使用到更多的功能,但是如果这样乱改的话真的好无语,非常讨厌这种更新版本的不一致性,唉,只是抱怨一下我使用的还是稍微老一点的版本ffmpeg 0.8.1的,至少老的版本能搜到更多的资料,也比较稳定。

ffmpeg版本:ffmpeg 0.8.1(最新版本是0.10,但是有很多问题)NDK版本:ndk r6(ndk r7编译的话会出现各种错误)机器:32位系统:ubuntu注意:ndk r6+ffmpeg0.8.1+Android.mk+config.sh是经过测试过的,可以生成。

如果你用的其他版本的会出现各种问题前提:需要你配置好NDK的环境,还是说说吧一、下载并配置NDK环境变量(ubuntu下,windows下请使用cygwin)1、到/sdk/ndk/index.html下载NDK这里,ndk r6版本的下载地址是:/android/ndk/android-ndk-r6-linux-x86.tar.bz22、解压包到/home/loulijun/android/目录下3、$vim ~/.bashrc 在里面添加如下信息export NDK=/home/loulijun/android/android-ndk-r6107 export PATH=${PATH}:$NDK4、$source ~/.bashrc 使其生效注意:最新r7版本出现了一个关于awk问题,这个awk是64位的,所以如果你是32位机会遇到,具体解决办法见我的上篇博客:/loulijun/archive/2012/02/26/2368 787.html二、下载ffmpeg源码包如果你想下载ffmpeg0.8.1版本(老版本),请点击这里:/releases/ffmpeg-0.8.1.tar.gz如果你想下载最新版本,可以到/download.html下载使用$git clone git:///ffmpeg.git ffmpeg但是下载后的虽然是最新且纯净的代码,可能Android.mk文件与之不完全匹配,如果非要用最新版本的话最好修改一下Android.mk吧(工作量有点大)三、配置ffmpeg环境可以系统目录下创建一个用于存放ffmpeg的目录,假如我们全部操作都在~/mywork/ndk/ffmpeg/目录下,将下载好的ffmpeg源码放在ffmpeg目录下,并改目录名字为jni(名字必须位jni,否则会出现如下的错误)。

Android最简单的视频播放器之MediaCodec硬件解码器封装(二)

Android最简单的视频播放器之MediaCodec硬件解码器封装(二)

Android最简单的视频播放器之MediaCodec硬件解码器封装(⼆)⼀、概述 MediaCodec是Android提供的硬件编解码器API,根据此api⽤户可以对媒体格式的⽂件执⾏编解码。

其单独没法⼯作还需要配合上⼀节介绍的 案例:本例最主要的是三个类,分别是BaseDecoder.java 、AudioDecoder、VideoDecoder.java即⾳视频解码类实例⼆、代码实例 1.BaseDecoder.java:硬件解码器基类import android.media.MediaCodec;import android.media.MediaFormat;import android.util.Log;import com.yw.thesimpllestplayer.extractor.IExtractor;import java.io.File;import java.nio.ByteBuffer;/*** @ProjectName: TheSimpllestplayer* @Package: com.yw.thesimpllestplayer.mediaplayer.decoder* @ClassName: BaseDecoder* @Description: 硬件解码器基类* @Author: wei.yang* @CreateDate: 2021/11/6 10:32* @UpdateUser: 更新者:wei.yang* @UpdateDate: 2021/11/6 10:32* @UpdateRemark: 更新说明:* @Version: 1.0*/public abstract class BaseDecoder implements IDecoder {private String filePath = null;public BaseDecoder(String filePath) {this.filePath = filePath;}private static final String TAG = "BaseDecoder";//-------------线程相关------------------------/*** 解码器是否在运⾏*/private boolean mIsRunning = true;/*** 线程等待锁*/private Object mLock = new Object();/*** 是否可以进⼊解码*/private boolean mReadyForDecode = false;//---------------状态相关-----------------------/*** ⾳视频解码器(硬件解码器)*/private MediaCodec mCodec = null;/*** ⾳视频数据读取器*/private IExtractor mExtractor = null;/*** 解码输⼊缓存区*/private ByteBuffer[] mInputBuffers = null;/*** 解码输出缓存区private ByteBuffer[] mOutputBuffers = null;/*** 解码数据信息*/private MediaCodec.BufferInfo mBufferInfo = new MediaCodec.BufferInfo(); /*** 初始化解码状态*/private DecodeState mState = DecodeState.STOP;/*** 解码状态回调*/protected IDecoderStateListener mStateListener;/*** 流数据是否结束*/private boolean mIsEOS = false;/*** 视频宽度*/private int mVideoWidth = 0;/*** 视频⾼度*/private int mVideoHeight = 0;/*** 视频时长*/private long mDuration = 0;/*** 视频结束时间*/private long mEndPos = 0;/*** 开始解码时间,⽤于⾳视频同步*/private long mStartTimeForSync = -1L;/*** 是否需要⾳视频渲染同步*/private boolean mSyncRender = true;@Overridepublic void pause() {mState = DecodeState.PAUSE;}@Overridepublic void goOn() {mState = DecodeState.DECODING;notifyDecode();}@Overridepublic long seekTo(long pos) {return0;}@Overridepublic long seekAndPlay(long pos) {return0;}@Overridepublic void stop() {mState = DecodeState.STOP;mIsRunning = false;notifyDecode();}@Overridepublic boolean isDecoding() {return mState == DecodeState.DECODING;}@Overridepublic boolean isSeeking() {return mState == DecodeState.SEEKING;}@Overridereturn mState == DecodeState.STOP;}@Overridepublic int getWidth() {return mVideoWidth;}@Overridepublic int getHeight() {return mVideoHeight;}@Overridepublic long getDuration() {return mDuration;}@Overridepublic long getCurTimeStamp() {return mBufferInfo.presentationTimeUs / 1000;}@Overridepublic int getRotationAngle() {return0;}@Overridepublic MediaFormat getMediaFormat() {return mExtractor.getFormat();}@Overridepublic int getTrack() {return0;}@Overridepublic String getFilePath() {return filePath;}@Overridepublic IDecoder withoutSync() {mSyncRender = false;return this;}@Overridepublic void setSizeListener(IDecoderProgress iDecoderProgress) {}@Overridepublic void setStateListener(IDecoderStateListener iDecoderStateListener) { this.mStateListener = iDecoderStateListener;}@Overridepublic void run() {//解码开始时改变解码状态if (mState == DecodeState.STOP) {mState = DecodeState.START;}if (mStateListener != null) {mStateListener.decoderPrepare(this);}//初始化并启动解码器,如果解码失败则暂停线程if (!init()) return;//开始解码Log.e(TAG, "开始解码");try {while (mIsRunning) {//循环解码渲染if (mState != DecodeState.START &&mState != DecodeState.DECODING &&mState != DecodeState.SEEKING) {Log.i(TAG, "进⼊等待:" + mState);//解码进⼊等待waitDecode();// ---------【同步时间矫正】-------------//当前系统时间减去bufferinfo中的时间=等待解码流失的时间mStartTimeForSync = System.currentTimeMillis() - getCurTimeStamp(); }//停⽌解码,就直接退出循环了if (!mIsRunning ||mState == DecodeState.STOP) {mIsRunning = false;break;}//更新开始解码时间if (mStartTimeForSync == -1L) {mStartTimeForSync = System.currentTimeMillis();}//如果数据没有解码完毕,将数据推⼊解码器解码if (!mIsEOS) {//【解码步骤:2. 见数据压⼊解码器输⼊缓冲】mIsEOS = pushBufferToDecoder();}//将解码后的数据从缓冲区中拉取出来int outputBufferIndex = pullBufferFromDecoder();if (outputBufferIndex >= 0) {// ---------【⾳视频同步】-------------if (mSyncRender && mState == DecodeState.DECODING) {sleepRender();}//渲染if (mSyncRender) {render(mOutputBuffers[outputBufferIndex], mBufferInfo);}//将解码数据传出去Frame frame = new Frame();frame.buffer = mOutputBuffers[outputBufferIndex];frame.setBufferInfo(mBufferInfo);if (mStateListener != null) {mStateListener.decodeOneFrame(this, frame);}//释放输出缓冲mCodec.releaseOutputBuffer(outputBufferIndex, true);if (mState == DecodeState.START) {mState = DecodeState.PAUSE;}}//判断是否解码完成if (mBufferInfo.flags == MediaCodec.BUFFER_FLAG_END_OF_STREAM) { Log.e(TAG, "解码结束");mState = DecodeState.FINISH;if (mStateListener != null) {mStateListener.decoderFinish(this);}}}} catch (Exception e) {e.printStackTrace();} finally {finishDecode();release();}}/*** 初始化解码器,如果初始化失败则停⽌解码** @return*/private boolean init() {//如果⽂件路径不存在或者⽂件路径指定的⽂件为空if (filePath == null || !new File(filePath).exists()) {Log.e(TAG, "⽂件路径异常");if (mStateListener != null) {mStateListener.decoderError(this, "⽂件路径为空");}return false;}if (!check()) return false;//初始化数据提取器mExtractor = initExtractor(filePath);if (mExtractor == null || mExtractor.getFormat() == null) {Log.e(TAG, "⽆法解析⽂件");if (mStateListener != null) {mStateListener.decoderError(this, "⽆法解析⽂件");return false;}//初始化参数if (!initParams()) return false;//初始化渲染器if (!initRender()) return false;//初始化解码器if (!initCodec()) return false;return true;}/*** 初始化媒体时长及初始化媒体参数** @return*/private boolean initParams() {try {MediaFormat format = mExtractor.getFormat();mDuration = format.getLong(MediaFormat.KEY_DURATION) / 1000;if (mEndPos == 0L) mEndPos = mDuration;initSpecParams(format);} catch (Exception e) {e.printStackTrace();Log.e(TAG, "提取媒体⽂件时长或者初始化媒体参数失败:" + e.getMessage());if (mStateListener != null) {mStateListener.decoderError(this, "提取媒体⽂件时长或者初始化媒体参数失败"); }return false;}return true;}private boolean initCodec() {try {//获取媒体类型String mimeType = mExtractor.getFormat().getString(MediaFormat.KEY_MIME);//创建解码器mCodec = MediaCodec.createDecoderByType(mimeType);//配置解码器if (!configCodec(mCodec, mExtractor.getFormat())) {//解码线程进⼊等待waitDecode();}//开始解码mCodec.start();//从缓冲区中去取输⼊缓冲mInputBuffers = mCodec.getInputBuffers();//从缓冲区中取出输出缓冲mOutputBuffers = mCodec.getOutputBuffers();} catch (Exception e) {e.printStackTrace();return false;}return true;}/*** 解码线程进⼊等待*/private void waitDecode() {try {if (mState == DecodeState.PAUSE) {if (mStateListener != null) {mStateListener.decoderPause(this);}}synchronized (mLock) {mLock.wait();}} catch (Exception e) {e.printStackTrace();}}/*** 通知解码线程继续运⾏*/protected void notifyDecode() {synchronized (mLock) {mLock.notifyAll();if (mState == DecodeState.DECODING) {if (mStateListener != null) {mStateListener.decoderRunning(this);}}}/*** 向缓冲区中压缩解码前的数据** @return*/private boolean pushBufferToDecoder() {//从缓冲区中获取⼀个bufferindexint inputBufferIndex = mCodec.dequeueInputBuffer(1000);boolean isEndOfStream = false;if (inputBufferIndex >= 0) {//根据inputBufferIndex获取inputBufferByteBuffer inputBuffer = mInputBuffers[inputBufferIndex];//使⽤数据提取器Extractor读取⼀帧数据int sampleSize = mExtractor.readBuffer(inputBuffer);if (sampleSize < 0) {//如果数据帧兑取失败则说明读完了mCodec.queueInputBuffer(inputBufferIndex, 0, 0, 0, MediaCodec.BUFFER_FLAG_END_OF_STREAM); isEndOfStream = true;} else {//将读取到的数据送⼊缓冲区(压⼊)mCodec.queueInputBuffer(inputBufferIndex, 0, sampleSize, mExtractor.getCurrentTimestamp(), 0);}}return isEndOfStream;}/*** 从缓冲区中取出解码后的数据** @return*/private int pullBufferFromDecoder() {//从缓冲区中取出outputbufferindexint outputBufferIndex = mCodec.dequeueOutputBuffer(mBufferInfo, 1000);switch (outputBufferIndex) {case _OUTPUT_FORMAT_CHANGED:break;case _TRY_AGAIN_LATER:break;case _OUTPUT_BUFFERS_CHANGED:mOutputBuffers = mCodec.getOutputBuffers();break;default:return outputBufferIndex;}return -1;}/*** ⾳视频同步*/private void sleepRender() {try {long passTime = System.currentTimeMillis() - mStartTimeForSync;long currTime = getCurTimeStamp();if (currTime > passTime) {Thread.sleep(currTime - passTime);}} catch (Exception e) {e.printStackTrace();}}/*** 释放解码器*/private void release() {try {Log.i(TAG, "解码停⽌,释放解码器");mState = DecodeState.STOP;mIsEOS = false;mExtractor.stop();mCodec.stop();mCodec.release();if (mStateListener != null) {mStateListener.decoderDestroy(this);} catch (Exception e) {e.printStackTrace();}}/*** 检查⼦类参数** @return*/public abstract boolean check();/*** 初始化数据提取器** @param filePath 媒体⽂件路径* @return 数据提取器*/public abstract IExtractor initExtractor(String filePath);/*** 初始化⼦类⾃⼰持有的媒体参数** @param format*/public abstract void initSpecParams(MediaFormat format);/*** 配置解码器** @param codec 硬件解码器* @param format 媒体格式参数* @return*/public abstract boolean configCodec(MediaCodec codec, MediaFormat format);/*** 初始化渲染器** @return*/public abstract boolean initRender();/*** 执⾏渲染操作** @param outputBuffer 输出的渲染数据* @param bufferInfo 解码出来的数据*/public abstract void render(ByteBuffer outputBuffer, MediaCodec.BufferInfo bufferInfo); /*** 结束解码*/public abstract void finishDecode();} 2.AudioDecoder.java:⾳频解码器import android.media.MediaCodec;import android.media.MediaFormat;import com.yw.thesimpllestplayer.audioplayer.AudioPlayer;import com.yw.thesimpllestplayer.extractor.AudioExtractor;import com.yw.thesimpllestplayer.extractor.IExtractor;import java.nio.ByteBuffer;/*** @ProjectName: TheSimpllestplayer* @Package: com.yw.thesimpllestplayer.mediaplayer.decoder* @ClassName: AudioDecoder* @Description: ⾳频解码器* @Author: wei.yang* @CreateDate: 2021/11/6 13:55* @UpdateUser: 更新者:wei.yang* @UpdateDate: 2021/11/6 13:55* @UpdateRemark: 更新说明:* @Version: 1.0*/private AudioPlayer audioPlayer;public AudioDecoder(String filePath) {super(filePath);}@Overridepublic boolean check() {return true;}@Overridepublic IExtractor initExtractor(String filePath) {return new AudioExtractor(filePath);}@Overridepublic void initSpecParams(MediaFormat format) {if (audioPlayer == null) {audioPlayer = new AudioPlayer(format);}}@Overridepublic boolean configCodec(MediaCodec codec, MediaFormat format) {codec.configure(format, null, null, 0);return true;}@Overridepublic boolean initRender() {audioPlayer.initPlayer();return true;}@Overridepublic void render(ByteBuffer outputBuffer, MediaCodec.BufferInfo bufferInfo) { audioPlayer.play(outputBuffer, bufferInfo);}@Overridepublic void finishDecode() {audioPlayer.stop();audioPlayer.release();}} 2.VideoDecoder.java:视频解码器import android.media.MediaCodec;import android.media.MediaFormat;import android.util.Log;import android.view.Surface;import com.yw.thesimpllestplayer.extractor.IExtractor;import com.yw.thesimpllestplayer.extractor.VideoExtractor;import java.nio.ByteBuffer;/*** @ProjectName: TheSimpllestplayer* @Package: com.yw.thesimpllestplayer.mediaplayer.decoder* @ClassName: VideoDecoder* @Description: 视频解码器* @Author: wei.yang* @CreateDate: 2021/11/6 13:49* @UpdateUser: 更新者:wei.yang* @UpdateDate: 2021/11/6 13:49* @UpdateRemark: 更新说明:* @Version: 1.0*/public class VideoDecoder extends BaseDecoder {private static final String TAG = "VideoDecoder";private Surface surface;public VideoDecoder(String filePath, Surface surface) {super(filePath);this.surface = surface;@Overridepublic boolean check() {if (surface == null) {Log.e(TAG, "Surface不能为空");if (mStateListener != null) {mStateListener.decoderError(this, "显⽰器为空");}return false;}return true;}@Overridepublic IExtractor initExtractor(String filePath) {return new VideoExtractor(filePath);}@Overridepublic void initSpecParams(MediaFormat format) {}@Overridepublic boolean configCodec(MediaCodec codec, MediaFormat format) {if (surface != null) {codec.configure(format, surface, null, 0);notifyDecode();} else {if (mStateListener != null) {mStateListener.decoderError(this, "配置解码器失败,因为Surface为空"); }Log.e(TAG, "配置解码器失败,因为Surface为空");return false;}return true;}@Overridepublic boolean initRender() {return true;}@Overridepublic void render(ByteBuffer outputBuffer, MediaCodec.BufferInfo bufferInfo) { }@Overridepublic void finishDecode() {}}。

Android硬编码

Android硬编码

Android硬编码本文作者:湖广午王湖广午王的博客地址:/junzia视频编解码对许多Android程序员来说都是Android中比较难的一个知识点。

在Android 4.1以前,Android并没有提供硬编硬解的API,所以之前基本上都是采用FFMpeg来做视频软件编解码的,现在FFMpeg在Android的编解码上依旧广泛应用。

本篇博客主要讲到的是利用Android4.1增加的API MediaCodec和Android 4.3增加的API MediaMuxer进行Mp4视频的录制。

1概述通常来说,对于同一平台同一硬件环境,硬编硬解的速度是快于软件编解码的。

而且相比软件编解码的高CPU占用率来说,硬件编解码也有很大的优势,所以在硬件支持的情况下,一般硬件编解码是我们的首选。

在Android中,我们可以直接使用MediaRecord来进行录像,但是在很多适合MediaRecord并不能满足我们的需求,比如我们需要对录制的视频加水印或者其他处理后,所有的平台都按照同一的大小传输到服务器等。

在本篇博客中,将会讲到的是利用AudioRecord录音,利用OpenGL渲染相机数据并做处理。

然后利用MediaCodec对音频和视频分别进行编码,使用MediaMuxer将编码后的音视频进行混合保存为Mp4的编码过程与代码示例。

值得注意的是,音视频编解码用到的MediaCodec是Android 4.1新增的API,音视频混合用到的MediaMuxer是Android 4.3新增的API,所以本篇博客的示例只实用于Android 4.3以上的设备。

2AudioRecord(录音API)AudioRecord是相对MediaRecord更为底层的API,使用AudioRecord也可以很方便的完成录音功能。

AudioRecord 录音录制的是原始的PCM音频数据,我们可以使用AudioTrack来播放PCM音频文件。

解码板说明书

解码板说明书

解码板说明书一、产品概述解码板是一种专用电子设备,用于将数字信号转化为可识别的模拟信号。

它广泛应用于电子产品、通信系统等领域,为数字信号处理提供了便利和灵活性。

本说明书将详细介绍解码板的功能、特点、使用方法以及注意事项,帮助用户更好地理解和操作解码板。

二、功能特点1. 多种接口支持:解码板配备有多种常用接口,可以与其他设备进行连接,包括HDMI接口、VGA接口、USB接口等,以满足不同场景的需求。

2. 高清信号输出:解码板支持高清信号输出,最高可达1080p分辨率,保证用户在使用过程中获得清晰、稳定的图像和视频输出。

3. 强大的信号解码能力:解码板能够解码多种编码格式的信号,包括H.264、MPEG等常见的编码方式,使用户可以轻松处理和播放各种数字信号。

4. 灵活的信号切换:解码板可通过简单的操作切换信号源,方便用户在多个输入信号之间切换,实现灵活性和便利性。

5. 可编程控制:解码板具备可编程控制的功能,用户可根据需要进行编程设置,实现个性化的操作与控制。

三、使用方法1. 接口连接:将解码板与显示设备(如电视、投影仪等)以及信号源(如电脑、DVD播放器等)通过适配器或线缆连接,确保连接稳固。

2. 电源接入:将解码板的电源线插入电源插座,确保供电正常。

3. 信号切换:根据需要使用遥控器或面板上的切换按钮,选择所需的输入信号源,确保正确选择。

4. 参数设置:如有需要,可以通过解码板上的操作按钮或遥控器进行参数设置,例如调节亮度、对比度、音量等参数。

5. 操作指南:根据解码板的使用说明书,了解各个功能按钮的具体作用和操作方法,并按需操作即可。

四、注意事项1. 请严格遵守使用说明书中的操作规范,避免不必要的损坏和故障。

2. 使用时请确保电源接地良好,保证工作环境干燥、通风良好。

3. 避免解码板长时间过热,应保持良好的散热环境。

4. 避免将水或其他液体溅入解码板内部,以免导致设备损坏。

5. 不要在有磁场或静电的环境下使用解码板,以免影响正常工作。

Wansview android版使用说明书 V1.0_20151225_初稿版本_英文截图模板

Wansview android版使用说明书 V1.0_20151225_初稿版本_英文截图模板

即插即用智能云网络摄像机让您一切尽收眼底Wansview(Android版)使用说明书2015-12 REV1.01. Wansview Android App 简介Wansview App 是基于Android 系统开发的应用软件,可适用于android 手机和平板电脑,支持android2.3.0及6.0版本;软件功能特点: ♦ 支持android 6.0系统; ♦ 支持报警推送; ♦ 支持温湿度报警;♦ 支持手机声波快速配置摄像机Wi-Fi ; ♦ 支持SmartP2P 云即插即用产品; ♦ 支持多画面观看(最多支持4画面); ♦ 支持手机端回放SD 卡录像功能;♦ 支持视频控制、视频参数设置、语音监听、对讲、云台控制和拍照等功能; ♦ 支持对局域网设备搜索并添加;♦ 支持设备的编辑与管理(Wi-Fi/邮件/报警/FTP 等高级功能); ♦ 支持拍照分享。

2. 获取软件♦ 可以到配套的光盘中获取“Wansview ”软件。

♦ 可以到Google Play 商店中搜索并下载“Wansview ”软件。

♦ 可以使用手机二维码扫描下载3. 安装软件下载“Wansview ”软件到手机并安装。

安装完成后显示的图标如下图:Wansview温馨提示:在使用Wnasview 手机软件前,请确保您已经参照快速安装指南完成了网络摄像机的连接,并能通过局域网或者互联网访问摄像机。

扫一扫,下载Wansview打开App,进入“更多”选择“Wi-Fi配置”,并填写好Wi-Fi SSID和密码后,点击“配置”。

温馨提示:在开始配置前,请插拔电源,摄像机启动后5分钟内(蓝色Wi-Fi指示灯处于慢闪状态),可以进行配置,否则不能再配置,需要重新插拔电源;手机喇叭要靠近摄像机麦克风,然后点击“配置”(需确认摄像机是否内置麦克风,否则配置不成功); 配置成功提示:蓝色Wi-Fi指示灯将快闪几下,内置喇叭响两声,然后自动连接到路由器,同时蓝色指示灯常亮。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

项目代号项目名称
文档名称Android版视频编解码部件需求规格说明书
产品版本页数密级中
Android版
视频编解码部件API
需求规格说明书
组编号:HFT00002
目录
1引言 (1)
1.1项目背景 (1)
1.2文档约定 (1)
1.3读者对象 (1)
1.4参考文献 (1)
2. 综合描述 (2)
2.1主要功能 (2)
2.2用户类和特征 (2)
2.3运行环境 (2)
3. 外部接口需求 (2)
3.1用户界面 (2)
3.2硬件接口 (3)
3.3软件接口 (3)
3.4通信接口 (4)
4. 系统特性 (4)
4.1系统的功能性需求 (4)
4.2系统的非功能性需求 (5)
附录A:术语表 (5)
1引言
1.1项目背景
目前我们的Android版视频编解码部件由于使用的是VLC库,一方面造成客户端APK太大,另一方面不易定制化开发。

所以现需要一个体积小,性能和拓展性都好的视频编解码部件,用以满足主流用户对客户端视频编解码功能需求
1.2 文档约定
该文档为产品需求规格书,合作方需安装文档执行产品开发。

产品验收也参照该文档
1.3读者对象
合作方成员
1.4 参考文献
2. 综合描述
2.1 主要功能
1. 流畅播放标准RTSP视频流,编解码部分最好使用软解码,并且可设置播放缓存大
小(能兼容播放http视频流更好)
2. 支持流畅和清晰画面质量切换
3. 拍照(本地实时画面抓拍,保存到SD卡自建目录下,若无SD卡或SD卡满,需给
出错误码)
4. 录像(本地实时画面录像,保存到SD卡自建目录下,若无SD卡或SD卡满,需给
出错误码)
2.2用户类和特征
2.3 运行环境
需求名称详细要求
开发环境windows
开发工具eclipse
硬件需求主频>=800M 核心数不限RAM>=128M
软件需求API需支持Android2.1及更高版本
3. 外部接口需求
3.1 用户界面
需求名称详细要求
界面友好登陆进去主界面要简单易用
操作简单支持触摸或划屏操作
界面风格播放器风格按照主流播放器来
3.2 硬件接口

3.3 软件接口
1.Rtsp视频流播放接口
/**
*
*@param url rtsp标准视频流URL,可为多个(目前为1到2个)
*使用第一个URL播放成功后,则不需要理会其他URL;
*若使用第一个播放失败,则播放第二个视频。

*
*@return状态码0001播放成功
*0002无效的URL
*0003网络超时
*0004系统运行内存不足
*0005其他错误
*/
public String play(String... url);
2.拍照接口
/**
*
*@param path路径,具体到照片名称及后缀
*图像保存格式为jpg
*
*@param format图片保存格式默认为jpg
*
*@return状态码0010拍照成功
*0011无SD卡
*0012SD卡存贮空间不足
*0013其他错误
*/
public String photograph(String path, String format);
3.录像接口
/**
*
*@param path路径,具体到录像视频名称及后缀
*视频保存格式为mp4格式
*
*@param format视频保存格式默认为mp4
*
*@return状态码0020录像成功
*0021无SD卡
*0022SD卡存贮空间不足
*0023其他错误
*/
public String video(String path, String format);
4.播放器缓存大小设置接口
/**
*
*@param size缓存大小,单位:M(兆)
*
*@return true 设置成功
*false 设置失败
*
*/
public boolean setCache(int size);
3.4 通信接口

4. 系统特性
4.1 系统的功能性需求
功能类别子功能名称、标识符描述
标准RTSP视频流播放标准RTSP视频流播放支持多个(目前为2个)URl 的播放(如第一个播放失败后自动切换播放第二个)
拍照拍照本地实时画面抓拍,保存到SD卡自建目录下,若无SD卡或SD卡满,需给出错误码
录像录像本地实时画面录像,保存到SD卡自建目录下,若无SD卡或SD卡满,需给出错误码
4.2 系统的非功能性需求
主要质量属性详细要求
编解码核心包最好用c实现软编解码
软件大小软件打成apk包,大小需在3M以内(小于2M更好)
正确性在终端设备及网络正常的情况下,可正确流畅的播放有效的URL
健壮性在终端设备及网络异常或者URL无效的情况下,接口响应速度要快,无死机,并能迅速返回正确的错误码;来电或来短信无
死机
可靠性API能稳定使用,不出现调用超时无反应或引起死机等无法使用的情况
性能,效率能流畅播放视频,无掉帧,无卡顿,无死机;播放视频时,从拿到RTSP视频流到播放画面出来需在2秒以内;
易用性API接口使用简单
清晰性API代码逻辑设计清晰合理
安全性API不得内置后门程序,不得内置吸费,盗号木马,除功能外,不得有其他窥探用户隐私的操作(譬如查看用户通讯录,短信,
通话记录等非法行为)
可扩展性API接口架构需合理,方便后续扩展功能
兼容性客户端软件需支持Android2.1及更高版本Android系统
维护性合作方需在完成产品验收后,继续维护该API
附录A:术语表。

相关文档
最新文档