【无标题】

Android 音视频流媒体研发

1.Ubuntu环境搭建

创建Ubuntu Linux环境

安装相关的库

sudo apt-get install build-essential
sudo apt-get install autoconf  autogen  automake
sudo apt-get install cmake
2.Linux 进程与子进程
#include <unistd.h>
#include <stdio.h>

int main(){
	pid_t pid;
	//返回值 成功有两个值 子进程是返回的0  父进程返回的子进程的ID
	pid=fork();
	
	if(pid<0){
	    printf("fork error");
	}else if(pid==0){
	    printf("child space ,my id is :%d\n",getpid());
	}else{
	    printf("parent space,my id is :%d\n",getpid());
	}
	
	return 0;
	
}

通过fork函数创建线程,创建一个.c文件并进行编译运行

通过执行gcc命令进行编译,并输出可指定文件test,并执行可执行文件

gcc main.c -o test
./test
3.Linux POSIX 线程接口pthread 以及signal 信号

发送信号:signal(SIGINT,exitThreadProcess);

pthread_join,线程插入

pthread_cancel ,线程取消(不常用)

pthread_detach,线程分离,这样就交给CPU去控制了

#include <stdio.h>
#include <stdbool.h>
#include <pthread.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>


pthread_mutex_t m_mutex;
bool  m_thread_running = true;
int m_value = 0;

//接受发送的信号,对变量进行控制,从而控制线程是否运行
void exitThreadControll(int signal){
    printf("signal is %d,signal set m_thread_runing=false  \n",signal);
    m_thread_running=false;
}


void* threadProcess1(void* params){
    while(m_thread_running){
        pthread_mutex_lock(&m_mutex);
        m_value+=1;
        pthread_mutex_unlock(&m_mutex);
        printf("threadProcess1....%d \n",m_value);
        usleep(1000*1000); //单位是微妙
    }
    
    printf("thread process 1 is exit \n");
}



void* threadProcess2(void* params){
    while(m_thread_running){
        pthread_mutex_lock(&m_mutex);
        m_value+=1;
        pthread_mutex_unlock(&m_mutex);
        printf("threadProcess2....%d \n",m_value);
        usleep(1000*1000); //单位是微妙
    }
    
    printf("thread process 2 is exit \n");
}



int main(){

    pthread_t thread1;
    pthread_t thread2;
    
    pthread_mutex_init(&m_mutex,NULL);
    //给函数发送信号 
    signal(SIGINT,exitThreadControll);
    
    //创建线程
    pthread_create(&thread1,NULL,threadProcess1,NULL);
    pthread_create(&thread2,NULL,threadProcess2,NULL);
    
    //插入线程
    pthread_join(thread1,NULL);
    pthread_join(thread2,NULL);
    
    
    //销毁互斥锁
    pthread_mutex_destroy(&m_mutex);

    printf("----test thread \n");
    return 0;
}


通过gcc进行编译,生成可执行文件,并进行运行(注意:需要通过链接 -lpthread 来链接线程函数库,否则找不到pthread)

gcc thread_and_lock.c -o test_thread -lpthread
4.通过cmake对项目进行管理
4.1新建头文件PFMath.h
class CCMath
{
public:
    CCMath();
    ~CCMath();
};
4.2 新建PFMath.cpp
#include <stdio.h>
#include "PFMath.h"

PFMath::PFMath()
{
    printf("-----------PFMath ---------\n");
}

PFMath::~PFMath()
{
}
4.3 新建main.cpp
#include <stdio.h>
#include "PFMath.h"

int main(){
    PFMath pFMath;
    return 0;
}
4.4 新建CMakeLists.txt 配置文件
cmake_minimum_required(VERSION 3.5)
project(PFTEST VERSION 1.0.0)

SET(MATHLIB_SRC PFMath.cpp)
#add_executable命令用于使用指定的源文件向项目(project)添加可执行文件  意思增加PFTEST 这个作为可执行文件
add_executable(PFTEST main.cpp)
#创建动态库
add_library(PFTEST_LIB SHARED ${MATHLIB_SRC}) 
#将动态库链接到可执行文件中
target_link_libraries(PFTEST PFTEST_LIB)

新建build文件夹

#执行以下命令:
mkdir build
cd build
cmake ..
make
#执行上边的命令就能完成编译,并生成动态库以及可执行文件 PFTEST
./PFTEST #就可以看到执行的结果
5.文件读写

二进制文件读写,方便使用,一般使用fread和fwrite进行读写。

size_t fread(void *buf,size_t size,size_t count,FILE *fp);

size_t fwrite(void *buf,size_t size,size_t_count,FILE *fp);

size:单个元素的大小,一般写1

count:读写元素的数量

写入成功就返回count,如果遇到EOF就返回0;

读写模式:W+ 文件指针地址的位置开始写,替换到之后的内容,a+从问价的末尾开始添加

wb:二进制的方式写

rb:二进制的方式写

6.Socket套接字

Socket套接字是用用层根据TCP/IP UDP通信协议的的软件抽象。

TCP/IP(Transmission Control Portocol/Intenet Protocol) 即传输控制协议、网间协议

UDP(User Data Portocol,用户数据报协议)是与TCP相对应的协议

在这里插入图片描述

7.Linux系统进行音频采集alsa

安装alsa库

sudo  apt-get install libalsa-ocaml-dev

安装好之后,可以在/usr/lib/ocaml/alsa/看到静态库

ls /usr/lib/ocaml/alsa/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值