android教程百度網(wǎng)盤免費資源在線學(xué)習(xí)

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:主機域名、虛擬主機、營銷軟件、網(wǎng)站建設(shè)、三穗網(wǎng)站維護、網(wǎng)站推廣。
鏈接:?
提取碼:?vqbq
android教程
千鋒教育Mars老師Android游戲開發(fā)教程-數(shù)獨-源碼下載(1)
千鋒教育Mars老師Android游戲開發(fā)教程-數(shù)獨-源碼下載
千鋒Android游戲開發(fā)視頻教程-游戲數(shù)獨-Mars力作(1)
千鋒Android游戲開發(fā)視頻教程-游戲數(shù)獨-Mars力作
千鋒Android應(yīng)用開發(fā)培訓(xùn)視頻教程-老羅在線課堂
千鋒Android應(yīng)用開發(fā)培訓(xùn)視頻教程-老羅典藏版
千鋒Android培訓(xùn)-Java視頻教程-Mars典藏版
Android游戲開發(fā)基礎(chǔ)視頻教程-cocos2dMars版
千鋒3G學(xué)院_Android游戲開發(fā)教程_數(shù)獨_08.mp4
千鋒3G學(xué)院_Android游戲開發(fā)教程_數(shù)獨_07.mp4
千鋒3G學(xué)院_Android游戲開發(fā)教程_數(shù)獨_06.mp4
千鋒3G學(xué)院_Android游戲開發(fā)教程_數(shù)獨_05.mp4
千鋒3G學(xué)院_Android游戲開發(fā)教程_數(shù)獨_04.mp4
千鋒3G學(xué)院_Android游戲開發(fā)教程_數(shù)獨_03.mp4
1029_Mars老師java for android視頻教程百度網(wǎng)盤免費資源在線學(xué)習(xí) ? ?鏈接:
提取碼: y1ij ? ?1029_Mars老師 java for android視頻教程 1154_JAVA語言程序設(shè)計_吉林大學(xué)遠程教育課程_康輝_教程之家 學(xué)習(xí)必讀-教程之家_教程之家 教程之家-高清教程門戶_教程之家 JAVA程序設(shè)計輔導(dǎo)2_教程之家 JAVA程序設(shè)計輔導(dǎo)1_教程之家 JAVA程序設(shè)計第48講_教程之家 JAVA程序設(shè)計第47講_教程之家 JAVA程序設(shè)計第46講_教程之家 JAVA程序設(shè)計第45講_教程之家 JAVA程序設(shè)計第44講_教程之家 JAVA程序設(shè)計第43講_教程之家 JAVA程序設(shè)計第42講_教程之家 JAVA程序設(shè)計第41講_教程之家 JAVA程序設(shè)計第40講_教程之家 ?
/**
* Android視頻聊天
* 1、初始化SDK 2、連接服務(wù)器、 3、用戶登錄;4、進入房間;5、打開本地視頻;6、請求對方視頻
*/
public class VideoChatActivity extends Activity implements AnyChatBaseEvent
{
private AnyChatCoreSDK anychat; // 核心SDK
private SurfaceView remoteSurfaceView; // 對方視頻
private SurfaceView localSurfaceView; // 本地視頻
private ConfigEntity configEntity;
private boolean bSelfVideoOpened = false; // 本地視頻是否已打開
private boolean bOtherVideoOpened = false; // 對方視頻是否已打開
private TimerTask mTimerTask; // 定時器
private Timer mTimer = new Timer(true);
private Handler handler; // 用Handler來不間斷刷新即時視頻
private ListString userlist = new ArrayListString();//保存在線用戶列表
private int userid; // 用戶ID
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_video_chat);
remoteSurfaceView = (SurfaceView) findViewById(R.id.surface_remote);
localSurfaceView = (SurfaceView) findViewById(R.id.surface_local);
configEntity = ConfigService.LoadConfig(this);//加載視頻通話設(shè)置
loginSystem();// 初始化SDK 連接服務(wù)器
mTimerTask = new TimerTask(){
public void run(){
Message mesasge = new Message();
handler.sendMessage(mesasge);
}
};
mTimer.schedule(mTimerTask, 1000, 100);
handler = new Handler(){
@Override
public void handleMessage(Message msg){
VideoChat();// 不間斷顯示即時視頻通話畫面
super.handleMessage(msg);
}
};
}
// 初始化SDK 連接服務(wù)器
private void loginSystem(){
if (anychat == null){
anychat = new AnyChatCoreSDK();
anychat.SetBaseEvent(this); // 設(shè)置基本事件回調(diào)函數(shù)
if (configEntity.useARMv6Lib != 0) // 使用ARMv6指令集
anychat.SetSDKOptionInt(AnyChatDefine.
BRAC_SO_CORESDK_USEARMV6LIB, 1);
anychat.InitSDK(android.os.Build.VERSION.SDK_INT, 0); // 初始化SDK
}
anychat.Connect("demo.anychat.cn", 8906);// 連接服務(wù)器
}
// 顯示即時視頻通話畫面
public void VideoChat(){
if (!bOtherVideoOpened){
if (anychat.GetCameraState(userid) == 2
anychat.GetUserVideoWidth(userid) != 0){
SurfaceHolder holder = remoteSurfaceView.getHolder();
holder.setFormat(PixelFormat.RGB_565);
holder.setFixedSize(anychat.GetUserVideoWidth(userid),
anychat.GetUserVideoHeight(userid));
Surface s = holder.getSurface(); // 獲得視頻畫面
anychat.SetVideoPos(userid, s, 0, 0, 0, 0); // 調(diào)用API顯示視頻畫面
bOtherVideoOpened = true;
}
if (!bSelfVideoOpened){
if (anychat.GetCameraState(-1) == 2
anychat.GetUserVideoWidth(-1) != 0){
SurfaceHolder holder = localSurfaceView.getHolder();
holder.setFormat(PixelFormat.RGB_565);
holder.setFixedSize(anychat.GetUserVideoWidth(-1),
anychat.GetUserVideoHeight(-1));
Surface s = holder.getSurface();
anychat.SetVideoPos(-1, s, 0, 0, 0, 0);
bSelfVideoOpened = true;
}
}
}
public void OnAnyChatConnectMessage(boolean bSuccess){
if (!bSuccess){
Toast.makeText(VideoChatActivity.this, "連接服務(wù)器失敗,自動重連,請稍后...", Toast.LENGTH_SHORT).show();
}
anychat.Login("android", ""); // 服務(wù)器連接成功 用戶登錄
}
public void OnAnyChatLoginMessage(int dwUserId, int dwErrorCode){
if (dwErrorCode == 0) {
Toast.makeText(this, "登錄成功!", Toast.LENGTH_SHORT).show();
anychat.EnterRoom(1, ""); // 用戶登錄成功 進入房間
ApplyVideoConfig();
} else {
Toast.makeText(this, "登錄失敗,錯誤代碼:" + dwErrorCode, Toast.LENGTH_SHORT).show();
}
}
public void OnAnyChatEnterRoomMessage(int dwRoomId, int dwErrorCode){
if (dwErrorCode == 0) { // 進入房間成功 打開本地音視頻
Toast.makeText(this, "進入房間成功", Toast.LENGTH_SHORT).show();
anychat.UserCameraControl(-1, 1); // 打開本地視頻
anychat.UserSpeakControl(-1, 1); // 打開本地音頻
} else {
Toast.makeText(this, "進入房間失敗,錯誤代碼:" + dwErrorCode, Toast.LENGTH_SHORT).show();
}
}
public void OnAnyChatOnlineUserMessage(int dwUserNum, int dwRoomId){
if (dwRoomId == 1){
int user[] = anychat.GetOnlineUser();
if (user.length != 0){
for (int i = 0; i user.length; i++){
userlist.add(user[i]+"");
. }
String temp =userlist.get(0);
userid = Integer.parseInt(temp);
anychat.UserCameraControl(userid, 1);// 請求用戶視頻
anychat.UserSpeakControl(userid, 1); // 請求用戶音頻
}
else {
Toast.makeText(VideoChatActivity.this, "當(dāng)前沒有在線用戶", Toast.LENGTH_SHORT).show();
}
}
}
public void OnAnyChatUserAtRoomMessage(int dwUserId, boolean bEnter){
if (bEnter) {//新用戶進入房間
userlist.add(dwUserId+"");
}
else { //用戶離開房間
if (dwUserId == userid)
{
Toast.makeText(VideoChatActivity.this, "視頻用戶已下線", Toast.LENGTH_SHORT).show();
anychat.UserCameraControl(userid, 0);// 關(guān)閉用戶視頻
anychat.UserSpeakControl(userid, 0); // 關(guān)閉用戶音頻
userlist.remove(userid+""); //移除該用戶
if (userlist.size() != 0)
{
String temp =userlist.get(0);
userid = Integer.parseInt(temp);
anychat.UserCameraControl(userid, 1);// 請求其他用戶視頻
anychat.UserSpeakControl(userid, 1); // 請求其他用戶音頻
}
}
141. else {
userlist.remove(dwUserId+""); //移除該用戶
}
}
}
public void OnAnyChatLinkCloseMessage(int dwErrorCode){
Toast.makeText(VideoChatActivity.this, "連接關(guān)閉,error:" + dwErrorCode, Toast.LENGTH_SHORT).show();
}
@Override
protected void onDestroy(){ //程序退出
anychat.LeaveRoom(-1); //離開房間
anychat.Logout(); //注銷登錄
anychat.Release(); //釋放資源
mTimer.cancel();
super.onDestroy();
}
// 根據(jù)配置文件配置視頻參數(shù)
private void ApplyVideoConfig(){
if (configEntity.configMode == 1) // 自定義視頻參數(shù)配置
{
// 設(shè)置本地視頻編碼的碼率(如果碼率為0,則表示使用質(zhì)量優(yōu)先模式)
anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_BITRATECTRL,configEntity.videoBitrate);
if (configEntity.videoBitrate == 0)
{
// 設(shè)置本地視頻編碼的質(zhì)量
anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_QUALITYCTRL,configEntity.videoQuality);
}
// 設(shè)置本地視頻編碼的幀率
anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_FPSCTRL,configEntity.videoFps);
// 設(shè)置本地視頻編碼的關(guān)鍵幀間隔
anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_GOPCTRL,configEntity.videoFps * 4);
// 設(shè)置本地視頻采集分辨率
anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_WIDTHCTRL,configEntity.resolution_width);
anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_HEIGHTCTRL,configEntity.resolution_height);
// 設(shè)置視頻編碼預(yù)設(shè)參數(shù)(值越大,編碼質(zhì)量越高,占用CPU資源也會越高)
anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_PRESETCTRL,configEntity.videoPreset);
}
// 讓視頻參數(shù)生效
anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_APPLYPARAM,configEntity.configMode);
// P2P設(shè)置
anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_NETWORK_P2PPOLITIC,configEntity.enableP2P);
// 本地視頻Overlay模式設(shè)置
anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_OVERLAY,configEntity.videoOverlay);
// 回音消除設(shè)置
anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_AUDIO_ECHOCTRL,configEntity.enableAEC);
// 平臺硬件編碼設(shè)置
anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_CORESDK_USEHWCODEC,configEntity.useHWCodec);
// 視頻旋轉(zhuǎn)模式設(shè)置
anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_ROTATECTRL,configEntity.videorotatemode);
// 視頻平滑播放模式設(shè)置
anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_STREAM_SMOOTHPLAYMODE,configEntity.smoothPlayMode);
// 視頻采集驅(qū)動設(shè)置
anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_CAPDRIVER,configEntity.videoCapDriver);
// 本地視頻采集偏色修正設(shè)置
anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_LOCALVIDEO_FIXCOLORDEVIA,configEntity.fixcolordeviation);
// 視頻顯示驅(qū)動設(shè)置
anychat.SetSDKOptionInt(AnyChatDefine.BRAC_SO_VIDEOSHOW_DRIVERCTRL,configEntity.videoShowDriver);
}
}
android教程百度網(wǎng)盤免費資源在線學(xué)習(xí)
鏈接:
android教程
千鋒教育Mars老師Android游戲開發(fā)教程-數(shù)獨-源碼下載(1)
千鋒教育Mars老師Android游戲開發(fā)教程-數(shù)獨-源碼下載
千鋒Android游戲開發(fā)視頻教程-游戲數(shù)獨-Mars力作(1)
千鋒Android游戲開發(fā)視頻教程-游戲數(shù)獨-Mars力作
千鋒Android應(yīng)用開發(fā)培訓(xùn)視頻教程-老羅在線課堂
千鋒Android應(yīng)用開發(fā)培訓(xùn)視頻教程-老羅典藏版
千鋒Android培訓(xùn)-Java視頻教程-Mars典藏版
Android游戲開發(fā)基礎(chǔ)視頻教程-cocos2dMars版
千鋒3G學(xué)院_Android游戲開發(fā)教程_數(shù)獨_08.mp4
千鋒3G學(xué)院_Android游戲開發(fā)教程_數(shù)獨_07.mp4
千鋒3G學(xué)院_Android游戲開發(fā)教程_數(shù)獨_06.mp4
千鋒3G學(xué)院_Android游戲開發(fā)教程_數(shù)獨_05.mp4
千鋒3G學(xué)院_Android游戲開發(fā)教程_數(shù)獨_04.mp4
千鋒3G學(xué)院_Android游戲開發(fā)教程_數(shù)獨_03.mp4
ffmpeg常用命令
封裝格式 。
編碼的本質(zhì)就是壓縮數(shù)據(jù)
音頻編碼的作用: 將音頻采樣數(shù)據(jù)( PCM 等)壓縮成音頻碼流,從而降低音頻的數(shù)據(jù)量。 常用的音頻編碼方式有以下幾種:
H264壓縮技術(shù)主要采用了以下幾種方法對視頻數(shù)據(jù)進行壓縮。包括:
經(jīng)過壓縮后的幀分為:I幀,P幀和B幀:
除了I/P/B幀外,還有圖像序列GOP。
組成碼流的結(jié)構(gòu)中,包含了以下幾個部分,從大到小依次是:
H264視頻序列,圖像,片組,片,NALU,宏塊,像素
H264功能分為兩層:
1.H264視頻序列包括一系列的NAL單元,每個NAL單元包含一個RBSP。
2.一個原始的H.264由 N個NALU單元組成
3.NALU單元由[StartCode][NALU Header][NALU Payload]三部分組成
5.NAL Header
由三部分組成forbidden_bit(1bit)(禁止位),nal_reference_bit(2bits)(優(yōu)先級,,值越大,該NAL越重要),nal_unit_type(5bits)(類型)
nal_unit_type
6.NAL的解碼單元的流程如下
網(wǎng)站標題:android開發(fā)視頻,android開發(fā)視頻輪播
分享路徑:http://chinadenli.net/article45/dsesjei.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、虛擬主機、云服務(wù)器、做網(wǎng)站、服務(wù)器托管、網(wǎng)站設(shè)計公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)