MediaCodec
首先,我们先向codec请求一个空的输入buffer,然后将它填满数据再交给codec处理。codec使用它的数据然后将它转换到一个空的buffer中去,最后我们会得到一个填满数据的输出buffer,消费这些数据然后将它归还给codec。
codec可以处理三种数据
-
ByteBuffers 用来传递数据给 编解码器
Surface 可以用来提升原始视频数据的性能,因为省去了到ByteBuffers的转换所以效率高,但是我们不能直接操作原始的视频数据,但是我们可以使用ImageReader来获取视频的关键帧。 同时相比于此,直接使用BytesBuffer可以使用Image 和 getInput/OutputImage(int)来操作数据。 -
Compressed Buffers
包含单独的压缩针,或者 a single access unit 单个访问单元 -
Raw Audio Buffers
包含完整的PCM数据,PCM数据有两种形式一种是16位的有符号整数另一种是浮点数。然后这个类型和设置的格式有一定的关系。
- Raw Video Buffers
VideoBuffer依赖于颜色模式,看定义似乎用很多具体 定义,但是文档上说有3种类型
a. native raw video format, This is marked by CodecCapabilities#COLOR_FormatSurface and it can be used with an input or output Surface.
b. flexible YUV buffers (such as CodecCapabilities#COLOR_FormatYUV420Flexible): These can be used with an input/output Surface, as well as in ByteBuffer mode, by using getInput/OutputImage(int).
c. other, specific formats: These are normally only supported in ByteBuffer mode. Some color formats are vendor specific. Others are defined in CodecCapabilities. For color formats that are equivalent to a flexible format, you can still use getInput/OutputImage(int).
The MediaFormat#KEY_WIDTH and MediaFormat#KEY_HEIGHT
keys specify the size of the video frames; 对于视频数据的一个剪切一个视频的大小
Socket
setsockopt
int setsockopt( int socket, int level, int option_name,const void option_value, size_t option_len);
sock:将要被设置或者获取选项的套接字。
level:选项所在的协议层。
optname:需要访问的选项名。
optval:对于getsockopt(),指向返回选项值的缓冲。对于setsockopt(),指向包含新选项值的缓冲。
optlen:对于getsockopt(),作为入口参数时,选项值的最大长度。作为出口参数时,选项值的实际长度。对于setsockopt(),现选项的长度。
level指定控制套接字的层次.可以取三种值:
1)SOL_SOCKET:通用套接字选项.
2)IPPROTO_IP:IP选项.
3)IPPROTO_TCP:TCP选项.
SOL_SOCKET
SO_BROADCAST 允许发送广播数据 int
SO_DEBUG 允许调试 int
SO_DONTROUTE 不查找路由 int
SO_ERROR 获得套接字错误 int
SO_KEEPALIVE 保持连接 int
SO_LINGER 延迟关闭连接 struct linger
SO_OOBINLINE 带外数据放入正常数据流 int
SO_RCVBUF 接收缓冲区大小 int
SO_SNDBUF 发送缓冲区大小 int
SO_RCVLOWAT 接收缓冲区下限 int
SO_SNDLOWAT 发送缓冲区下限 int
SO_RCVTIMEO 接收超时 struct timeval
SO_SNDTIMEO 发送超时 struct timeval
SO_REUSERADDR 允许重用本地地址和端口 int
SO_TYPE 获得套接字类型 int
SO_BSDCOMPAT 与BSD系统兼容 int
IPPROTO_IP
IP_HDRINCL 在数据包中包含IP首部 int
IP_OPTINOS IP首部选项 int
IP_TOS 服务类型
IP_TTL 生存时间 int
IPPRO_TCP
TCP_MAXSEG TCP最大数据段的大小 int
TCP_NODELAY 不使用Nagle算法 int
int pipe(int fd[2]);
函数参数
若函数调用成功,则fd[0]存放管道的读端,fd[1]存放管道的写端。
返回值
若成功,则返回0
若失败,则返回-1,并设置errno
文门可以使用管道来终断socket的等待
Socket & errno
https://blog.youkuaiyun.com/u010629326/article/details/76021420
Socket中errno为stdlib定义的错误代码,会根据实际情况返回给我吗