導航:首頁 > 操作系統 > android音視頻開發

android音視頻開發

發布時間:2022-02-01 17:16:14

A. android短視頻開發哪家做的比較好

騰訊微視比較好,
微視是騰訊公司開發的一個短視頻分享軟體,
你可以通過該軟體上傳一個8秒的短視頻,各種創意,美女,圖片等等,
還可以分段的拍攝,很多明星都在玩。可以支持相片、微視頻、長視頻的拍攝。

B. Android 開發 如何實現高質量的錄音

在移動APP開發中,每逢APP應用設計到多媒體開發的時候,都會讓很多的程序員頭疼不已,而且項目的開發進度會放慢、項目
的難度也會加大蠻多,同時APP的測試也會增加。Android中的多媒體開發,有音頻的播放、音頻的錄制、視頻的播放、視頻的錄制
等,雖然Android的SDK中提供了一些基礎的開發API類,如音頻的錄制就提供了兩種方式:AudioRecord錄制音頻和MediaRecorder錄
制音頻。AudioRecord類相對於MediaRecorder來說,更加接近底層,為我們封裝的方法也更少。然而實現一個AudioRecord的音頻錄
製程序也很簡單。
一、AudioRecord實現錄制音頻:
package com.hb56.MyAndroidUtil;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.hardware.Camera.AutoFocusCallback;
import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioRecord;
import android.media.AudioTrack;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

/**
* 該實例中,我們使用AudioRecord類來完成我們的音頻錄製程序
* AudioRecord類,我們可以使用三種不同的read方法來完成錄制工作,
* 每種方法都有其實用的場合
* 一、實例化一個AudioRecord類我們需要傳入幾種參數
* 1、AudioSource:這里可以是MediaRecorder.AudioSource.MIC
* 2、SampleRateInHz:錄制頻率,可以為8000hz或者11025hz等,不同的硬體設備這個值不同
* 3、ChannelConfig:錄制通道,可以為AudioFormat.CHANNEL_CONFIGURATION_MONO和AudioFormat.CHANNEL_CONFIGURATION_STEREO
* 4、AudioFormat:錄制編碼格式,可以為AudioFormat.ENCODING_16BIT和8BIT,其中16BIT的模擬性比8BIT好,但是需要消耗更多的電量和存儲空間
* 5、BufferSize:錄制緩沖大小:可以通過getMinBufferSize來獲取
* 這樣我們就可以實例化一個AudioRecord對象了
* 二、創建一個文件,用於保存錄制的內容
* 同上篇
* 三、打開一個輸出流,指向創建的文件
* DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(file)))
* 四、現在就可以開始錄制了,我們需要創建一個位元組數組來存儲從AudioRecorder中返回的音頻數據,但是
* 注意,我們定義的數組要小於定義AudioRecord時指定的那個BufferSize
* short[]buffer = new short[BufferSize/4];
* startRecording();
* 然後一個循環,調用AudioRecord的read方法實現讀取
* 另外使用MediaPlayer是無法播放使用AudioRecord錄制的音頻的,為了實現播放,我們需要
* 使用AudioTrack類來實現
* AudioTrack類允許我們播放原始的音頻數據
*
*
* 一、實例化一個AudioTrack同樣要傳入幾個參數
* 1、StreamType:在AudioManager中有幾個常量,其中一個是STREAM_MUSIC;
* 2、SampleRateInHz:最好和AudioRecord使用的是同一個值
* 3、ChannelConfig:同上
* 4、AudioFormat:同上
* 5、BufferSize:通過AudioTrack的靜態方法getMinBufferSize來獲取
* 6、Mode:可以是AudioTrack.MODE_STREAM和MODE_STATIC,關於這兩種不同之處,可以查閱文檔
* 二、打開一個輸入流,指向剛剛錄制內容保存的文件,然後開始播放,邊讀取邊播放
*
* 實現時,音頻的錄制和播放分別使用兩個AsyncTask來完成
*/
/**
* 利用AudioRecord類實現自己的音頻錄製程序
* com.hb56.MyAndroidUtil.AudioRecord
*
* @author Admin-zhangyx
*
* create at 2014-10-16 下午2:03:13
*/
public class AudioRecordActivity extends Activity{
private TextView stateView;
private Button btnStart, btnStop, btnPlay, btnFinish;
private RecordTask recorder;
private PlayTask player;
private File audioFile;
private boolean isRecording = true, isPlaying = false; // 標記
private int frequence = 8000; // 錄制頻率,單位hz.這里的值注意了,寫的不好,可能實例化AudioRecord對象的時候,會出錯。我開始寫成11025就不行。這取決於硬體設備
private int channelConfig = AudioFormat.CHANNEL_CONFIGURATION_MONO;
private int audioEncoding = AudioFormat.ENCODING_PCM_16BIT;

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_audio_record);
stateView = (TextView) this.findViewById(R.id.view_state);
stateView.setText("准備開始");
btnStart = (Button) this.findViewById(R.id.btn_start);
btnStop = (Button) this.findViewById(R.id.btn_stop);
btnPlay = (Button) this.findViewById(R.id.btn_play);
btnFinish = (Button) this.findViewById(R.id.btn_finish);
btnFinish.setText("停止播放");
btnStop.setEnabled(false);
btnPlay.setEnabled(false);
btnFinish.setEnabled(false);

