如果您想了解js切换video的src的相关知识,那么本文是一篇不可错过的文章,我们将对videojs切换视频进行全面详尽的解释,并且为您提供关于AndroidVideoView,需要快速切换视频、a
如果您想了解js切换video的src的相关知识,那么本文是一篇不可错过的文章,我们将对videojs切换视频进行全面详尽的解释,并且为您提供关于Android VideoView,需要快速切换视频、android – VideoView内联/全屏模式切换、android-layout – 切换vs切换、android.provider.MediaStore.Video.VideoColumns的实例源码的有价值的信息。
本文目录一览:- js切换video的src(videojs切换视频)
- Android VideoView,需要快速切换视频
- android – VideoView内联/全屏模式切换
- android-layout – 切换vs切换
- android.provider.MediaStore.Video.VideoColumns的实例源码
js切换video的src(videojs切换视频)
<video id="dsp_video" type="video/mp4"poster="" controls="controls" preload="none">
<source id="mysource" src=""></source>
你的浏览器不支持video播放
</video>
<script type="text/javascript">
$(".try").each(function(index){
$(this).click(function(e){
//$("#dsp_video>source").attr("src",videoList[index]); //注意切换source的src无效
$("#dsp_video").attr("src",videoList[index]); //必须切换video标签的src
$("#video_wrap").show();
});
});
</script>
Android VideoView,需要快速切换视频
我需要非常快速地在视频之间切换,但是,将新剪辑加载到VideoView似乎需要大约半秒的黑屏.
过渡必须是无缝的,你将如何解决这类问题?
解决方法
>使用VideoView通过VideoView构建FrameLayout
> ImageView显示视频的第一帧
>最初ImageView是可见的
>启动视频,等待任意时间(例如2-300ms)
>隐藏ImageView
切换两个视频:
– 显示图像
– 切换视频
– 隐藏图像
有点hackish但为我工作
android – VideoView内联/全屏模式切换
我正在研究android中的一个自定义视频播放器.我正在使用VideoView播放视频.最初我的VideoView将具有一定的尺寸(比方说尺寸=(宽度,高度)=(400,300)).我的自定义视频视图的控制按钮之一是“展开/折叠”.单击“展开/折叠”按钮后,我想将VideoView大小设置为全屏(表示设备的全屏大小),如果当前VideoView大小为内联,反之亦然(从全屏到内联也是如此).
有人知道完成上述任务的正确方法吗?
解决方法:
首先,你有胆量问一个Android问题,并有一个iOS徽标;)(开玩笑)
但是,我认为你可以使用这个:
displayMetrics metrics = new displayMetrics(); getwindowManager().getDefaultdisplay().getMetrics(metrics);
android.widget.LinearLayout.LayoutParams params = (android.widget.LinearLayout.LayoutParams) videoView.getLayoutParams();
params.width = metrics.widthPixels;
params.height = metrics.heightPixels;
params.leftMargin = 0;
videoView.setLayoutParams(params);
并将其设置回:
displayMetrics metrics = new displayMetrics(); getwindowManager().getDefaultdisplay().getMetrics(metrics);
android.widget.LinearLayout.LayoutParams params = (android.widget.LinearLayout.LayoutParams) videoView.getLayoutParams();
params.width = (int) (400*metrics.density);
params.height = (int) (300*metrics.density);
params.leftMargin = 30;
videoView.setLayoutParams(params);
我假设您知道如何制作OnClickListener.
我在这里得到的信息:VideoView Full screen in android application
EDIT1
我可以很快想到两件事.
1.添加:getwindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
2.或试试这个:
YourButton.setVisibility(View.GONE);
要么
YourButton.setVisibility(View.INVISIBLE);
android-layout – 切换vs切换
解决方法
由于API 1和Switches仅在API 14之后可用,因此可以使用Toggle Buttons.
除此之外,这只是一个简单的决定,哪一个是用户界面/设计的最佳选择
在我看来,交换机清楚地表明了当前选择的内容.
Is there a slide toggle available in android framework?
是的,开关可以用作幻灯片切换.
代码非常简单,基本上可以对这两个按钮使用相同的思路.
这是一个切换按钮的示例
btnSwitch = (Switch) findViewById(R.id.switch_1); btnSwitch.setonCheckedchangelistener(new OnCheckedchangelistener() { @Override public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) { if (isChecked) { Log.i("Switch","ON"); } else { Log.i("Switch","OFF"); } } });
这是一个切换按钮的示例
btnToggle = (ToggleButton) findViewById(R.id.toggle_1); btnToggle.setonCheckedchangelistener(new OnCheckedchangelistener() { @Override public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) { if (isChecked) { Log.i("Toggle","ON"); } else { Log.i("Toggle","OFF"); } } });
android.provider.MediaStore.Video.VideoColumns的实例源码
protected long getVideoForBucketCleared(long bucketId) throws FileNotFoundException { final ContentResolver resolver = getContext().getContentResolver(); Cursor cursor = null; try { cursor = resolver.query(Video.Media.EXTERNAL_CONTENT_URI,VideosBucketThumbnailQuery.PROJECTION,VideoColumns.BUCKET_ID + "=" + bucketId,null,VideoColumns.DATE_MODIFIED + " DESC"); if (cursor.movetoFirst()) { return cursor.getLong(VideosBucketThumbnailQuery._ID); } } finally { IoUtils.closeQuietly(cursor); } throw new FileNotFoundException("No video found for bucket"); }
protected long getVideoForBucketCleared(long bucketId) throws FileNotFoundException { final ContentResolver resolver = getContext().getContentResolver(); Cursor cursor = null; try { cursor = resolver.query(Video.Media.EXTERNAL_CONTENT_URI,VideoColumns.DATE_MODIFIED + " DESC"); if (cursor.movetoFirst()) { return cursor.getLong(VideosBucketThumbnailQuery._ID); } } finally { IoUtils.closeQuietly(cursor); } throw new FileNotFoundException("No video found for bucket"); }
protected long getVideoForBucketCleared(long bucketId) throws FileNotFoundException { final ContentResolver resolver = getContext().getContentResolver(); Cursor cursor = null; try { cursor = resolver.query(Video.Media.EXTERNAL_CONTENT_URI,VideoColumns.DATE_MODIFIED + " DESC"); if (cursor.movetoFirst()) { return cursor.getLong(VideosBucketThumbnailQuery._ID); } } finally { IoUtils.closeQuietly(cursor); } throw new FileNotFoundException("No video found for bucket"); }
public static String getMimeTypeForMedia(ContentResolver cr,int id,boolean isImage) { Cursor cursor; if(isImage) cursor = cr.query( MediaStore.Images.Media.EXTERNAL_CONTENT_URI,new String [] {MediaStore.Images.Media.MIME_TYPE},ImageColumns._ID+" = ?",new String [] { String.valueOf(id) },null); else cursor = cr.query( MediaStore.Video.Media.EXTERNAL_CONTENT_URI,new String [] {MediaStore.Video.Media.MIME_TYPE},VideoColumns._ID+" = ?",null); try { if(!cursor.movetoFirst()) return null; return cursor.getString(0); } finally { cursor.close(); } }
public static String getDataFilepathForMedia(ContentResolver cr,boolean isImage) { Cursor cursor; if(isImage) cursor = cr.query( MediaStore.Images.Media.EXTERNAL_CONTENT_URI,new String [] {MediaStore.Images.Media.DATA},new String [] {MediaStore.Video.Media.DATA},null); try { if(!cursor.movetoFirst()) return null; return cursor.getString(0); } finally { cursor.close(); } }
public LocalAlbum(Path path,galleryApp application,int bucketId,boolean isImage,String name) { super(path,nextVersionNumber()); mApplication = application; mResolver = application.getContentResolver(); mBucketId = bucketId; mName = name; mIsImage = isImage; if (isImage) { mWhereClause = ImageColumns.BUCKET_ID + " = ?"; mOrderClause = ImageColumns.DATE_TAKEN + " DESC," + ImageColumns._ID + " DESC"; mBaseUri = Images.Media.EXTERNAL_CONTENT_URI; mProjection = LocalImage.PROJECTION; mItemPath = LocalImage.ITEM_PATH; } else { mWhereClause = VideoColumns.BUCKET_ID + " = ?"; mOrderClause = VideoColumns.DATE_TAKEN + " DESC," + VideoColumns._ID + " DESC"; mBaseUri = Video.Media.EXTERNAL_CONTENT_URI; mProjection = LocalVideo.PROJECTION; mItemPath = LocalVideo.ITEM_PATH; } mNotifier = new ChangeNotifier(this,mBaseUri,application); }
@Override public Cursor queryRecentDocuments(String rootId,String[] projection) throws FileNotFoundException { final ContentResolver resolver = getContext().getContentResolver(); final MatrixCursor result = new MatrixCursor(resolveDocumentProjection(projection)); final long token = Binder.clearCallingIdentity(); Cursor cursor = null; try { if (TYPE_IMAGES_ROOT.equals(rootId)) { // include all unique buckets cursor = resolver.query(Images.Media.EXTERNAL_CONTENT_URI,ImageQuery.PROJECTION,ImageColumns.DATE_MODIFIED + " DESC"); copyNotificationUri(result,Images.Media.EXTERNAL_CONTENT_URI); while (cursor.movetoNext() && result.getCount() < 64) { includeImage(result,cursor); } } else if (TYPE_VIDEOS_ROOT.equals(rootId)) { // include all unique buckets cursor = resolver.query(Video.Media.EXTERNAL_CONTENT_URI,VideoQuery.PROJECTION,VideoColumns.DATE_MODIFIED + " DESC"); copyNotificationUri(result,Video.Media.EXTERNAL_CONTENT_URI); while (cursor.movetoNext() && result.getCount() < 64) { includeVideo(result,cursor); } } else { throw new UnsupportedOperationException("Unsupported root " + rootId); } } finally { IoUtils.closeQuietly(cursor); Binder.restoreCallingIdentity(token); } return result; }
protected long getVideoForPathCleared(String path)throws FileNotFoundException { final ContentResolver resolver = getContext().getContentResolver(); Cursor cursor = null; try { cursor = resolver.query(Video.Media.EXTERNAL_CONTENT_URI,VideoColumns.DATA + "=? ",new String[] { path.replaceAll("'","''") },VideoColumns.DATE_MODIFIED + " DESC"); if (cursor.movetoFirst()) { return cursor.getLong(VideosBucketThumbnailQuery._ID); } } finally { IoUtils.closeQuietly(cursor); } throw new FileNotFoundException("No video found for bucket"); }
public LocalAlbum(Path path,MediaDataContext application,application); }
@Override public Cursor queryRecentDocuments(String rootId,cursor); } } else { throw new UnsupportedOperationException("Unsupported root " + rootId); } } finally { IoUtils.closeQuietly(cursor); Binder.restoreCallingIdentity(token); } return result; }
protected long getVideoForPathCleared(String path)throws FileNotFoundException { final ContentResolver resolver = getContext().getContentResolver(); Cursor cursor = null; try { cursor = resolver.query(Video.Media.EXTERNAL_CONTENT_URI,VideoColumns.DATE_MODIFIED + " DESC"); if (cursor.movetoFirst()) { return cursor.getLong(VideosBucketThumbnailQuery._ID); } } finally { IoUtils.closeQuietly(cursor); } throw new FileNotFoundException("No video found for bucket"); }
@Override public Cursor queryRecentDocuments(String rootId,cursor); } } else { throw new UnsupportedOperationException("Unsupported root " + rootId); } } finally { IoUtils.closeQuietly(cursor); Binder.restoreCallingIdentity(token); } return result; }
protected long getVideoForPathCleared(String path)throws FileNotFoundException { final ContentResolver resolver = getContext().getContentResolver(); Cursor cursor = null; try { cursor = resolver.query(Video.Media.EXTERNAL_CONTENT_URI,VideoColumns.DATE_MODIFIED + " DESC"); if (cursor.movetoFirst()) { return cursor.getLong(VideosBucketThumbnailQuery._ID); } } finally { IoUtils.closeQuietly(cursor); } throw new FileNotFoundException("No video found for bucket"); }
public static Uri intTodbv(Context context,String type,String title,int orientation,String path,Long length) { // Insert into MediaStore. ContentValues values = new ContentValues(9); values.put(VideoColumns.TITLE,title); values.put(VideoColumns.disPLAY_NAME,title + ".mp4"); values.put(VideoColumns.DATE_TAKEN,new Date().toLocaleString()); values.put(VideoColumns.MIME_TYPE,type); // values.put(VideoColumns.,orientation); values.put(VideoColumns.DATA,path); values.put(VideoColumns.SIZE,length); // values.put(ImageColumns.WIDTH,width); // values.put(ImageColumns.HEIGHT,height); // if (location != null) { // values.put(ImageColumns.LATITUDE,location.getLatitude()); // values.put(ImageColumns.LONGITUDE,location.getLongitude()); // } Uri uri = null; int stromode = StoredData.getInt(StoredData.M_STORAGEMODE,0); // if (stromode == 0) { // uri = context.getContentResolver().insert( // Video.Media.INTERNAL_CONTENT_URI,values); // } else { uri = context.getContentResolver().insert( Video.Media.EXTERNAL_CONTENT_URI,values); // } context.sendbroadcast(new Intent("android.hardware.action.NEW_VIDEO",uri)); if (uri == null) { return null; } return uri; }
@Override protected void onActivityResult(Context context,int requestCode,int resultCode,Intent data) { if (resultCode != Activity.RESULT_OK) { return; } Cursor cursor = mExecutor.getContext().getContentResolver().query(data.getData(),null); if (cursor == null || !cursor.movetoNext()) { return; } String path = cursor.getString(cursor.getColumnIndex(VideoColumns.DATA)); MakeVideoListener listener = getListener(MakeVideoListener.class); if (listener != null) { listener.onComplete(Uri.fromFile(new File(path))); } }
/** * True if the media exists,false otherwise * @param context * @param id * @param isImage false == video * @return */ public static boolean mediaExists(Context context,boolean isImage) { ContentResolver cr = context.getContentResolver(); Cursor cursor; if(isImage) cursor = cr.query( MediaStore.Images.Media.EXTERNAL_CONTENT_URI,null); try { if(!cursor.movetoFirst()) return false; if(!new File(cursor.getString(0)).exists()) return false; } finally { cursor.close(); } return true; }
private static File getSaveDirectory(ContentResolver contentResolver,Uri uri) { final File[] dir = new File[1]; querySource(contentResolver,uri,new String[] { VideoColumns.DATA },new ContentResolverQueryCallback() { @Override public void onCursorResult(Cursor cursor) { dir[0] = new File(cursor.getString(0)).getParentFile(); } }); return dir[0]; }
public LocalAlbum(Path path,WoTuApp application,long bucketId,nextVersionNumber()); mApplication = application; mResolver = application.getContentResolver(); mBucketId = bucketId; mName = getLocalizedname(application.getResources(),bucketId,name); mIsImage = isImage; if (isImage) { mWhereClause = ImageColumns.BUCKET_ID + " = ?"; mOrderClause = ImageColumns.DATE_TAKEN + " DESC," + VideoColumns._ID + " DESC"; mBaseUri = Video.Media.EXTERNAL_CONTENT_URI; mProjection = LocalVideo.PROJECTION; mItemPath = LocalVideo.ITEM_PATH; } mNotifier = new Datanotifier(this,application); }
private Media getLatestMedia(boolean video) { Media media = null; Uri baseUri = video ? Video.Media.EXTERNAL_CONTENT_URI : MediaStore.Images.Media.EXTERNAL_CONTENT_URI; Uri query = baseUri.buildUpon().appendQueryParameter("limit","1") .build(); String[] projection = video ? new String[] { VideoColumns._ID,VideoColumns.DATE_TAKEN } : new String[] { ImageColumns._ID,ImageColumns.DATE_TAKEN,ImageColumns.ORIENTATION }; String selection = video ? "" : ImageColumns.MIME_TYPE + "='image/jpeg'"; String order = video ? VideoColumns.DATE_TAKEN + " DESC," + VideoColumns._ID + " DESC" : ImageColumns.DATE_TAKEN + " DESC," + ImageColumns._ID + " DESC"; Cursor cursor = null; try { cursor = getContentResolver().query(query,projection,selection,order); if (cursor != null && cursor.movetoFirst()) { long id = cursor.getLong(0); long date = cursor.getLong(1); int orientation = video ? 0 : cursor.getInt(2); Uri uri = ContentUris.withAppendedId(baseUri,id); if (MyDebug.LOG) Log.d(TAG,"found most recent uri for " + (video ? "video" : "images") + ": " + uri); media = new Media(id,video,date,orientation); } } finally { if (cursor != null) { cursor.close(); } } return media; }
/** * 获取单个文件的视频信息 * @param videoPath * @return 视频信息 */ public VideoInfo getVideoInfoDeprecated(String videoPath) { Log.w(TAG,"[getVideoInfo]传入路径: "+videoPath); VideoInfo info = null; final int sdkVersion = Integer.parseInt(Build.VERSION.SDK); if (sdkVersion < 10){ String where = MediaColumns.DATA + "=?"; String[] selectionArgs = new String[] { videoPath }; try { if(context != null){ Cursor cursor = context.getContentResolver().query( MediaStore.Video.Media.EXTERNAL_CONTENT_URI,where,selectionArgs,null); if (cursor != null) { cursor.movetoFirst(); String title = cursor .getString(cursor .getColumnIndexOrThrow(MediaColumns.TITLE)); String album = cursor .getString(cursor .getColumnIndexOrThrow(VideoColumns.ALBUM)); String artist = cursor .getString(cursor .getColumnIndexOrThrow(VideoColumns.ARTIST)); String displayName = cursor .getString(cursor .getColumnIndexOrThrow(MediaColumns.disPLAY_NAME)); String mimeType = cursor .getString(cursor .getColumnIndexOrThrow(MediaColumns.MIME_TYPE)); String path = cursor .getString(cursor .getColumnIndexOrThrow(MediaColumns.DATA)); long duration = cursor .getInt(cursor .getColumnIndexOrThrow(VideoColumns.DURATION)); long size = cursor .getLong(cursor .getColumnIndexOrThrow(MediaColumns.SIZE)); } } } catch (Exception e) { // Todo: handle exception } } return info; }
/** * Insert the content (saved file) with proper video properties. */ public static Uri insertContent(SaveVideoFileInfo mdstFileInfo,ContentResolver contentResolver,Uri uri ) { long NowInMs = System.currentTimeMillis(); long NowInSec = NowInMs / 1000; final ContentValues values = new ContentValues(13); values.put(Video.Media.TITLE,mdstFileInfo.mFileName); values.put(Video.Media.disPLAY_NAME,mdstFileInfo.mFile.getName()); values.put(Video.Media.MIME_TYPE,"video/mp4"); values.put(Video.Media.DATE_TAKEN,NowInMs); values.put(Video.Media.DATE_MODIFIED,NowInSec); values.put(Video.Media.DATE_ADDED,NowInSec); values.put(Video.Media.DATA,mdstFileInfo.mFile.getAbsolutePath()); values.put(Video.Media.SIZE,mdstFileInfo.mFile.length()); int durationMs = retriveVideoDurationMs(mdstFileInfo.mFile.getPath()); values.put(Video.Media.DURATION,durationMs); // copy the data taken and location info from src. String[] projection = new String[] { VideoColumns.DATE_TAKEN,VideoColumns.LATITUDE,VideoColumns.LONGITUDE,VideoColumns.RESOLUTION,}; // copy some info from the source file. querySource(contentResolver,new ContentResolverQueryCallback() { @Override public void onCursorResult(Cursor cursor) { long tiMetaken = cursor.getLong(0); if (tiMetaken > 0) { values.put(Video.Media.DATE_TAKEN,tiMetaken); } double latitude = cursor.getDouble(1); double longitude = cursor.getDouble(2); // Todo: Change || to && after the default location // issue is // fixed. if ((latitude != 0f) || (longitude != 0f)) { values.put(Video.Media.LATITUDE,latitude); values.put(Video.Media.LONGITUDE,longitude); } values.put(Video.Media.RESOLUTION,cursor.getString(3)); } }); return contentResolver.insert(Video.Media.EXTERNAL_CONTENT_URI,values); }
我们今天的关于js切换video的src和videojs切换视频的分享已经告一段落,感谢您的关注,如果您想了解更多关于Android VideoView,需要快速切换视频、android – VideoView内联/全屏模式切换、android-layout – 切换vs切换、android.provider.MediaStore.Video.VideoColumns的实例源码的相关信息,请在本站查询。
本文标签: