我试图MediaController
在方向变化上动态改变锚点.经过我的所有尝试后,这根本不能正常工作.
也许你可以指出我的错误.
简而言之:
肖像模式:
SurfaceView
重量:0.4MediaController
和HorizontalScrollView
重量:0.6MediaController
总是可见而不是隐藏景观模式:
SurfaceView
重量:0.0(全屏)
MediaControlls
= View.Gone
(我需要将其锚更改为SurfaceView
.并弹出onTouch.但是如何?)
代码:
player.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:keepScreenOn="true"
tools:context="tenkol.design.com.imbrecords.ActivityExoPlayer"
android:weightSum="1"
android:orientation="vertical">
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/surface_wrapper"
android:layout_weight="0.4">
<com.google.android.exoplayer.VideoSurfaceView
android:id="@+id/surface_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center" />
<View
android:id="@+id/shutter"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black" />
</FrameLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="0.6"
android:orientation="vertical">
<FrameLayout
android:id="@+id/controls_wrapper"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="2dp">
</FrameLayout>
<HorizontalScrollView
android:id="@+id/myGallery"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="0dp">
<LinearLayout
android:id="@+id/channelsScrollView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal"
android:paddingBottom="5dp"
android:paddingTop="5dp" …
Run Code Online (Sandbox Code Playgroud) android android-video-player android-layout android-mediaplayer
我正在使用MediaCodec
并MediaExtractor
以可变速率播放视频,包括向前和向后.代码使用类似SpeedControlCallback的东西来建立帧间暂停 - presentationTimeUs
从输出缓冲区向它提供字段.
99%的情况下,这种方法很好,但是看起来三星S6上的AVC编解码器在向后搜索时提供了错误的演示时间 - 它们被固定在寻求转发的最高价值时,如果这有意义的话.缓冲区中的数据是正确/更改的 - 它只是与固定的显示时间不对应.
S6可以处理具有品牌/ ftype的MP4文件中的后向搜索avc1
,但我尝试过的其他品牌的H.264视频(mp42
,isom
)在100%的时间内都不起作用.相同的文件在三星S5以及我尝试过的所有其他设备上都能正常工作.
编解码器记录这个:
09-15 11:16:21.611 2992-16618/? W/EXYNOS_VIDEO_DEC? sCurrentTimestamp(6002033) is smaller than latestTimeStamp(7001744), uses latestTimeStamp
在每个向后搜索(SEEK_TO_PREVIOUS_SYNC
),并将latestTimestampValue
为所有关键帧提供错误.
有没有人在Galaxy S6上遇到与AVC编解码器类似的问题,或者是否可以提供任何(非hacky)解决方案?
我试图找到一个简单的教程,解释如何从URL加载到Android媒体播放器的视频,但不幸的是我找不到任何!
我尝试了几件事来尝试让它工作但仍然没有运气.
让MediaPlayerActivity从URL加载视频的最佳方法是什么?
谢谢
编辑:
我按照建议尝试了以下代码:
VideoView videoView = (VideoView) findViewById(R.id.your_video_view);
MediaController mediaController = new MediaController(this);
mediaController.setAnchorView(videoView);
videoView.setMediaController(mediaController);
videoView.setVideoURI(Uri.parse("url-here"));
videoView.start();
Run Code Online (Sandbox Code Playgroud)
当我参加这项活动时,它只是崩溃了.
android视频播放器可以在android中支持哪些文件格式?
并在android中区分视频视图和视频播放器
我正在寻找导师,视频,论坛答案等.
与此相关的任何事情......
我对andriod app的想法有问题.我想在其中播放视频,但我不想从interenet下载它.在其他情况下,我想在设备上使用它.
所以,人是从Android市场下载它,可以播放视频而无需下载.我已经想出了一些解决方案,但没有一个是好的.
第一个是将它添加到应用程序资源,但你不能在那里有视频.
第二个是在安装期间添加或更好地创建文件夹(更多specyfic first onCreate方法),然后从app复制视频.嗯,没有那么糟糕的选择(你可以例如下载一次只有网络使用后台服务的视频)但我不知道如何删除卸载,因为你的应用程序不知道什么时候它是unistalled.
那么有人知道或有任何想法吗?
在Android中,是否可以从视频URL(例如:http://www.test.com/video.mp4)录制短片段(例如视频中任意5-10秒)?
例如,我想在一个Activity中传输一个视频(来自url),并允许从中捕获/记录一个短片段.也许,允许用户从视频中录制任意开始/结束时间.如果是这样,是否有API来完成此任务?如果没有,是否有支持此功能的Android库?
请为此提供示例代码解决方案.
我正在尝试在我的应用程序中播放4K视频,但只要所有设备都无法播放4K视频,我就会遇到麻烦.
我开发了基于视频列表的Android应用程序,我遇到了一些问题,
1.滚动列表视图时需要自动播放视频
2.需要暂停,停止,恢复和全屏模式
3.每次视频都是流媒体
4.如何制作缓存视频并无需播放
是否有任何Lib或参考链接,并提前谢谢
我有一个奇怪的问题,通过使用MediaRecorder读取使用设备的相机记录的视频文件的长度/持续时间.该文件记录在应用程序的专用存储目录中,其目的如下:
mMediaRecorder.setOutputFile(context.getFilesDir() + "/recordings/webcam.3gpp");
Run Code Online (Sandbox Code Playgroud)
录制完成后,我尝试使用以下方法读取视频的长度:
MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();
mediaMetadataRetriever.setDataSource(context.getFilesDir() + "/recordings/webcam.3gpp");
String time = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
return Long.parseLong(time);
Run Code Online (Sandbox Code Playgroud)
MediaPlayer mp = MediaPlayer.create(context, Uri.parse(context.getFilesDir() + "/recordings/webcam.3gpp"));
long duration = mp.getDuration();
mp.release();
return duration;
Run Code Online (Sandbox Code Playgroud)
这些方法都不起作用.mediaMetadataRetriever.extractMetadata
返回null并MediaPlayer.create
失败并返回IOException.我已经验证该文件存在.
重要说明:如果我将录音保存到"/sdcard/recordings/webcam.3gpp",则不会发生此问题.出于某种原因,我只是无法读取文件位于属于应用程序的专用文件目录中的持续时间.此外,这个问题只发生在运行Android 2.3的Samsung Droid Charge上.它不会发生在运行Android 4.2的三星Galaxy S4和运行Android 4.3的华硕Nexus 7上.
如果我拿相同的文件并将其复制到SD卡,然后在那里读取它的长度,一切正常.是什么赋予了?
copy(new File(context.getFilesDir() + "/recordings/webcam.3gpp"), new File("/sdcard/wtfisthiscrap.3gpp"));
MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();
mediaMetadataRetriever.setDataSource("/sdcard/wtfisthiscrap.3gpp");
String time = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
return Long.parseLong(time); // works!
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能解决这个问题?
android android-video-player android-camera android-mediaplayer android-mediarecorder
我正在使用以下代码在Android手机中播放MP4:
VideoView videoView = (VideoView) findViewById(R.id.VideoView);
// Set video link (mp4 format )
File file2 = new File("/sdcard/Alone.mp4");
Uri video = Uri.fromFile(file2);
videoView.setVideoURI(video);
videoView.start();
Run Code Online (Sandbox Code Playgroud)
但是当我播放这个视频时,在开始播放该视频之前,我看到一个黑屏0.2或0.3秒.
我不希望出现黑屏.
那么我应该怎么做?我想要的是,当我播放视频时,应该只有视频的屏幕,在播放之前不应该有任何其他黑屏吗?
谢谢.
video android android-ndk android-video-player android-videoview