QUSIR


  • Startseite

  • Archiv

安装切换openjdk

Veröffentlicht am 2016-12-19

##安装各种版本openjdk

sudo apt-get install openjdk-6-jdk
sudo apt-get install openjdk-7-jdk
sudo apt-get install openjdk-8-jdk

##切换版本
sudo update-alternatives –config java
sudo update-alternatives –config javac

android手机解锁引导程序

Veröffentlicht am 2016-12-19

##1.重启手机进入fastboot模式
 一般关机状态下按手机音量减+开机键,成功后会显示fastboot字提示。

##2.查看设备信息
fastboot devices

说明:fastboot是一个工具软件

##3.解锁设备

fastboot oem unlock

用open_gapps安装google play

Veröffentlicht am 2016-12-19

##说明

 一个开放源码脚本自动生成最新的谷歌应用程序包。对整个google play 程序框架的打包,包括一些google官方的程序。对于阉割了google ply用户来说是一个不错的选择。

##使用

下载网址

GitHub

###通过压缩包安装

选择对应android版本cpu架构和对应大小

opengapps

下载压缩包后,手机进入recovery模式刷入zip刷机包。

###通过apk安装

下载apk安装到手机

opengapps_app

各种开源Android 系统定制

Veröffentlicht am 2016-12-19

#MIUI
MIUI
MIUI是由小米科技开发的Android装置系统。2016年2月24日,MIUI全球用户超过1.7亿。部分开源代码托管在GitHub

官网

国际网站

http://miuiandroid.com/

#Flyme
Flyme

Flyme GitHub

Flyme OS是由魅族科技开发的基于AOSP或YunOS的设备固件。

官网

#AOSP
AOSP

“Android Open-Source Project”的缩写
中文意为”Android 开放源代码项目”

android原生态的系统。

官网

#CyanogenMod
CyanogenMod

CyanogenMod(英语发音:/saɪ.ˈæn.oʊ.ˌdʒɛn.mɒd/),缩写作“CM”,是一个基于Android,供智能手机和平板电脑使用的操作系统固件。它是基于Google发布的Android源码,再加上原创或第三方程式码而开发的开放源代码软件,并使用滚动更新开发模式。

GitHub

官网

#PAC-ROM
PAC-ROM

PAC - ROM是只读存储器与许多定制选项一起提供了一个纯粹的Android界面。正如它的名字一样,它像偏执狂的Android.

官网

GitHub

各种Android手机Root方法

Veröffentlicht am 2016-12-19

##Root的介绍

 谷歌的android系统管理员用户就叫做root,该帐户拥有整个系统至高无上的权利,它可以访问和修改你手机几乎所有的文件,只有root才具备最高级别的管理权限。我们root手机的过程也就是获得手机最高使用权限的过程。同时为了防止不良软件也取得root用户的权限,当我们在root的过程中,还会给系统装一个程序,用来作为运行提示,由用户来决定,是否给予最高权限。这个程序的名字叫做Superuser.apk。当某些程序执行su指令想取得系统最高权限的时候,Superuser就会自动启动,拦截该动作并作出询问,当用户认为该程序可以安全使用的时候,那么我们就选择允许,否则,可以禁止该程序继续取得最高权限。Root的过程其实就是把su文件放到/system/bin/ Superuser.apk 放到system/app下面,还需要设置/system/bin/su可以让任意用户可运行,有set uid和set gid的权限。即要在android机器上运行命令:adb shell chmod 4755 /system/bin/su。而通常,厂商是不会允许我们随便这么去做的,我们就需要利用操作系统的各种漏洞,来完成这个过程。

特别说明:我们烧机中的Eng版本并没有Root权限

##说明
 想手机root必须要在android系统内加入su程序,再安装对su管理的apk程序。

##方法
 在手机刷了第三方的recovery前提下,通过刷zip的方式刷入su和apk程序。

##步骤

###去官网下载SuperSU压缩包
网址http://www.supersu.com/

可能需要翻墙
进入该网站后进入download

下载压缩包

进入recovery,刷入zip文件

FileZillaFTP使用教程

Veröffentlicht am 2016-12-19

s

FileZillaServer.exe服务启动和关闭程序

FileZilla Server Interface.exe 服务 管理程序 配置ftp服务器的用户名,密码,目录,目录读写权限

启动FileZillaServer后点击FileZilla Server Interface.exe 默认配置 点确定 用于映射本地端口 连接的时候使用默认FTP端口

