我是靠谱客的博主 迷人月亮,最近开发中收集的这篇文章主要介绍java 视频转字节码_java音视频编解码问题:16/24/32位位音频byte[]转换为小端序short[],int[],以byte[]转short[]为例...,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

前言:Java默认采用大端序存储方式,实际编码的音频数据是小端序,如果处理单8bit的音频当然不需要做转换,但是如果是16bit或者以上的就需要处理成小端序字节顺序。

注:大、小端序指的是字节的存储顺序是按从高到低还是从低到高的顺序存储,与处理器架构有关,Intel的x86平台是典型的小端序存储方式

1、Java中使用ByteOrder.LITTLE_ENDIAN表示小端序,ByteOrder.BIG_ENDIAN表示大端序

小端序:数据的高位字节存放在地址的低端 低位字节存放在地址高端

大端序:数据的高位字节存放在地址的高端 低位字节存放在地址低端

大端序是按照数字的书写顺序进行存储的,而小端序则是反顺序进行存储的。

Big-endian 存放顺序(顺序存储)

0x00000001           -- 12

0x00000002           -- 34

0x00000003           -- 56

0x00000004           -- 78

Little-endian 存放顺序(反序储存)

0x00000001           -- 78

0x00000002           -- 56

0x00000003           -- 34

0x00000004           -- 12

2、java中的大小端序转换

例如byte[]转成short[]:

假设data作为源音频数据,是一个byte[]

int dataLength=data.length;

//byte[]转成short[],数组长度缩减一半

int shortLength=dataLength/2;

//把byte[]数组装进byteBuffer缓冲

ByteBuffer byteBuffer=ByteBuffer.wrap(data, 0,dataLength);

//将byteBuffer转成小端序并获取shortBuffer

ShortBuffer shortBuffer=byteBuffer.order(ByteOrder.LITTLE_ENDIAN).asShortBuffer();

short[]shortSamples=new short[shortLength];

//取出shortBuffer中的short数组

shortBuffer.get(shortSamples,0,shortLength);

最后

以上就是迷人月亮为你收集整理的java 视频转字节码_java音视频编解码问题:16/24/32位位音频byte[]转换为小端序short[],int[],以byte[]转short[]为例...的全部内容,希望文章能够帮你解决java 视频转字节码_java音视频编解码问题:16/24/32位位音频byte[]转换为小端序short[],int[],以byte[]转short[]为例...所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部