// 在這里我們創建一個文件,用於保存錄制內容
File fpath = new File(Environment.getExternalStorageDirectory()
.getAbsolutePath() + "/data/files/");
fpath.mkdirs();// 創建文件夾
try {
// 創建臨時文件,注意這里的格式為.pcm
audioFile = File.createTempFile("recording", ".pcm", fpath);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public void onClick(View v) {
int id = v.getId();
switch (id) {
case R.id.btn_start:
// 開始錄制

// 這里啟動錄制任務
recorder = new RecordTask();
recorder.execute();

break;
case R.id.btn_stop:
// 停止錄制
this.isRecording = false;
// 更新狀態
// 在錄制完成時設置,在RecordTask的onPostExecute中完成
break;
case R.id.btn_play:

player = new PlayTask();
player.execute();
break;

http://www.2cto.com/kf/201503/382894.html

C. android 實現實時語音功能選擇接入哪個音視頻sdk好

可以考慮接入即構科技的音視頻sdk,他們的音視頻sdk平台兼容性強,可覆蓋 iOS、Android、Windows、macOS、Web、小程序並支持平台間互通,支持 32 路實時音視頻互動,能夠為開發者提供便捷接入、高清流暢、低延遲、高並發的音視頻服務,而且4 行代碼極速接入, 30 分鍾內即可構建完畢。

D. 有基於Android studio 的音樂播放器開發教程嗎

這有個eclipse開發的, android視頻音樂播放器的demo, eclipse跟android studio也就是開發工具不一樣而已,代碼原理都是一樣的.

E. android開發音樂播放器MediaPlayer.prepare()

MediaPlayer類可用於控制音頻/視頻文件或流的播放,我曾在《Android開發之基於Service的音樂播放器》一文中介紹過它的使用。下面讓我們看一下MediaPlayer類的詳細介紹。
一、類結構:

java.lang.Object



android.media.MediaPlayer

二、構造方法和公有方法
構造方法:

Public Constructors

MediaPlayer()
默認構造方法。

公有方法:

Public Methods

static MediaPlayer

create(Context context, Uri uri, SurfaceHolder holder)
指定從資源ID對應的資源文件中來裝載音樂文件,同時指定了SurfaceHolder對象並返回MediaPlyaer對象。

static MediaPlayer

create(Context context, int resid)
指定從資源ID對應的資源文件中來裝載音樂文件,並返回新創建的MediaPlyaer對象。

static MediaPlayer

create(Context context, Uri uri)
從指定Uri裝在音頻文件,並返回新創建的MediaPlayer對象。

int

getCurrentPosition()
獲取當前播放的位置。

int

getDuration()
獲取音頻的時長。

int

getVideoHeight()
獲取視頻的高度。

int

getVideoWidth()
獲取視頻的寬度。

boolean

isLooping()
判斷MediaPlayer是否正在循環播放。

boolean

isPlaying()
判斷MediaPlayer是否正在播放。

void

pause()
暫停播放。

void

prepare()
准備播放(裝載音頻),調用此方法會使MediaPlayer進入Prepared狀態。

void

prepareAsync()
准備播放非同步音頻。

void

release()
釋放媒體資源。

void

reset()
重置MediaPlayer進入未初始化狀態。

void

seekTo(int msec)
尋找指定的時間位置。

void

setAudioStreamType(int streamtype)
設置音頻流的類型。

void

setDataSource(String path)
指定裝載path路徑所代表的文件。

void

setDataSource(Context context, Uri uri, Map<String, String headers)
指定裝載uri所代表的文件。

void

setDataSource(Context context, Uri uri)
指定裝載uri所代表的文件。

void

setDataSource(FileDescriptor fd, long offset, long length)
指定裝載fd所代表的文件中從offset開始長度為length的文件內容。

void

setDataSource(FileDescriptor fd)
指定裝載fd所代表的文件。

void

setDisplay(SurfaceHolder sh)
設置顯示方式。

void

setLooping(boolean looping)
設置是否循環播放。

void

setNextMediaPlayer(MediaPlayer next)
設置當前流媒體播放完畢,下一個播放的MediaPlayer。

void

setOnBufferingUpdateListener(MediaPlayer.OnBufferingUpdateListener listener)
注冊一個回調函數,在網路視頻流緩沖變化時調用。

void

setOnCompletionListener(MediaPlayer.OnCompletionListener listener)
為Media Player的播放完成事件綁定事件監聽器。

void

setOnErrorListener(MediaPlayer.OnErrorListener listener)
為MediaPlayer的播放錯誤事件綁定事件監聽器。

void

setOnPreparedListener(MediaPlayer.OnPreparedListener listener)
當MediaPlayer調用prepare()方法時觸發該監聽器。

void

setOnSeekCompleteListener(MediaPlayer.OnSeekCompleteListener listener)
當MediaPlayer調用seek()方法時觸發該監聽器。

void

setOnVideoSizeChangedListener(MediaPlayer.OnVideoSizeChangedListener listener)
注冊一個用於監聽視頻大小改變的監聽器。

void

setScreenOnWhilePlaying(boolean screenOn)
置是否使用SurfaceHolder來顯示。

void

setSurface(Surface surface)
設置Surface。

void

setVideoScalingMode(int mode)
設置視頻縮放的模式。

void

setVolume(float leftVolume, float rightVolume)
設置播放器的音量。

void

setWakeMode(Context context, int mode)
為MediaPlayer設置低級電源管理行為。.

void

start()
開始或恢復播放。

void

stop()
停止播放。

三、常用方法分析:
1.使用進度條:
進度條SeekBar可以用來顯示播放進度,用戶也可以利用SeekBar的滑塊來控制音樂的播放。
SeekBar需要使用的一些方法:
setProgress(int value):設置滑塊的位置方法為。
setMax(int value):設置進度條的最大長度。
setOnSeekBarChangeListener(OnSeekBarChangeListener l):設置SeekBar的進度改變事件。
MusicPlayer需要使用的一些方法:
getDuration():獲得音樂長度為。
getCurrentPosition():獲得現在播放的位置。
seekTo(int msec):調用seekTo()方法可以調整播放的位置。
seekTo(int)方法是非同步執行的,所以它可以馬上返回,但是實際的定位播放操作可能需要一段時間才能完成,尤其是播放流形式的音頻/視頻。當實際的定位播放操作完成之後,內部的播放引擎會調用客戶端程序員提供的OnSeekComplete.onSeekComplete()回調方法。可以通過setOnSeekCompleteListener(OnSeekCompleteListener)方法注冊。
seekTo(int)方法也可以在其它狀態下調用,比如Prepared,Paused和PlaybackCompleted狀態。此外,目前的播放位置,實際可以調用getCurrentPosition()方法得到,它可以幫助如音樂播放器的應用程序不斷更新播放進度。
創建並使用進度條的步驟:
第一步:創建一個進度條

//進度條
static SeekBarskbMusic;
skbMusic=(SeekBar)findViewById(R.id.skbMusic);

第二步:為進度條的改變事件注冊並添加監聽器

skbMusic.setOnSeekBarChangeListener(sChangeListener);
/**
* SeekBar進度改變事件
*/
=new OnSeekBarChangeListener() {
@Override
publicvoid onStopTrackingTouch(SeekBar seekBar) {
//TODO Auto-generated method stub
//當拖動停止後,控制mediaPlayer播放指定位置的音樂
MusicService.mediaPlayer.seekTo(seekBar.getProgress());
MusicService.isChanging=false;
}
@Override
publicvoid onStartTrackingTouch(SeekBar seekBar) {
//TODO Auto-generated method stub
MusicService.isChanging=true;
}
@Override
publicvoid onProgressChanged(SeekBar seekBar,int progress,
boolean fromUser) {
//TODO Auto-generated method stub
}
};

第三步:設置進度條的最大長度:

//getDuration()方法要在prepare()方法之後,否則會出現Attempt to call getDuration without a valid mediaplayer異常
MusicBox.skbMusic.setMax(mediaPlayer.getDuration());//設置SeekBar的長度

第四步:更新進度條

//----------定時器記錄播放進度---------//
mTimer =new Timer();
mTimerTask =new TimerTask() {
@Override
publicvoid run() {
isTimerRunning=true;
if(isChanging==true)//當用戶正在拖動進度進度條時不處理進度條的的進度
return;
MusicBox.skbMusic.setProgress(mediaPlayer.getCurrentPosition());
}
};
//每隔10毫秒檢測一下播放進度
mTimer.schele(mTimerTask, 0, 10);

2.裝載音頻文件:
為了讓MediaPlayer來裝載指定音頻文件,MediaPlayer提供了如下簡單的靜態方法。
static MediaPlayer create(Context context, Uri uri):從指定Uri來裝載音頻文件,並返回新創建的MediaPlayer對象。
static MediaPlayer create(Context context, int resid):從 resid資源 ID對應的資源文件中裝載音頻文件,並返回新創建的MediaPlayer對象。
提示:上而這兩個方法用起來非常方便,但這兩個方法每次都會返回新創建的MediaPlayer對象,如來程序需要使用MediaPlayer循環播放多個音頻文件,使用MediaPlayer的靜態create方法就不太合適了,此時可通過MediaPlayer的setDataSource()方法來裝載指定的音頻文件。MediaPlayer提供了如下方法來指定裝載相應的音頻文件。
setDataSource(String path):指定裝載path路徑所代表的文件。
setDataSource(FileDescriptor fd, long offset,long length):指定裝載fd所代表的文件中從offset開始長度為length的文件內容。
setDataSource(FileDescriptor fd):指定裝載fd所代表的文件。
setDataSource(Context context, Uri uri):指定裝載uri所代表的文件。
提示:執行上面所示的setDataSource()方法之後,MediaPlayer並未真正去裝載那些音頻文件,還需要調用MediaPlayer的prepare()方法去准備音頻,所謂「准備」,就是讓MediaPlayer真正去裝載音頻文件。
使用已有的MediaPlayer對象裝載「一首」歌曲的代碼模板為:

mPlayer.reset();
//裝戰下一竹歌曲
mPlayer.setDataSource(M/mnt/sdcard/next.mp3);
//准備聲音 mPlayer.prepare();
"播放
mPlayer.start();
}
catch (IOException e)
e.printStackTrace();
}

3.與MediaPlayer有關的事件監聽器:
MediaPlayer提供了一些綁定事件監聽器的方法,用於監聽MediaPlayer播放過程中所發生的特定事件,綁定事件監聽器的方法如下。
setOnCompletionListener(MediaPlayer.OnCompletionListener listener):為 Media Player的播放完成事件綁定事件監聽器。
setOnErrorListener(MediaPlayer.OnErrorListener listener):為MediaPlayer的播放錯誤事件綁定事件監聽器。
setOnPreparedListener(MediaPlayer.OnPreparedListener listener):當 MediaPlayer調用prepare()方法時觸發該監聽器。
setOnSeekCompleteListener(MediaPlayer.OnSeekCompleteListener listener):當MediaPlayer調用seek()方法時觸發該監聽器。
因此可以在創建一個MediaPlayer對象之後,通過為該MediaPlayer綁定監聽器來監聽相應的事件,例如如下代碼:

//為MediaPlayer的播放完成事件綁定事件監聽器
mPlayer.setOnErrorListener(new OnErrorListener() {
@Override
publicboolean onError(MediaPlayer mp,int what,int extra) {
//TODO Auto-generated method stub
//針對錯誤進行相應的處理
// ... ...
}
});
//為MediaPlayer的播放完成講件綁定市件監聽器
mPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
publicvoid onCompletion(MediaPlayer mp) {
//TODO Auto-generated method stub
current++;
prepareAndPlay(current);
}
});