s

s

Logged on表示登陆成功

点击人头图标,配置服务器选项

s

s

设置完毕后直接点击确定,使配置生效。

客户端连接设置

s

关掉FileZilla Server Interface配置程序后,只要后台服务还在运行,FTP服务器就可以连接

Android手机刷recovery

Veröffentlicht am 2016-12-19

##以前觉得android刷机是件很麻烦的事,现在倒不觉得了。

 只要手机刷入第三方的recovery,一切都好办了,无论是root还是刷google play。

 recovery开源的有两大阵营,twrp和cwm。

TWRP GitHub

TWRP下载

查找适合你手机机型的recovery

https://twrp.me/Devices/

Search

CyanogenMod源码中附带CWM源码,使用CyanogenMod可生成recovery镜像文件。

找到适合自己机型的recovery后,手机进入fastboot模式(手机都有这个模式,进入该模式方法不一样而已),数据线链接电脑,装好驱动,在Android工具目录下执行以下指令。

fastboot flash recovery recovery.img

成功后会显示,成功提示。

然后点电源键强制关机,后重启,进入recover模式。然后就可以刷任何zip文件了

##补充

有些手机可能还需要解锁

可以参考我另一篇文章

http://www.cnblogs.com/QUSIR/p/6179506.html

mediastreamer使用教程

Veröffentlicht am 2016-12-19

#mediastreamer使用教程

##1.各个函数功能简介
ms_filter_destroy 释放filter资源

ms_ticker_destroy释放ticker

说明:ticker为定时器线程,每隔10ms执行一次

ms_filter_new创建filter,传进参数为filter的ID

ms_connection_helper_start拿到filter链接起始位置

ms_connection_helper_link链接filter

ms_filter_link链接filter

ms_ticker_new创建ticker

ticker说明:

ticker是属于一个线程不能够运行两个阻塞式的过程,比如socks的发送与接收,必须将
发送和接收放在filter线程里面。

ms_ticker_set_name设置ticker名称

ms_ticker_attach将ticker附加到线程中

ms_ticker_detach去掉ticker

ms_connection_helper_unlink去掉filter链接

ms_filter_unlink 去掉filter链接

ms_new filter数据结构创建

ms_free 数据结构数据释放

ms_queue_get(f->inpputs[0])获取filter数据

msgdsize获取filter里面数据长度

ms_queue_put(f->outputs[0],om)往filter里面塞数据

freemsg释放filter数据

ms_thread_join在filter里面创建线程

ms_filter_call_method往filter里面发送数据

##2.创建filter过程

###2.1在Allfilters.h里面添加filter的ID

###2.2在Alldescs.h里面添加filter结构体变量

###2.3在实现filter的源文件里面添加相关头文件

#include "msfilter.h"
#include "msticker.h"

###2.4.一个标准的filter过程

#include "msfilter.h"
#include "msticker.h"

static void enc_init(MSFilter *f){

}

static void enc_uninit(MSFilter *f){

}

static void enc_preprocess(MSFilter *f)
{
}

static void enc_process(MSFilter *f){


}

static void enc_postprocess(MSFilter *f){
}

static MSFilterMethod enc_methods[]={
        {0,NULL}
};

MSFilterDesc ms_amr_enc_desc={
        MS_AMR_ENCODER_ID, //filter ID
        "amrEnc",  //filter名称
        "amr encoder",
        MS_FILTER_ENCODER,  //filter类型MS_FILTER_OTHER 其他,
                            //MS_FILTER_ENCODER 编码器,
                            //MS_FILTER_DECODER 解码器
        "amr",
        1,
        1,
        enc_init,   //初始化操作
        enc_preprocess,  //预初始化操作
        enc_process,   //处理过程
        enc_postprocess,  //预结束操作
        enc_uninit,  //结束操作
        enc_methods  //程序模块方法,用于参数传递
};


static void dec_init(MSFilter *f){

}

static void dec_uninit(MSFilter *f){

}

static void dec_preprocess(MSFilter *f){
}

static void dec_postprocess(MSFilter *f){
}

static void dec_process(MSFilter *f){

}

static MSFilterMethod dec_methods[]={
        {0,NULL}
};

MSFilterDesc ms_amr_dec_desc={
        MS_AMR_DECODER_ID,
        "amrDec",
        "amr decoder",
        MS_FILTER_DECODER,
        "amr",
        1,
        1,
        dec_init,
        dec_preprocess,
        dec_process,
        dec_postprocess,
        dec_uninit,
        dec_methods
};

MS_FILTER_DESC_EXPORT(ms_amr_dec_desc)
MS_FILTER_DESC_EXPORT(ms_amr_enc_desc)

##3.替换编码器

将原来silk编码器换为amr编码器

###3.1创建amr的filter

stream->decoder=ms_filter_new(MS_AMR_DECODER_ID);

###3.2链接编码filter

ms_filter_link(stream->tcpRecv,0,stream->decoder,0);

##4.filter创建注意事项

###4.1 filter里面数据流要对应

MSFilterDesc ms_amr_dec_desc={
        MS_AMR_DECODER_ID,
        "amrDec",
        "amr decoder",
        MS_FILTER_DECODER,
        "amr",
        1,  //进
        1,  //出
        dec_init,
        dec_preprocess,
        dec_process,
        dec_postprocess,
        dec_uninit,
        dec_methods
};

以上是编码器filter,是一进一出,原始数据进去出来编码后的数据。

MSFilterDesc ms_tcpclient_send_desc={
        MS_TCP_SEND_ID,
        "TcpClientSend",
        "TcpClient_Send",
        MS_FILTER_OTHER,
        "tcpclient",
        1,  //进
        0,  //出
        tcp_send_init,
        tcp_send_preprocess,
        tcp_send_process,
        tcp_send_postprocess,
        tcp_send_uninit,
        tcpclient_send_methods
};

以上是TCP数据发送filter,只有进没有出,数据进来之后都发送数据都发送出去了

###4.2 filter里面new的结构体数据要记得free

##5.例子:一个音频流启动过程

#include "mediastreamer/audiostream.h"
#include "rtpsession.h"
#include "mediastreamer/msrtp.h"
#include "mediastreamer/mssndcard.h"
#include "mediastreamer/msvolume.h"
#include"mediastreamer/TcpClientFilter.h"
#include <signal.h>
#include <stdio.h>

static ms_mutex_t stream_mutex;

//初始化结构体数据
AudioStream* audio_stream_new() {
    AudioStream *stream = (AudioStream *)ms_new0 (AudioStream, 1);
    return stream;
}
//释放音频流
void audio_stream_free(AudioStream *stream) {

    if(stream->source!=NULL)
        ms_filter_destroy(stream->source);
    if(stream->encoder!=NULL)
        ms_filter_destroy(stream->encoder);

        if(stream->tcpSend!=NULL)
                ms_filter_destroy(stream->tcpSend);
        if(stream->tcpRecv!=NULL)
                ms_filter_destroy(stream->tcpRecv);
        if(stream->dest!=NULL)
                ms_filter_destroy(stream->dest);

        if(stream->ticker!=NULL)
        {
                printf("ms_ticker_destroy begin r 41\n");
        ms_ticker_destroy(stream->ticker);
                printf("ms_ticker_destroy end  r43 audiostream.c \n");
        }


    ms_free(stream);
        ms_mutex_destroy(&stream_mutex);
        printf("ms_free(stream) end \n");
}

