當前位置:首頁 » 安卓系統 » android視頻播放代碼

android視頻播放代碼

發布時間: 2023-09-07 15:18:07

㈠ js android端實現視頻自動播放

安卓手機上,使用video播放視頻有個問題,video控制項層級會永遠在頂層,不利於視頻互動H5開發,而IOS手機上不會有此問題。

<video src="http://xxx.mp4" x5-video-player-type="h5"/>

x5-video-player-type="h5"   只適用於微信瀏覽器

注意:

1.jsmpeg 需要將視頻轉為.ts的文件

     先安裝ffmpeg,然後執行以下命令,將mp4格式的文件轉成 .ts(用命令行轉的才能正常播放)

ffmpeg -i video.mp4 -f mpegts -codec:v mpeg1video -codec:a mp2 out.ts(文件的路徑不太好找,建議全局搜索一下)

2.安卓上使用jsmpeg插件渲染canvas,ios上正常使用video並加入隱藏控制條等設置

3. http://hf-app.oss-cn-hangzhou.aliyuncs.com/public/html/jsmpeg.js    請使用此js,原作者的js沒有回調設置

4. https://github.com/phoboslab/jsmpeg   原作者github地址

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>JSMpegPlayer</title>

    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0">

    <style>

    html,body{

        padding: 0;

        margin: 0;

    }

    .msg-wrap{

        position: fixed;

        top: 0;

        left: 0;

        background: #fff;

        border: 1px solid #000;

    }

    .video-wrap{

        width: 100%;

        display: none;

    }

    </style>

</head>

<body>

    <video class="video-wrap" id="video-ios" x5-playsinline webkit-playsinline playsinline src="1_BG_4s_2.mp4"></video>

    <canvas class="video-wrap" id="video-android"></canvas>

    <div class="msg-wrap" id="msgTxt">loading...</div>

    <script src="http://hf-app.oss-cn-hangzhou.aliyuncs.com/public/html/jsmpeg.js"></script>

    <script>

        var msgTxt = document.getElementById('msgTxt');

        var video = document.getElementById('video-ios');

        var canvas = document.getElementById('video-android');

        //檢測是否為非安卓瀏覽器並作處理

        var check = !! navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);

        if(check){

            msgTxt.innerHTML = "not Android mode"

            video.style.display="block"

            video.play()

            //監聽video載入完成

            video.addEventListener("loadedmetadata",function(){

                msgTxt.innerHTML = "not Android mode:videoPlaying"

            })

            //監聽video播放結束

            video.addEventListener("ended",function(){

                msgTxt.innerHTML = "not Android mode:videoEnd"

            })

        }else{

            // jsmpegPlay(canvas,'1_BG_4s_5.ts',startCallBack,playingCallBack,endCallBack)

            jsmpegPlay(canvas,'out.ts',startCallBack,playingCallBack,endCallBack)

        }

        function jsmpegPlay(Vcanvas,vVideo,startFun,playingFun,endFun) {

            var player = new JSMpeg.Player(

                vVideo ,{

                    canvas: Vcanvas,

                    loop: false,

                    autoplay: true,

                    startSign: true,

                    startCallBack: startFun,

                    playingCallBack: playingFun,

                    endCallBack: endFun

                });

        }

        //視頻開始播放(即解碼完成)執行

        function startCallBack() {

            msgTxt.innerHTML = "Android mode:videoPlaying"

            canvas.style.display="block"

        }

        //視頻播放進度

        function playingCallBack(currentTime) {

            // console.log(currentTime)

        }

        //視頻播放完成執行

        function endCallBack() {

            msgTxt.innerHTML = "Android mode:videoEnd"

        }

    </script>

</body>

</html>

項目中遇到的坑,把使用方法記錄一下

在線演示DOMO

JSMpegPlayer

https://github.com/xxfxx/android-video-autuplay   github地址,歡迎小星星~~~

㈡ android 如何調用系統播放器播放伺服器端視頻

這樣寫是播放本地的視頻文件的吧,要是想播放網路上的視頻你可以這樣試一下Uri uri = Uri.parse("rtsp://v2.cache2.c.youtube.com/CjgLENy73wIaLwm3JbT_%ED%AF%80%ED%B0%_vSmsbeSyd5JDA==/0/0/0/video.3gp");
39. VideoView videoView = (VideoView)this.findViewById(R.id.video_view);
40. videoView.setMediaController(new MediaController(this));
41. videoView.setVideoURI(uri);
42. //videoView.start();
43. videoView.requestFocus();

㈢ android 如何實現圖片視頻混合播放啊

直接上代碼:

布局文件就是兩個全屏的videoview和imageview重疊

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<ImageView
android:id="@+id/pictureView"
android:scaleType="fitXY"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>

<VideoView
android:id="@+id/videoView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>


</LinearLayout>

java部分:

/*
視頻圖片混合展示demo
*/
packagecom.example.administrator.hunbo;

importandroid.content.Context;
importandroid.media.MediaPlayer;
importandroid.net.Uri;
importandroid.os.Handler;
importandroid.os.storage.StorageManager;
importandroid.support.v7.app.AppCompatActivity;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.widget.ImageView;
importandroid.widget.Toast;
importandroid.widget.VideoView;
importjava.io.File;
importjava.lang.reflect.InvocationTargetException;
importjava.lang.reflect.Method;
importjava.util.ArrayList;

{

privateVideoViewvideoView;
privateImageViewpictureView;
booleanisPlaying=false;
privateArrayListarrayList=newArrayList<String>();

@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getSupportActionBar().hide();//隱藏actionBar
//初始化控制項
videoView=findViewById(R.id.videoView);
pictureView=findViewById(R.id.pictureView);
//最開始兩個view都是隱藏的
videoView.setVisibility(View.GONE);
pictureView.setVisibility(View.GONE);
//檢測SD卡是否存在
String[]result=null;
StorageManagerstorageManager=(StorageManager)getSystemService(Context.STORAGE_SERVICE);
try{
Methodmethod=StorageManager.class.getMethod("getVolumePaths");
method.setAccessible(true);
try{
result=(String[])method.invoke(storageManager);
}catch(InvocationTargetExceptione){
e.printStackTrace();
}
if(result.length>1){
//Toast.makeText(this,"檢測到U盤",Toast.LENGTH_SHORT).show();
AllFilesPath("/mnt/usb/");
playList();
}else{
Toast.makeText(this,"未檢測到U盤,請在開機前插入U盤,或者重新啟動此應用",Toast.LENGTH_SHORT).show();
Handlerhandler=newHandler();
handler.postDelayed(newRunnable(){
@Override
publicvoidrun(){
finish();
}
},2500);
}
}catch(Exceptione){
e.printStackTrace();
}
}
//獲取所有圖片視頻的絕對路徑到arraylist
privateArrayListAllFilesPath(Stringpath){
Filefile=newFile(path);
File[]files=file.listFiles();
for(Filef:files){
if(f.getName().endsWith("jpg")||f.getName().endsWith("jpeg")||f.getName().endsWith("mp4")
||f.getName().endsWith("avi")||f.getName().endsWith("mkv")||f.getName().endsWith("rmvb")
||f.getName().endsWith("flv")){
System.out.println("------------獲取到了一個可用路徑:"+f.getAbsolutePath());
arrayList.add(f.getAbsolutePath());//添加到arralist
}elseif(f.isDirectory()){
AllFilesPath(f.getAbsolutePath());
}
}
returnarrayList;
}
//依次混合播放arralist里的圖片或視頻

publicintlistNum;
privatevoidplayList(){
if(listNum>=arrayList.size()){
finish();
//listNum=0;
}else{
System.out.println("---------------------------收入路徑---------------------------");
System.out.println("isplaying="+isPlaying);
finalFilef=newFile(arrayList.get(listNum).toString());
if(f.getName().endsWith("jpg")||f.getName().endsWith("jpeg")||f.getName().endsWith("png")){
System.out.println("---------------------------添加了一張圖片:"+f.getAbsolutePath());
pictureView.setVisibility(View.VISIBLE);
pictureView.setImageURI(Uri.fromFile(f));
Handlerhandler=newHandler();
handler.postDelayed(newRunnable(){
@Override
publicvoidrun(){
System.out.println("---------------------------播完了一張位於"+f.getAbsolutePath()+"的圖片》》》》》》》》》》》》》》》》》");
pictureView.setVisibility(View.GONE);
listNum++;
playList();
}
},2000);//2秒後結束當前圖片
}elseif(f.getName().endsWith("mp4")||f.getName().endsWith("avi")||f.getName().endsWith("mkv")
||f.getName().endsWith("rmvb")||f.getName().endsWith("flv")){
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~添加了一個視頻"+f.getAbsolutePath());
videoView.setVideoPath(f.getAbsolutePath());
videoView.setVisibility(View.VISIBLE);//播放之前顯示videoView
videoView.start();
videoView.setOnCompletionListener(newMediaPlayer.OnCompletionListener(){
@Override
publicvoidonCompletion(MediaPlayermp){
System.out.println("---------------------------播完了一個位於"+f.getAbsolutePath()+"的視頻《《《《《《《《《《《《《《《《《《");
videoView.setVisibility(View.GONE);//視頻播放完畢後隱藏videoView
listNum++;
playList();
}
});
}
}
}

㈣ android開發中實現點擊按鈕打開本地視頻播放器 求解。

Intent intent = new Intent(android.intent.action.VIEW);
intent.setType("video/*");
startActivity(intent);

㈤ android:ffmpeg命令-視頻反序播放

命令:

ffmpeg -i %s 輸入好缺視頻友搏辯文件,
-filter_complex [0:v]reverse[v] 處理第一個視頻文件,做反序,操作命名為v,
-map [v] 復雜輸出v文件銀謹,
%s 輸出文件名。

㈥ android怎樣播放assets中的視頻,關鍵代碼video.setVideoPath("路徑")對嗎我用了出錯了.

assets文件夾裡面的文件都是保持原始的文件格式,需要用AssetManager以位元組流的形式讀取文件。
video.setVideoPath("路徑")是讀取不到文件的
assets的讀取方式:
1. 先在Activity裡面調用getAssets() 來獲取AssetManager引用。
2. 再用AssetManager的open(String fileName, int accessMode) 方法則指定讀取的文件以及訪問模式就能得到輸入流InputStream。
3. 然後就是用已經open file 的inputStream讀取文件,讀取完成後記得inputStream.close() 。
4.調用AssetManager.close() 關閉AssetManager。

需要注意的是,來自Resources和Assets 中的文件只可以讀取而不能進行寫的操作

㈦ 在安卓手機上看網頁的時候如何實現視頻嵌入頁面中播放不用flash的話

可以使用android的WebView來載入一個html5 通過video標簽來實現視頻的播放。

以下為實現步驟:
1.需要在AndroidManifest.xml文件中聲明需要使用HardwareAccelerate, 可以細化到Activity級別,如果不需要的View可以聲明不要用加速,但是需要在代碼中做,
具體如下:
a.如果要聲明整個應用都要加速:< application ... android:hardwareAccelerated ="true">
b. 如果要在Activity中聲明,則:
<activity ... android:hardwareAccelerated="true" >
Window, getWindow.setFlags( WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
c. 如果application或者activity都申明了要硬體加速,但是為了某些原因(比如省電?),一些View不需要硬體加速的話, view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

2.需要在AndroidManifest.xml文件中用上<use-sdk></use-sdk>標簽,而且如果是空的還不行,必須寫上targetSDK或者minSDK,但是我試驗過,不管寫版本是多少都沒有關系。。。理論上說,Android應該是從3.0( API Level 11)開始可以對2D渲染加速,但是我把targetSDK設置為5都可以使用的,但是這個標簽不寫還不行。

一般來說,上面的操作做了,就可以使用video標簽播放視屏了,如果要支持全屏,還需要做一點操作: 給webview一個WebChromeClient對象,這個WebChromeClient對象需要實現onShowCustomView和onHideCustomView方法

㈧ 請教大神,android video view播放rtsp格式實時視頻,有10秒的延遲,怎麼能設

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();
}
}

㈨ Android webview中如何播放網路視頻

使用webview載入網頁視頻的方法:

  1. 設置webView

webView = (WebView) view.findViewById(R.id.webView);

// 設置WebView屬性,能夠執行Javascript腳本

webView.getSettings().setJavaScriptEnabled(true);

webView.getSettings().setPluginsEnabled(true);

webView.getSettings().setPluginState(PluginState.ON);

webView.setVisibility(View.VISIBLE);

webView.getSettings().setUseWideViewPort(true);

webView.loadUrl("視頻地址");


2.需要在AndroidManifest.xml文件中聲明需要使用HardwareAccelerate, 可以細化到Activity級別,如果不需要的View可以聲明不要用加速,但是需要在代碼中做,具體如下:

1.如果要聲明整個應用都要加速:<application ...android:hardwareAccelerated="true">

2.如果要在Activity中聲明,則:<activity ...android:hardwareAccelerated="true">, 還可以更細化到Window, getWindow.setFlags( WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,

WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);

3.如果application或者activity都申明了要硬體加速,但是為了某些原因(比如省電?),一些View不需要硬體加速的話


3. 上面的操作做了,就可以使用video標簽播放視屏了,如果要支持全屏,還需給webview一個WebChromeClient對象,這個WebChromeClient對象需要實現onShowCustomView和onHideCustomView方法

熱點內容
c語言的認識 發布:2025-02-01 11:58:03 瀏覽:520
svn連接伺服器地址 發布:2025-02-01 11:51:31 瀏覽:416
對源程序為什麼要編譯 發布:2025-02-01 11:47:46 瀏覽:218
sql表添加記錄 發布:2025-02-01 11:22:08 瀏覽:864
word編輯加密 發布:2025-02-01 11:18:53 瀏覽:571
php變數文本 發布:2025-02-01 11:10:46 瀏覽:426
音悅台上傳mv 發布:2025-02-01 11:05:02 瀏覽:516
微信如何設置訪問限制 發布:2025-02-01 10:43:06 瀏覽:335
b站緩存視頻下架還有嗎 發布:2025-02-01 10:37:52 瀏覽:940
e卡通初始密碼是多少 發布:2025-02-01 10:31:55 瀏覽:127