自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(138)
  • 资源 (16)
  • 收藏
  • 关注

原创 airplay协议地址

地址:Unofficial AirPlay Protocol Specification

2024-08-13 17:48:08 186

原创 remote: Support for password authentication was removed on August 13, 2021.

2021年8月13日 github修改了验证的方法,相关的密码不能够直接输入,需要通过相关的秘钥token进行输入。因此我们需要在自己的账户生成对应的token才可以正常的在本地push对应的代码到远程github上。生成对应的token。

2024-08-07 17:59:06 195

原创 ijkplayer 自定义协议播放加密内容 Android

想对播放的音视频进行加密,防止资源被盗用,该怎么办呢?这篇文章从自定义协议的角度来提供一中实现思路。在 ijkplayer 的基础上,通过实现自定义协议对文件进行解密。边解边播,以此为基础,还可以实现在线资源边下载边解密边播放。结合 ijkplayer 源码阅读本文效果最佳。

2024-08-02 11:10:20 1022

原创 从零开始,手把手教你如何在Ubuntu下编译VLC-Android源码

公司项目中使用的库文件,有点老,对系统兼容性太差了,当程序运行在系统上时,回弹出警告框,提示异常,虽然,程序播放视频没有问题,但是,总是弹出提示框就非常不友好了,为此,就需要重新编译一个新的库文件。由于,在编译中遇到了一大堆难题,足足花了3天时间才将源码编译成功。期间在网上查找了不少参考资料,但是,大都介绍太过详细,好多地方没有将清楚,非常容易误导他人,所以,决定下一篇详细的教程来记录此次编译的过程,希望能给大家带来帮助。从零开始在Linux编译VLC-Android开源项目这篇博客给我带来的帮助。

2024-07-16 09:30:17 499

原创 ndk编译android系统下运行的ffmpeg配置

bin/bashthenfiAPI=28CPU=$1ARCH=""SYSROOT=""CC=""CXX=""thenARCH=armelsefi--cc=$CC \build()CPU=$1make -j32thenelsefimake cleanmake clean。

2024-04-29 15:11:09 774 3

转载 音视频技术应用(2)-ffmpeg项目创建和源码pdb调试设置

​​​​

2024-03-29 16:50:09 92

转载 WebRTC实现Android传屏demo

WebRTC (Web Real-Time Communications) 是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流和音频流或其他任意数据的传输。目前,WebRTC的应用已经不局限在浏览器与浏览器之间,通过官方提供的SDK,我们可以很容易的实现本地应用间的音视频传输。在Android平台上,我们也非常容易的集成WebRTC框架,用非常简洁的代码就能实现强大、可靠的音视频传输功能。

2024-03-21 14:25:29 323

转载 Miracast技术详解(五):Permission 问题处理

发表于 2020-06-16 | 分类于。

2024-03-21 14:24:29 136

转载 Miracast技术详解(四):Sink源码解析

Miracast Sink端源码最早出现在上,通过可以很方便的查看:但是在以后,Google却移除掉了这部分源码,详细的commit记录在:1234虽然移除了Sink端代码,但是Source端源码是还在的,我们可以通过Android手机的投射功能实现Miracast投屏发送端。最终,通过回调音视频裸流给进行解码,进行音视频数据的播放,整个端的流程就到此结束了。相信看完上面所有源码解析后,自己写这部分逻辑也不是难事,当然更好的办法肯定是基于Sink端的代码进行移植。移植。

2024-03-21 14:23:28 382

转载 Miracast技术详解(三):RTP & MPEG2-TS

在上一篇文章中,我们已经成功完成RTSP能力协商与会话的建立,并准备开始音视频流的传输阶段。那么下一步,就是对音视频流进行解析,并将音视频展示给用户的过程。这样整个Miracast的流程就算分析完毕了。先简单来总结下,在Miracast底层的实现中,是采用RTP协议对MPEG2-TS数据包进行封装,其中MPEG2-TS又同时封装了Audio和Video两种ES(Elementary Stream)。其中Audio格式一般为AAC,Video则为H.264。

2024-03-21 14:22:20 405

转载 Miracast技术详解(二):RTSP协议

在上一篇博客中我们已经通过Wi-Fi P2P建立好了Source和Sink端的TCP连接,在Miracast后续的音视频传输过程中,将采用RTSP协议来对流媒体进行控制。因此接下来的步骤就到了RTSP协商、会话建立及流媒体传输的阶段。首先,什么是RTSP协议呢?实时流协议是一种网络应用协议,专为娱乐和通信系统的使用,以控制流媒体服务器。该协议用于创建和控制终端之间的媒体会话。

2024-03-21 14:20:46 535

转载 Miracast技术详解(一):Wi-Fi Display

Miracast是由Wi-Fi联盟于2012年所制定,以Wi-Fi直连(Wi-Fi Direct)为基础的无线显示标准。支持此标准的消费性电子产品(又称3C设备)可透过无线方式分享视频画面,例如手机可透过Miracast将影片或照片直接在电视或其他设备播放而无需任何连接线,也不需透过无线热点(AP,Access Point)。

2024-03-21 14:19:06 1488

原创 MediaPlayer到ACodec到OMX流程(Android7.1 NuPlayer)

【代码】MediaPlayer到ACodec到OMX流程(Android7.1 NuPlayer)

2024-03-13 09:19:26 475

原创 [音视频]H264码流分析工具

CTI-TSEasyICEVideoEye学习H264码流,H264码流进行分析。

2023-12-21 15:39:04 1191

原创 TS流分析

PAT表主要包含频道号码和每一个频道对应的PMT的PID号码,这些信息我们在处理PAT表格的时候会保存起来,以后会使用到这些数据。[cpp]//节目号// 节目映射表的PID,节目号大于0时对应的PID,每个节目对应一个[cpp]">//PMT 表定义[cpp]//指示特定PID的节目元素包的类型。该处PID由elementary PID指定//该域指示TS包的PID值。这些TS包含有相关的节目元素//前两位bit为00。该域指示跟随其后的描述相关节目元素的byte数。

2023-09-25 13:50:30 561

原创 MediaCodec 低延时解码

我们在使用Android的硬解进行解码时,如果是Android11以上则可以使用其特性低延迟,以下是Android 11支持的低时延特性:ANGLE支持:Android 11引入了ANGLE(Almost Native Graphics Layer Engine)支持,它是一个开源的跨平台图形引擎,可以将OpenGL ES和Vulkan API转换为DirectX API。使用ANGLE可以提高图形渲染的性能和稳定性。

2023-08-04 10:30:23 1319

转载 流媒体开发学习7 ffmpeg API保存流到文件demo

3)之所以要除以time_base,是因为AVStream中的duration的单位是time_base,注意这和AVFormatContext中的duration的单位(单位是AV_TIME_BASE,固定取值为1000000)是不一样的。(2)通过已知流的时长。(1)如果AVFormatContext中没有bit_rate信息,就把所有AVStream的bit_rate加起来作为AVFormatContext的bit_rate信息。

2023-06-17 11:41:01 483

转载 IjkPlayer数据读取-read_thread(含s->io_open)

这三个地方总共耗时加起来大概已经180ms左右,所以需要针对这三个过程进行优化。至此,ijkplayer的prepared过程结束。在video_thread,audio_thread等解码完成后,会将解码完成的数据包同步到video_refresh_thread线程中进行时钟同步,同步完后,则会开始绘制第一帧。函数中,初始化完视频,音频,字幕的帧队列后,启动了两个线程。所以如果没有修改的话,则使用该函数打开文件。

2023-06-13 20:54:38 159

原创 android性能测试-内存详解

dex文件代码占用内存。类函数的代码和常量占用的内存,dex mmap是映射classex.dex文件,Dalvik虚拟机从dex文件加载类信息和字符串常量等。Dex文件有索引区和Data区。通常来说,“private dirty”内存是其最重要的部分,因为只被自己的进程使用。它只在内存中存储,因此不能做分页存储到外存(Android不支持swap)。Dalvik堆和本地堆中和Zygote进程共享的部分是共享dirty内存。所有分配的Dalvik堆和本地堆都是“private dirty”内存;

2023-05-25 09:34:06 1116

原创 ijkplayer音视频同步

如果当前这一帧的播放时间已经过了,并且其和当前系统时间的差值超过了AV_SYNC_THRESHOLD_MAX,则将当前这一帧的播放时间改为系统时间,并在后续判断是否需要丢帧,其目的是为后面帧的播放时间重新调整frame_timer,如果缓冲区中有更多的数据,并且当前的时间已经大于当前帧的持续显示时间,则丢弃当前帧,尝试显示下一帧。通过实时计算每秒输入缓冲区的数据和发送出去数据,如果发送出去的数据小于输入缓冲区的数据,那么说明网络带宽不行,这时候缓冲区的数据会持续增多,这时候就要启动相应的机制。

2023-05-18 16:59:06 989

转载 FFmpeg Heap Overflow 漏洞分析及利用

FFmpeg是一个著名的处理音视频的开源项目,使用者众多。2016年末paulcher发现FFmpeg三个堆溢出漏洞分别为CVE-2016-10190、CVE-2016-10191以及CVE-2016-10192。本文详细分析了CVE-2016-10190,是二进制安全入门学习堆溢出一个不错的案例。操作系统:Ubuntu 16.04 x64FFmpeg版本:3.2.1按照编译。

2023-05-11 14:24:11 394

原创 Android WebView 的 addJavascriptInterface 探究

Java和JS交互的方式有多种,这里探讨的方式是通过以下方式进行的交互。这篇文章是想弄明白 JavaScript 和 Java是如何实现这种方式互调的,就从源码角度开始分析。

2023-05-09 17:49:37 1141

原创 ffmpeg音视频解码和渲染流程

其实 ffpmeg 自带的播放器实例 ffplay 就是一个跨平台的播放器,得益于其依赖的多媒体库 SDL 实现了多平台的音视频渲染。但是 SDL 库过于庞大,并不适合整体移植到移动端。本文介绍的跨平台实现方案也是借鉴了 SDL2.0 的内部实现,只是重新设计了渲染接口。

2023-02-28 17:47:04 1049

原创 视频播放器倍速、清晰度切换、m3u8下载

JiaoZi的播放器控件是 JZVideoPlayerStandard。所有关于播放器布局控件的操作都需要通过该控件,能满足一般的视频播放需求。但是如果需要在 JiaoZi 播放器中添加按钮,就需要自定义JZVideoPlayerStandard, 比如倍速播放、下载、清晰度切换等功能。如果不需要修改布局,直接在xml布局文件中使用即可。a、重写 XML。

2023-02-20 14:03:51 881

原创 Chrome浏览器启动命令行参数

1028 --trace-startup-file 如果提供,则设置将存储启动跟踪的文件,如果省略,则默认将在当前目录中使用“chrometrace.log”。示例:-trace-startup–trace-startup-file=/tmp/trace_event.log作为一种特殊情况,可以设置为’none’-这会禁用自动将结果保存到文件中,并且第一个手动记录的跟踪将然后从启动后接收所有事件。1051 --use-file-for-fake-audio-capture 播放.wav文件作为麦克风。

2023-02-14 16:50:18 685

原创 TCP协议中的Ack和Seq号

发送方的包,包括seq和len,接收方如何告知对方数据已经收到呢?答案就在于接收方的ack=发送方的seq+发送方的len。整体来讲,就是这样。特殊情况在于三次握手时,客户端、服务端握手时,len=0,此时对方就不是ack=seq+0,而是ack=seq+1。

2023-02-07 13:43:34 2891

转载 chromium blink core outline

线程可以执行任务而不干扰用户界面一个worker是使用一个构造函数创建的一个对象(e.g. Worker()) 运行一个命名的JavaScript文件 这个文件包含将在工作线程中运行的代码;否则,v8 :: Isolate :: GetCurrentContext()将返回错误的上下文,在最坏的情况下,它将最终泄漏对象并导致安全问题。在Chrome中,每个渲染进程都有一个V8 Isolate,所有被同一个渲染进程处理的站点的JavaScript代码在同一个Isolate中运行。工作线程有自己的隔离。

2022-12-24 13:47:40 180

原创 Linux 操作系统错误代码解释

错误代码147 :锁表已满;操作系统错误代码81: a. out文件中的.lib段损坏。操作系统错误代码118:不是一个XENIX命名类型的文件。操作系统错误代码84:无效或不完整的多字节以及宽字符。操作系统错误代码88:在非套接字接口进行套接字操作。操作系统错误代码25:不适当的设备ioctl使用。操作系统错误代码75:数值超过对于给定的数据类型。操作系统错误代码85:中断的系统调用需要重新启动。错误代码137:没有更多的记录(已读至文件尾)操作系统错误代码80:访问了一个损坏的共享库。

2022-12-14 10:43:55 2967

转载 viewport 深入理解

在移动设备上进行网页的重构或开发,首先得搞明白的就是移动设备上的viewport了,只有明白了viewport的概念以及弄清楚了跟viewport有关的meta标签的使用,才能更好地让我们的网页适配或响应各种不同分辨率的移动设备。一、viewport的概念通俗的讲,移动设备上的viewport就是设备的屏幕上能用来显示我们的网页的那一块区域,在具体一点,就是浏览器上(也可能是一个app中的webview)用来显示网页的那部分区域,但viewport又不局限于浏览器可视区域的大小,它可能比浏览器的可视区域要大

2022-11-23 13:42:07 210

转载 View系列:硬件加速,从理论到实践

通过这样更进一步的缓存方式,View 的重绘效率进一步提高了:只要绘制的内容没有变,那么不论是 CPU 绘制还是 GPU 绘制,它们都不用重新计算,而只要只用之前缓存的绘制结果就可以了。基于这样的原理,在进行移动、旋转等**无需调用 invalidate()**的属性动画的时候,开启 Hardware Layer 将会极大地提升动画的效率,因为在动画过程中 View 本身并没有发生改变,只是它的位置或角度改变了,而这种改变是可以由 GPU 通过简单计算就完成的,并不需要重绘整个 View。

2022-10-08 18:19:32 622

原创 H5页面与原生交互的方法之 一、addJavascriptInterface

addJavascriptInterface有很大的安全隐患(通过js获取高权限,盗取用户信息、运行病毒代码等等),特别是4.2之前,4.2及以上版本(API >= 17)新增了@JavascriptInterface注解来提高安全等级,没有注解的方法,js无法调用,并在4.4版本增加了带回调的方法webview.evaluateJavascript(s,valuecallback),但仍有更安全的交互方式;3、4.4版本以上,调用带返回值js方法。java调用带返回值的js方法。js创建被调用的方法。

2022-09-19 16:17:24 919

转载 Android 之 WebView开发问题及优化

当我们在WebView中加载出从web服务器上拿取的内容时,是无法访问本地资源的,如assets目录下的图片资源,因为这样的行为属于跨域行为(Cross-Domain),而WebView是禁止的。当我们做类似上拉加载下一页这样的功能的时候,页面初始的时候需要知道当前WebView是否存在纵向滚动条,如果有则不加载下一页,如果没有则加载下一页直到其出现纵向滚动条。哪些资源需要我们去存储在本地呢,当然是一些不会被更新的资源,例如图片文件,js文件,css文件,替换的方法也很简单,重写WebView的方法即可。

2022-09-14 22:46:24 1489

原创 HTML引入CSS样式三种方法及优先级

css的样式引用由3种方式。分别为行内样式、内部样式(嵌入式)和外部样式;行内样式: 在对象的标记内使用对象的style属性定义适用的样式表属性,格式定义为 :;内部样式(嵌入式):是由标记对放在中;

2022-09-08 11:18:26 2869

原创 typeof使用以及null和undefined的判断区分

但是有一点缺陷就是函数和对象以及DOM对象返回的值都是object,所以typeof用来监测数据类型的时候,如果监测基本数据类型还比较可靠,但是监测对象的时候却无太大作用。if(typeof(exp) == 'object' && exp == null){ //同时进行类型和内容的判断。//var exp;//这种方法才是正确的,注意undefined加"" ,因为typeof返回的值是一个字符串类型的。如果一个运算数是对象,另一个是字符串,在检查相等性之前,要尝试把对象转换成字符串。

2022-09-02 15:21:41 1923

转载 移动APP性能测试

app 性能

2022-08-30 10:46:35 2658

转载 Gyp语法规则参考 & 工具的使用

配置文件都是以.gyp结尾每个.gyp文件都描述了如何去构建项目每个.gyp在Mac上,.gyp文件会生成Xcode项目文件,包含了如何构建项目。一个.gyp文件会生成的一个.xcodeproj在Windows上,.gyp文件会生成Visual Studio项目文件。一个.gyp文件会生成一个.sln,并为每个targets生成一个.vcproj在Linux上,.gyp文件会生成Makefile文件.gyp文件的语法是Python数据格式(Json格式).gypi文件可以被.gyp。...

2022-08-08 15:15:42 1696

原创 chromium55 http respone堆栈

> content.dll!content::WebURLLoaderImpl::Context::OnReceivedResponse(const content::ResourceResponseInfo & initial_info) Line 710 C++ content.dll!content::WebURLLoaderImpl::RequestPeerImpl::OnReceivedResponse(const content::ResourceResponseInfo

2022-08-08 10:33:48 357

原创 http请求过程 Android,Cronet android设计与实现分析 HTTP请求启动

可见我们调用Java层的CornetUrlRequest的start()及其内部调用的nativeStart(),只是Url Request相关结构的创建过程的延续而已,Url Request相关结构主要是指用于连接Java层的CronetUrlRequest和chromium net的URLRequest的CronetURLRequestAdapter和chromium net的URLRequest。Chromium net提供了强大的debug的能力,可以帮我们抓到许多网络请求执行过程中的信息。...

2022-08-05 11:46:37 735

转载 open(/dev/ietctl, O_RDWR) 参数含义(转载)

这是文件I/O的常用函数,open函数,open函数用来打开一个设备,他返回的是一个整型变量,如果这个值等于-1,说明打开文件出现错误,如果为大于0的值,那么这个值代表的就是文件描述符。一般的写法是if((fd=open("/dev/ttys0",O_RDWR | O_NOCTTY | O_NDELAY)<0){perror("open");}这个事常用的一种用法fd是设备描述符,linux在操作硬件设备时,屏蔽了硬件的基本细节,只把硬件当做文件来进行操作

2022-06-25 16:31:04 3104

原创 androd11 编译 Manually written binder interfaces are considered error prone and frequently have bugs.

错误:error: static_assert failed due to requirement 'internal::allowedManualInterface("android.test.Icallback")' "b/64223827: Manually written binder interfaces are considered error prone and frequently have bugs. The preferred way to add interfaces is to d.

2022-05-12 11:35:03 1303 1

深度学习与计算机视觉 算法原理、框架应用与代码实现--OCR版

适合初学者 ,对于视觉算法给出了详细描述,对算法原理进行了介绍。使用python语言进行开发

2018-05-03

HTML5+JavaScript动画基础

HTML5+JavaScript动画基础

2017-10-12

linux环境编程

前言 第0章 基础知识 0.1 一个Linux程序的诞生记 0.2 程序的构成 0.3 程序是如何“跑”的 0.4 背景概念介绍 0.4.1 系统调用 0.4.2 C库函数 0.4.3 线程安全 0.4.4 原子性 0.4.5 可重入函数 0.4.6 阻塞与非阻塞 0.4.7 同步与非同步 第1章 文件I/O 1.1 Linux中的文件 1.1.1 文件、 文件描述符和文件表 1.1.2 内核文件表的实现 1.2 打开文件 1.2.1 open介绍 1.2.2 更多选项 1.2.3 open源码跟踪 1.2.4 如何选择文件描述符 1.2.5 文件描述符fd与文件管理结构file 1.3 creat简介 1.4 关闭文件 1.4.1 close介绍 1.4.2 close源码跟踪 1.4.3 自定义files_operations 1.4.4 遗忘close造成的问题 1.4.5 如何查找文件资源泄漏1.5 文件偏移 1.5.1 lseek简介 1.5.2 小心lseek的返回值

2017-09-29

FLEX从入门到精通

前端程序编辑器,适合前端数据开发人员阅读与了解。目录第1篇 Flex 3.0基础篇  第1章 Flex概述  第2章 Flex Builder介绍 第2篇 Flex编程基础  第3章 MXML编程  第4章 ActionScript编程  第5章 Flex组件(Components)  第6章 Flex控件(Controls) 第3篇 Flex设计篇  第7章 基础知识:容器(Container)  第8章 约束版面布局(Constraint-based Layout)  第9章 行为控制(Behavior)  第10章 样式(Style)和主题(Theme)  第11章 皮肤(Skin)  第12章 条目渲染器(Item Renderer)  第13章 工具条提示(ToolTips)  第14章 光标管理器(Cursor Manager)  第15章 Flex应用程序本地化(Localizing)  第16章 动态重复控件和容器(Repeating)  第17章 视窗状态(View States)  第18章 过渡(Transition)  第19章 拖放行为(Drag and Dorp)  第20章 嵌入外部资源(Embedding Assets) 第4篇 Flex数据篇  第21章 Flex与外部通信  第22章 共享对象(Shared Objects)  第23章 数据获取和联系(Data Access and Interconnectivity)  第24章 图表组件(Charting Components) 第5篇 Flex综合实例篇  第25章 查询天气系统——基于Cairngorm框架

2017-09-19

com.google.common

com.google.common

2017-07-14

Kmens文本聚类算法java实现

Kmens文本聚类算法java实现

2017-07-03

用Python写网络爬虫

用Python写网络爬虫

2017-06-19

Python 网络数据采集

Python 网络数据采集

2017-06-19

qnx tcp程序

qnx 操作系统 tcp通信程序,适合初学者。

2013-11-29

qnx udp程序

qnx 操作系统udp通信源码,适合初学者。

2013-11-29

qnx串口程序

qnx 串口程序 源码 适合初学者,x86架构。

2013-11-29

qnx usb驱动及测试程序

qnx usb驱动及测试程序 适合qnx初学者

2013-11-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除