四、MediaPlayer播放不同來源的音頻文件:
1.播放應用的資源文件
播放應用的資源文件需要兩步即:
1) 調用MediaPlayer的create(Context context,int resid)方法加指定資源文件。
2) 調用 MediaPlayer的 start()、pause()、stop()等方法控制播放即可。
例如如下代碼:

MediaPlayer mPlayer=new MediaPlayer();
mPlayer.create(this, R.raw.music);

2. 播放應用的原始資源文件
播放應用的資源文件按如下步驟執行。
1) 調用 Context的 getAssets()方法獲取應用的 AssetManager。
2) 調用AssetManager對象的openFd(String name)方法打開指定的原生資源,該方法返回一個AssetFileDescriptor對象。
3) 調用 AssetFileDescriptor的 getFileDescriptor()、getStartOffset()和 getLength()方法來獲取音頻文件的FileDescriptor、開始位置、長度等。
4) 創建MediaPlayer對象(或利用已有的MediaPlayer對象),並調用MediaPlayer對象的setDataSource(FileDescriptor fd,long offset, long length)方法來裝載音頻資源。
5) 調用MediaPlayer對象的prepare()方法准備音頻。
6) 調用MediaPlayer的start()、pause()、stop()等方法控制播放即可。
例如如下代碼片段:

//獲取assets目錄下指定文件的AssetFileDescriptor對象
AssetFileDescriptor assetFileDescriptor=assetManager.openFd(musics[current]);
mediaPlayer.reset();//初始化mediaPlayer對象
mediaPlayer.setDataSource(assetFileDescriptor.getFileDescriptor(), assetFileDescriptor.getStartOffset(), assetFileDescriptor.getLength());
//准備播放音樂
mediaPlayer.prepare();
//播放音樂
mediaPlayer.start();

3. 播放外部存儲器上音頻文件
播放外部存儲器上音頻文件按如下步驟執行。
1) 創建MediaPlayer對象(或利用已有的MediaPlayer對象),並調用MediaPlayer對象的setDateSource(String path)方法裝載指定的音頻文件。
2) 調用MediaPlayer對象的prepare()方法准備音頻。
3) 調用MediaPlayer的start()、pause()、stop()等方法控制播放即可。
例如如下代碼:

//載入SD卡上的指定資源音頻文件
mPlayer.setDataSource("/mnt/You Are The One.mp3");
mPlayer.prepare();//准備因音頻
mPlayer.start();//播放音頻

4.播放來自網路的音頻文件
播放來自網路的音頻文件冇兩種方式:1.直接使用MediaPlayer的靜態create(Context context, Uri uri)方法;2.調用 MediaPlayer的setDataSource(Context context,Uri uri)裝載指定Uri對應的音頻文件。
以第二種方式播放來自網路的音頻文件的步驟如下。
1. 根據網路上的音頻文件所在的位置創建Uri對象。
2. 創建MediaPlayer對象(或利用己有的MediaPlayer對象),並調用MediaPlayer對象的 setDateSource(Context context,Uri uri)方法裝載Uri對應的音頻文件。
3. 調用MediaPlayer對象的prepare()方法准備音頻。
4. 調用MediaPlayer的start()、pause()、stop()等方法控制播放即可。

