android網路視頻源碼
㈠ android 編程的開源視頻lvc運行源碼的時候出現如下問題,怎麼解決
不知道開元視頻lvc,但是看log是jni代碼載入出現問題
㈡ Android 使用MediaCodec實現視頻的無縫切換
網路上面很多視頻播放都是利用MediaPlayer+顯示視圖(SurfaceView、TextureView)進行本地或者網路視頻的播放。那麼利用MediaCodec對視頻流進行硬解碼的小夥伴該如何在不同的控制項之間無縫切換呢?是不是TextureView的生命周期很難控制?
TextureView與SurfaceTexture構成了組合關系,可見SurfaceTexture的確是由TextureView給『包辦』了。在程序世界中,一個對象被『包辦』無非是指:
(1)這個對象什麼時候被創建?
(2)這個對象如何被創建?
(3)這個對象的產生帶來了哪些變化,或者說程序自從有了它有哪些不同?
(4)這個對象什麼時候被銷毀?
之所以對SurfaceTexture這個盯碰態對象要大動筆墨,因為它是整個顯示框架的『連接者』。
是不凱源是遇到過在播放視頻返回後台再回來,發現TextureView顯示視圖是一片黑色?監聽TextureView的生命周期你會發現,返回後台是調用了銷毀方法的。那你就會問銷毀之後豈不是有需要重新創建?重新創建會引來更多的問題,解碼去也需要重新初始化。所以我們只能另尋他法,下面方法就是無縫切換的核心部吵臘分。
在銷毀方法中我們注意,有一個返回參數。官方的解釋如下
現在恍然大悟了吧,我們在銷毀的時候返回false,並保存SurfaceTexture對象,然後從後台返回界面的時候在onSurfaceTextureAvailable()方法中,調用setSurfaceTexture(mSurfaceTexture)方法,這樣就會恢復之前的畫面了。
使用ItemTouchHelper輕松實現RecyclerView拖拽排序和滑動刪除
源碼地址: https://github.com/chezi008/VideoSurveillance
㈢ Android如何播放當前工程目錄下的視頻文件(3gp,MP4格式)要能用的源碼,我的模擬器是4.03版本的
bin類型的資源文件放置在asssets目錄下.
參考代碼:
protected void startPlaying(String file) {
MPlayerStatus status = mPlayers_file.get(file);
if ( status == null ) {
try {
AssetFileDescriptor fileAsset = getAssetFileDesc(file);
MediaPlayer mPlayer = new MediaPlayer();
mPlayer.setOnPreparedListener(this);
status = new MPlayerStatus(file, mPlayer);
mPlayers_file.put(file, status);
mPlayers_player.put(mPlayer, status);
Log.d("Audio startPlaying", "audio: " + file);
if (isStreaming(file))
{
File f = readStreamedUrl(file);
Log.d("AudioStartPlaying", "Streaming");
// Streaming prepare async
mPlayer.setDataSource(f.getAbsolutePath());
mPlayer.setAudioStreamType(MUSIC_STREAM);
mPlayer.prepare();
} else {
Log.d("AudioStartPlaying", "File");
// Not streaming prepare synchronous, abstract base directory
if (fileAsset == null) {
mPlayer.setDataSource(file);
}
else {
mPlayer.setDataSource(fileAsset.getFileDescriptor(),
fileAsset.getStartOffset(),
fileAsset.getLength());
}
mPlayer.prepare();
}
status.isPlaying = true;
} catch (Exception e) { e.printStackTrace(); }
}
else if ( !status.isPlaying ) {
try {
status.player.prepare();
status.player.start();
status.isPlaying = true;
status.isPaused = false;
} catch (Exception e) { e.printStackTrace(); }
}
// Otherwise check to see if it's paused, if it is, resume
else if ( status.isPaused ) {
status.player.start();
status.isPaused = false;
}
}
㈣ 請問一下android4.1自帶的視頻播放器源碼目錄在哪裡
用握鎮手的是段嫌F:\android_source_code\android-4.0.4_r1\packages\旅仔apps\Gallery2
㈤ android下載圖片和視頻到本地,求代碼,求案例
下面是android多線程下載例子截圖:
java">packagemm.shandong.com.testmultithreaddownload;
importandroid.app.ProgressDialog;
importandroid.content.Intent;
importandroid.net.Uri;
importandroid.os.Environment;
importandroid.os.Handler;
importandroid.os.Message;
importandroid.support.v7.app.AppCompatActivity;
importandroid.os.Bundle;
importandroid.text.TextUtils;
importandroid.view.View;
importandroid.widget.EditText;
importandroid.widget.Toast;
importjava.io.File;
importmm.shandong.com.testmultithreaddownload.thread.UpdateUIThread;
importmm.shandong.com.testmultithreaddownload.util.FileUtil;
{
ProgressDialogpb;
EditTexteditText;
Handlerhandler;
=null;
///文件路徑
privateStringurl=
"http://gdown..com/data/wisegame/3c00add7144d3915/kugouyinle.apk";
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_multi_thread_down_load);
editText=(EditText)findViewById(R.id.editText);
initHandler();
}
publicvoidinitHandler(){
handler=newHandler(){
@Override
publicvoidhandleMessage(Messagemsg){
switch(msg.what){
caseFileUtil.startDownloadMeg:
pb.setMax(mUpdateUIThread.getFileSize());//開始
break;
caseFileUtil.updateDownloadMeg:
if(!mUpdateUIThread.isCompleted())//下載進度消息
{
pb.setProgress(mUpdateUIThread.getDownloadSize());
pb.setMessage("下載速度:"+
mUpdateUIThread.getDownloadSpeed()+"k/秒"+
"下載百分比"+mUpdateUIThread.getDownloadPercent()+"%");
}else{
pb.setMessage("下載完成");
}
break;
caseFileUtil.endDownloadMeg:
Toast.makeText(.this,
"下載完成,馬上安裝",Toast.LENGTH_SHORT).show();
/*apk安裝界面跳轉*/
Stringfilename=FileUtil.getFileName(url);
Stringstr="/myfile/"+filename;
StringfileName=Environment.getExternalStorageDirectory()+str;
Intentintent=newIntent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(newFile(fileName)),
"application/vnd.android.package-archive");
startActivity(intent);
break;
}
super.handleMessage(msg);
}
};
}
///開始下載軟體
publicvoidstartDownLoad(Viewview){
if(TextUtils.isEmpty(editText.getText().toString())){
Toast.makeText(this,"你輸入下載文件地址",Toast.LENGTH_SHORT).show();
return;
}else{
url=editText.getText().toString();
}
//啟動線程初始化下載參數
mUpdateUIThread=newUpdateUIThread(handler,url,
FileUtil.setMkdir(this)+File.separator,FileUtil.getFileName(url));
pb=newProgressDialog(this);
pb.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pb.show();
mUpdateUIThread.start();
}
}
例子代碼太長,只能給你一部分,如果想看完整例子代碼,請去360手機助手下載安卓學習手冊,點擊裡面的源碼可以查看完成代碼,方面快速,裡面還有安卓的其它小例子,共108個。
㈥ iOS Android雙端直播源碼怎樣完整搭建
手機直播原生源碼會搭建很多功能,就拿雲豹直播APP為例,看下能搭建哪些功能吧。1.主播系統(1):後台可以設置用戶注冊後是否允許擁有自己的直播間,選擇允許,那用戶注冊後即可直接直播。相反,用戶只能申請簽約主播,然後由後台審核通過才可以用戶自己的房間,進行直播。(2):主播可以接收觀眾贈送的禮物,並獲得相應的提成。主播可以將自己的虛擬幣進行提現。(3):主播等級及分類,後台可以設置主播的等級以及分類,分類在網站的首頁左側同步顯示。2.禮物系統程序默認已有部分禮物,如果需要添加更多禮物,可以到後台禮物管理菜單添加即可,禮物可以根據需要和等級來設置禮物的效果以及價格。另外程序還設置了紅包系統,並有紅包排行榜的功能。3.靚號系統主播和用戶都可以購買靚號,主播購買後房間地址以及房間號碼更容易記住,觀眾購買靚號後更有面兒~靚號商城中的靚號都是需要後台添加的,可以單個添加靚號並設置價格,也可以批量添加靚號設置價格。4.游戲系統目前擁有的游戲有一款,砸金蛋。後台可以設置游戲的中獎概率和獎品內容,同樣可以通過後台來金控游戲的參與記錄,獲獎記錄。5.道具系統用戶可以購買vip,可以在房間人數已滿的時候購買然後進直播間用戶購買座駕後,登錄房間可以獲得醒目座駕效果展示6.資料庫管理程序後台可以一鍵備份以及恢復備份的資料庫,同時也可以後台直接編輯sql命令來執行資料庫命令。7.均衡負載功能此功能可以無限添加FMS直播伺服器,來分攤視頻流的帶寬負擔。首先,程序完全可以將網站程序與FMS視頻流來分開,也就是說,網站可以單獨使用一台伺服器或者虛擬主機,FMS則使用另外一台獨立的伺服器,這樣就不會因為視頻直播流量大影響網站的訪問速度。其次,在運營中,一旦用戶激增,FMS伺服器的帶寬負擔就會隨之增加,這個時候除了使用cnd加速以及其他手段進行帶寬拓展外,程序自帶的這個功能一樣可以幫到你。只需要另外配置FMS伺服器對接程序,即可手動將部分主播的視頻流轉移到新的伺服器中,由此來解決帶寬問題。8.充值代理功能,9.排行榜功能排行榜分為富豪排行榜明星排行榜人氣排行榜禮物紅人榜每個榜單有分為日榜周榜月榜超級榜10.充值系統用戶可以再先充值充值系統支持網銀充值卡游戲點卡等多種充值方式用戶充值完成後可以兌換成虛擬幣秀幣與秀豆a.秀幣:僅適用於新動秀場支付,可購買禮物、買靚號等。b.秀豆:僅適用於新動秀場兌換,僅可用來兌換秀幣。11.個人中心a.我的個人資料:可以修改我的昵稱、個人簽名、姓名、性別、所在地、生日、愛好等b.我的房管:查看一個月內登錄和未登錄過的c.我的靚號:列出會員的所有靚號d.我的道具:查看我的道具e.我的賬單:查看我的賬單f.充值商城:進行充值g.我的收藏:查看收藏的房間h.關注我的和我關注的:關注列表I.我的家族:這個比較特殊,只有家族長才能在個人中心顯示我的家族,點擊進去管理家族,家族成員是沒有的。12.家族系統a.申請成立家族b.家族申請後台審核功能c.家族主播列表查看d.家族主播收益詳情查看e.家族主播收益分成統計,以及族長提現功能f.主播申請家族家族,家族族長審核通過g.家族族長的獨立管理後檯面板如果您也想做一款直播產品,給您推薦雲豹網路科技有限公司,他們經過市場的全面調研,結合先進的搭建技術,創出自己的一套流程。
㈦ android視頻源碼中有沒有加水印的功能
其實ffmpeg添加水印功能在網上例子很多,也都大同小異,但在Android端,比較難搞的地方其實是ffmpeg編譯出能帶水印添加功能的so庫文件,其中:ffmpeg的drawtext filter依賴freetype的so,需要先編一個android平台下freetype的so,而在android平台的編譯ffmpeg時,難搞的pkg-cfg總是檢查依賴的freetype失敗,迫不得已修改了ffmpeg的configure,不在對freetype庫做檢查,但編譯配置的時候需要手動指定freetype so的搜索路徑。
我使用的配置如下:
[plain] view plain
/usr/local/lib/pkgconfig $FFMPEG_ROOT/configure --target-os=linux \
--prefix=$PREFIX \
--disable-encoders \
--disable-decoders \
--disable-muxers \
--disable-demuxers \
--disable-parsers \
--disable-bsfs \
--disable-protocols \
--disable-devices \
㈧ android怎麼播放rtsp實時網路串流代碼
android播放rtsp實時網路串流核心代碼如下:
import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.VideoView;
public class rtspActivity extends Activity {
/** Called when the activity is first created. */
Button playButton ;
VideoView videoView ;
EditText rtspUrl ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
rtspUrl = (EditText)this.findViewById(R.id.url);
playButton = (Button)this.findViewById(R.id.start_play); playButton.setOnClickListener(new Button.OnClickListener(){
public void onClick(View v) {
PlayRtspStream(rtspUrl.getEditableText().toString()); } });
videoView = (VideoView)this.findViewById(R.id.rtsp_player); }
//play rtsp stream
private void PlayRtspStream(String rtspUrl){
videoView.setVideoURI(Uri.parse(rtspUrl));
videoView.requestFocus();
videoView.start();
}
}