m3u8文件格式详解
简介
M3U8 是 Unicode 版本的 M3U,用 UTF-8 编码。”M3U” 和 “M3U8” 文件都是苹果公司使用的 HTTP Live Streaming(HLS) 协议格式的基础,这种协议格式可以在 iPhone 和 Macbook 等设备播放。
上述文字定义来自于维基百科。可以看到,m3u8 文件其实是 HTTP Live Streaming(缩写为 HLS) 协议的部分内容,而 HLS 是一个由苹果公司提出的基于 HTTP 的流媒体网络传输协议。
HLS 的工作原理是把整个流分成一个个小的基于 HTTP 的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。在开始一个流媒体会话时,客户端会下载一个包含元数据的 extended M3U (m3u8) playlist文件,用于寻找可用的媒体流。HLS 只请求基本的 HTTP 报文,与实时传输协议(RTP)不同,HLS 可以穿过任何允许 HTTP 数据通过的防火墙或者代理服务器。它也很容易使用内容分发网络来传输媒体流。
简而 ...
安卓音视频开发指南004 -- Camera1使用
前言安卓音视频开发中,相机的使用是很重要的一部分,无论拍摄照片还是录制视频,都离不开相机的使用。同时,相机的开发也是很繁复的一个事,这里会分成很多part来写。这一篇就先从简单Camera1 API的使用来说起吧,虽然Camera1已经被遗弃了,但还是可以说一下。
Camera1 相机开发的关键类SurfaceView用于绘制相机预览图像的类,展现实时的预览图像。
普通的View以及派生类都是共享同一个Surface的,所有的绘制都必须在UI线程中进行。 Surface是指向屏幕窗口原始图像缓冲区(raw buffer)的一个句柄,通过它可以获得这块屏幕上对应的canvas,进而完成在屏幕上绘制View的工作。
SurfaceView是一种比较特殊的View,它并不与其他普通View共享Surface,而是在内部持有了一个独立的Surface,SurfaceView负责管理这个Surface的格式、尺寸以及显示位置。由于UI线程还要同时处理其他交互逻辑,因此对View的更新速度和帧率无法保证,而SurfaceView由于持有一个独立的Surface,因而可以在独立的线程中进行绘制,因此 ...
安卓手机添加系统证书
前言安卓7.0以后,安卓不信任用户安装的证书,所以抓https时无法解码请求,对于第三方应用,网上解决方法较多,比如使用安卓模拟器(兼容性差,很多应用闪退),使用xposed框架,将证书注入apk包等,这里使用给安卓手机添加系统证书。
注:需要手机有root权限(root手机可以参考Pixel3刷机Android9并Root)
导出证书这里以Charles为例,help > SSL Proxying > Save Charles Root Certificate
生成证书安卓手机系统证书存储在**/system/etc/security/cacerts**
文件名格式为**<证书Hash值>.编号**,如xxxxxxxx.0(hash值已经存在则编号依次+1)
计算上面导出的证书的hash值,示证书格式选命令
12#openssl x509 -inform DER -subject_hash_old -in 证书文件.cer # cer格式证书openssl x509 -inform PEM -subject_hash_o ...
Pixel3刷机Android9并Root
前言逆向android经常需要一部root过的手机。但是现在的安卓机root起来都非常的麻烦,由于只是当做开发机,于是几百大洋淘了一部二手pixel3。但是到手的Pixel3是Android12的,System的读写权限获取也很麻烦,于是就准备降级到Android9。这里简单记录下pixel3刷机Android9,并使用Magisk进行root的过程。
本操作会重置系统,故需要提前备份系统信息。
基本信息手机基本信息:欧版,4G/64G设备型号:Pixel3当前Android版本:12
解锁OEM和BL首先,保证手机可以访问www.google.com,确保可以解开OEM锁。
其次,在手机:设置>系统>关于手机,多次点击版本号,直到提示进入开发者模式。
在手机:设置>系统>高级>开发者选项,找到OEM解锁,打开。
使用以下命令解锁BL,解BL锁后,手机会重置:
123adb devices # 先检查设备是否存在,存在则执行以下指令adb reboot bootloader # 重启进入fastboot modefastboot flashing ...
安卓音视频开发指南003 -- AudioTrack播放PCM
前言上一节介绍了AudioRecord的录音,但是AudioRecord录音生成出来的是原始音频数据,无法直接使用常规播放器播放的。要播放这些数据,可以用安卓提供的AudioTrack类来播放,同时AudioTrack类的参数要跟AudioRecord的参数要保持一致。除此之外,还可以通过给这些原始音频数据添加WAV文件头,让它成为真正意义上的音频文件,这样常规的播放器就可以直接播放该文件了。
AudioTrack播放PCMAudioTrack有两种数据加载模式(MODE_STREAM和MODE_STATIC),对应的是数据加载模式和音频流类型, 对应着两种完全不同的使用场景。
MODE_STREAM:在这种模式下,通过write一次次把音频数据写到AudioTrack中。这和平时通过write系统调用往文件中写数据类似,但这种工作方式每次都需要把数据从用户提供的Buffer中拷贝到AudioTrack内部的Buffer中,这在一定程度上会使引入延时。为解决这一问题,AudioTrack就引入了第二种模式。
MODE_STATIC:这种模式下,在play之前只需要把所有数据通过一次w ...
安卓音视频开发指南002 -- AudioRecord录音
前言Android SDK 提供了两套音频采集的API,分别是:MediaRecorder 和 AudioRecord,前者是一个更加上层一点的API,它可以直接把手机麦克风录入的音频数据进行编码压缩(如AMR、MP3等)并存成文件,而后者则更接近底层,能够更加自由灵活地控制,可以得到原始的一帧帧PCM音频数据。如果想简单地做一个录音机,录制成音频文件,则推荐使用 MediaRecorder,而如果需要对音频做进一步的算法处理、或者采用第三方的编码库进行压缩、以及网络传输等应用,则建议使用 AudioRecord,其实 MediaRecorder 底层也是调用了 AudioRecord 与 Android Framework 层的 AudioFlinger 进行交互的。
PCMPCM是在由模拟信号向数字信号转化的一种常用的编码格式,称为脉冲编码调制,PCM将模拟信号按照一定的间距划分为多段,然后通过二进制去量化每一个间距的强度。
PCM 有三个重要的参数,它们是:声道数、采样位数和采样频率
采样频率:指每秒钟取得声音样本的次数。采样频率越高,声音的质量也就越好,声音的还原也就越真实, ...
安卓音视频开发指南001 -- 绘制图片
前言通过ImageView,SurfaceView,自定义 View等不同方式在安卓平台上绘制图片。
ImageView这是最基本,也是最常见的方式了。
示例代码123456ivAvatar = view.findViewById(R.id.iv_avatar)// 获取图片val bitmap = BitmapFactory.decodeStream(context?.assets?.open("avatar.jpg"))bitmap?.let { ivAvatar.setImageBitmap(it)}
SurfaceView通过创建surfaceView来进行绘制
SurfaceView简介View是通过刷新来重绘视图的,系统通过发出 VSYNC 信号来进行屏幕的重绘,刷新的时间间隔是 16 ms,如果我们可以在 16 ms 以内将绘制工作完成,则没有任何问题,如果我们绘制过程逻辑很复杂,而且我们的界面更新还非常频繁,这时候就会造成界面的卡顿,影响用户体验。为此Android提供了 SurfaceView 来解决这一问题。
Surf ...
使用jsDelivr部署资源
jsDelivr 是一个免费开源的 CDN 解决方案,用于帮助开发者和站长。包含 JavaScript 库、jQuery 插件、CSS 框架、字体等等 Web 上常用的静态资源。
官网:https://www.jsdelivr.com
根据官网的介绍,有两个特点,可以借助他来作为资源的载体
all files from npm and GitHub available with zero setup
works in China
因此,通过创建一个GitHub仓库来存放资源,就可以使用jsDelivr来进行CDN加速了。
GitHub资源地址与jsDelivr的地址对应关系如下:
https://cdn.jsdelivr.net/gh/用户名/仓库名@分支名/资源路径
譬如
https://cdn.jsdelivr.net/gh/hotdl/hotdldl_assets@main/images/top_img.jpg
刷新缓存将想刷新的链接的开头的cdn 更改为purge,访问这个接口,返回status: ok ...
申请免费SSL证书
Let’s Encrypt作为一个公共且免费SSL的项目逐渐被广大用户传播和使用,是由Mozilla、Cisco、Akamai、IdenTrust、EFF等组织人员发起,主要的目的也是为了推进网站从HTTP向HTTPS过度的进程,目前已经有越来越多的商家加入和赞助支持。
这里简单记录下获取Let’s Encrypt的证书的过程
安装acme.shcurl https://get.acme.sh | sh
后续如果提示找不到acme.sh命令,则执行一下
source ~/.bashrc
获取证书acme的使用方法很多,具体可以参考acme.sh的github项目
我这里使用的是自动配置DNS的方式
我使用的域名是在阿里注册的
先去阿里云后台获取App_Key和App_Secret
123export Ali_Key="App_Key" # 此处填入自己的App_Keyexport Ali_Secret="App_Secret" # 此处填入自己的App_Secretacme.sh --issue --dns dns_ali -d hotdldl. ...
Can't connect to MySQL server
使用数据库客户端工具连接mysql的时候,忽然遇到一个Can’t connect to MySQL server的问题这里简单记录下解决方法
查看该用户是否有远程登录的权限SELECT User, Host FROM mysql.user;
host显示%即代表可以远程登录
查看MySQL Server监听的端口netstat -tulpen | grep mysql
正常应该是监听0.0.0.0:3306,如果是localhost:3306,则应该修改mysql的配置并重启服务mysql的配置问价在哪配置可以使用–help查看
mysql --help
添加配置
[mysqld]
bind-address = 0.0.0.0
重启mysql
sudo /etc/init.d/mysql stop
sudo /etc/init.d/mysql start
如果服务器是CentOS7,将MySQL服务加入防火墙加入防火墙
sudo firewall-cmd --zone=public --permanent --add-service=mysql
重启防火墙
sudo systemctl ...