F. android音視頻開發怎麼做

android音視頻開發要想不費什麼功夫的話,可以選擇接入第三方的SDK,比如ZEGO即構科技,開發者可以調用ZEGO的API,4行代碼30分鍾就可以在應用內搭建出音視頻場景,應用在視頻會議、語音交友、秀場直播都可以

G. Android開發音視頻本地播放器,誰知道有好的

Android開發音視頻可以直接用zego的音視頻SDK

H. 【安卓開發】如何實現視頻靜音,同時播放一個後台音樂

可以在視頻軟體中控制聲音就可以了

I. android 視頻通話開發用什麼SDK比較流暢穩定

即構科技的實時音視頻SDK可以看下,提供的實時音視頻SDK支持實時多人視頻,滿足視頻會議或者在線教育課堂等各類視頻聊天場景的需求,高穩定、低延時

J. android 開發 音頻文件放哪裡

在Android中,音頻、視頻等多媒體元素的加入,使得應用程序的用戶體驗更好。可以說,現在的手機,已經遠遠不只作為通信工具,更成為娛樂、辦公的必備產品。

Android提供了簡單的音頻API。一般大家使用的是MediaPlayer播放音頻,這也是最常見的一種播放聲音的工具。這種工具在互聯網上有大量的實例,因此在此只做簡單的介紹。

對播放行為的控制是三個大家非常熟悉的方法:start()、stop()和pause()。
通過static MediaPlayer create(Context, Uri)這個方法,可以獲得一個新創建的MediaPlayer對象。
在播放過程中,有幾個可以監聽播放過程的監聽器,如:
n setOnCompletionListener(MediaPlayer.OnCompletionListener listener),監聽音頻播放結束;
n setOnErrorListener(MediaPlayer.OnErrorListener listener),監聽播放過程中的錯誤事件;
n setOnPreparedListener(MediaPlayer.OnPreparedListener listener),當prepare()被調用時觸發。
然而,使用MediaPlayer播放時,也有一些問題。我們知道MediaPlayer在創建和銷毀時都會耗費大量的系統資源,且創建和銷毀的時間相對較長。此外,如果我們需要在同一時刻播放很多聲音,MediaPlayer是不支持的。
因此,我們需要一個更加輕量級的聲音播放工具。

閱讀全文

與android音視頻開發相關的資料

熱點內容
oss壓縮上傳 瀏覽:974
藍色學校網站源碼 瀏覽:823
androidgridview表格 瀏覽:602
壓縮怎麼eq閃 瀏覽:740
流密碼演算法openssl 瀏覽:262
怎麼數黃豆個數python 瀏覽:799
混沌序列加密的結論 瀏覽:224
最新脫單app哪個好 瀏覽:638
如何用自己電腦做伺服器做網頁 瀏覽:140
伺服器安全配置要考什麼證書 瀏覽:633
ipadpro可以編程 瀏覽:541
外國的程序員和中國的程序員 瀏覽:151
抖音小店app如何聯系客服 瀏覽:975
linux打開多個終端 瀏覽:500
linux中的命令 瀏覽:580
優化小米6相機演算法 瀏覽:259
ak47pdf 瀏覽:150
人與文化pdf 瀏覽:642
原子幣app在哪裡注冊的 瀏覽:530
php數組保存文件 瀏覽:228