#define payload_type_set_number2(pt,n)    (pt)->user_data=(void*)((long)n);
static void dp_set_payload_type(PayloadType *const_pt, int number, const char *recv_fmtp)
{
    payload_type_set_number2(const_pt, number);

    rtp_profile_set_payload(&av_profile,number,const_pt);
}
//启动音频流
int audio_stream_start(AudioStream *stream,char* SeverIp, int SeverPort, char (*localSessionID)[4], char (*remoteSessioID)[4]){


        ms_mutex_init(&stream_mutex,NULL);
        ms_mutex_lock(&stream_mutex);
    if(stream==NULL)
        {
            ms_mutex_unlock(&stream_mutex);
            return -1;
        }

        stream->decoder=ms_filter_new(MS_AMR_DECODER_ID);
        if(stream->decoder==NULL){
                        return -1;
        }

        stream->encoder=ms_filter_new(MS_AMR_ENCODER_ID);
        if(stream->encoder==NULL){
                        return -2;
        }

        stream->tcpSend=ms_filter_new(MS_TCP_SEND_ID);
        if(stream->tcpSend==NULL){
                ms_mutex_unlock(&stream_mutex);
                return -9;
        }

        ms_filter_call_method(stream->tcpSend,MS_TCP_SEND_SET_LOCAL_FRAG,localSessionID[0]);
        ms_filter_call_method(stream->tcpSend,MS_TCP_SEND_SET_REMOTE_FRAG,remoteSessioID[0]);
        if(ms_filter_call_method(stream->tcpSend,MS_TCP_SEND_LOGIN,0)!=0){
                printf("audiostream.c::audio_stream_start_call - TcpSendFilter fail to login\n");
                ms_mutex_unlock(&stream_mutex);
                return -19;
        }

        stream->tcpRecv=ms_filter_new(MS_TCP_READ_ID);
        if(stream->tcpRecv==NULL){
                ms_mutex_unlock(&stream_mutex);
                return -10;
        }
        printf("audiostream.c::audio_stream_start_call - local:%02x%02x%02x%02x remote:%02x%02x%02x%02x",localSessionID[1][0]&0xff,localSessionID[1][1]&0xff,localSessionID[1][2]&0xff,localSessionID[1][3]&0xff,
                  remoteSessioID[1][0]&0xff,remoteSessioID[1][1]&0xff,remoteSessioID[1][2]&0xff,remoteSessioID[1][3]&0xff);
        ms_filter_call_method(stream->tcpRecv,MS_TCP_READ_SET_LOCAL_FRAG,localSessionID[1]);
        ms_filter_call_method(stream->tcpRecv,MS_TCP_READ_SET_REMOTE_FRAG,remoteSessioID[1]);
        if(ms_filter_call_method(stream->tcpRecv,MS_TCP_READ_LOGIN,0)!=0){
                printf("audiostream.c::audiio_stream_start_call - TcpReadFilter fail to login\n");
                ms_mutex_unlock(&stream_mutex);
                return -20;
        }

        stream->source=ms_filter_new(MS_LINUX_SOUND_READ_ID);
        if(stream->source==NULL){
                ms_mutex_unlock(&stream_mutex);
                return -2;
        }

        stream->dest=ms_filter_new(MS_LINUX_SOUND_WRITE_ID);
        if(stream->dest==NULL){
                ms_mutex_unlock(&stream_mutex);
                return -8;
        }

        ms_filter_link(stream->tcpRecv,0,stream->decoder,0);
        ms_filter_link(stream->decoder,0,stream->dest, 0);
        ms_filter_link(stream->source,0,stream->encoder,0);
        ms_filter_link(stream->encoder,0,stream->tcpSend,0);

        stream->ticker = ms_ticker_new();
        if(stream->ticker==NULL){
                ms_mutex_unlock(&stream_mutex);
                return -6;
        }

        ms_ticker_set_name(stream->ticker,"Audio MSTicker");

        ms_ticker_attach(stream->ticker, stream->source);

        ms_ticker_attach(stream->ticker, stream->tcpRecv);

        ms_mutex_unlock(&stream_mutex);
    return 0;
}
//关闭音频流
void audio_stream_stop(AudioStream *stream) {
        /* detach */

        ms_mutex_lock(&stream_mutex);

        int i=0;

        if(stream->ticker != NULL && stream->source!=NULL)
                ms_ticker_detach(stream->ticker, stream->source);

        if(stream->ticker != NULL && stream->tcpRecv!=NULL)
                   ms_ticker_detach(stream->ticker,stream->tcpRecv);

        if(stream->tcpRecv!=NULL && stream->decoder!=NULL)
                ms_filter_unlink(stream->tcpRecv, 0, stream->decoder, 0);


        if(stream->decoder!=NULL && stream->dest!=NULL)
                ms_filter_unlink(stream->decoder, 0, stream->dest, 0);

        if(stream->source!=NULL && stream->encoder!=NULL)
                ms_filter_unlink(stream->source, 0, stream->encoder, 0);

        if(stream->encoder!=NULL && stream->tcpSend!=NULL)
        {
                printf("ms_filter_unlink(stream->encoder, 0, stream->tcpSend, 0) \n\n");
                ms_filter_unlink(stream->encoder, 0, stream->tcpSend, 0);
        }

        /* destroy filter */
        ms_mutex_unlock(&stream_mutex);
        audio_stream_free(stream);
        printf("audio_stream_stop 10\n");
}
1…56

我思,故我在!

58 Artikel
© 2018 我思,故我在!
Erstellt mit Hexo
|
Theme — NexT.Muse v5.1.4