我想在我的Android应用程序中播放我的资产或原始文件夹中的视频,VideoView因为我收到错误因为视频无法播放请任何人给我一个解决方案.
这是我使用的代码
VideoView vd = (VideoView)findViewById(R.id.Video);
Uri uri = Uri.parse("android.resource:" + R.raw.video);
MediaController mc = new MediaController(this);
vd.setMediaController(mc);
vd.setVideoURI(uri);
vd.start();
Run Code Online (Sandbox Code Playgroud) 我目前正在研究两款Android手机之间的视频流.我写了一个能够将视频录制到sd文件的应用程序(使用MediaRecorder); 我写了另一个能够显示文件视频的应用程序.两个应用程序都运行良
我在以下网站找到了一个关于"用Android播放视频 - 无需写入本地文件"的网站.这正是我想要做的.
我修改了我的代码.
对于录像机,它是:
socket=severSocket.accept();
ParcelFileDescriptor=pfd;
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
recorder.setVideoFrameRate(15);
recorder.setVideoSize(320, 240);
recorder.setPreviewDisplay(holder.getSurface());
pfd = ParcelFileDescriptor.fromSocket(socket);
recorder.setOutputFile(pfd.getFileDescriptor());
recorder.prepare();
recorder.start();
Run Code Online (Sandbox Code Playgroud)
对于视频播放器:
Socket socket = new Socket(IP,PORT);
mMediaPlayer = new MediaPlayer();
pfd = ParcelFileDescriptor.fromSocket(socket);
mMediaPlayer.setDataSource(pfd.getFileDescriptor()); // <-- here is the problem
mMediaPlayer.setDisplay(holder);
mMediaPlayer.prepare();
mMediaPlayer.setOnBufferingUpdateListener(this);
mMediaPlayer.setOnCompletionListener(this);
mMediaPlayer.setOnPreparedListener(this);
mMediaPlayer.setOnVideoSizeChangedListener(this);
mMediaPlayer.start();
Run Code Online (Sandbox Code Playgroud)
程序粉碎mMediaPlayer.setDataSource(pfd.getFileDescriptor());MediaPlayer我知道我没有正确设置DataSource.ParcelFileDescriptor必须有其他设置才能放入MediaPlayer.
有谁知道如何使用ParcelFileDescriptor进行MediaPlayer?任何有用的建议或提示都会很好......
谢谢
将
我有一个AsyncTask,我可以隐藏视频视图,开始视频播放,并在视频播放时显示视频视图.
但是当视频视图设置为不可见时,视频才会启动,异步任务会一直挂在onBackground上.如果我注释掉这一行,视频就会开始播放.为什么视频视图需要可见表面?
public void walk(final View v) {
new AsyncTask() {
@Override
protected void onPreExecute() {
super.onPreExecute();
mVideoView.setVisibility(View.INVISIBLE); // this line causes video not to start
mVideoView.start();
}
@Override
protected Object doInBackground(Object... objects) {
while (!mVideoView.isPlaying()) {}
return null;
}
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
mVideoView.setVisibility(View.VISIBLE);
}
}.execute();
Run Code Online (Sandbox Code Playgroud)
为什么我这样做有一些背景知识:我试图避免在启动视频时常见的黑色闪光问题:
https://stackoverflow.com/search?q=%5Bandroid%5D+videoview+black
https://stackoverflow.com/search?q=%5Bandroid%5D+video+%5Bmediaplayer%5D+black
android android-asynctask android-mediaplayer android-videoview
我正在使用VideoView播放视频,我想完全停止播放视频.请帮我解决这个问题.谢谢.
在Android中,我创建了一个并排有三个表面视图的布局,我想同时播放一个带有不同媒体播放器的视频文件.但是我面临的一个问题是,三个人都不能同时播放该视频.其中一两个人停下了显示器.如果我直接使用视频视图而不是Media Player类,但问题仍然存在.请任何人都可以提供帮助.问题是什么?它给错误表面创建失败原生错误.我尝试了不同的组合,例如3个不同视图中的一个文件,三个不同视图中的三个文件,但问题尚未解决.其他网站上的一些回复称它取决于内核版本.如果它取决于内核版本,请你在android网站上给我任何android文档链接,它取决于内核版本.或者可以玩,请给我代码的步骤.这是错误日志 -
04-10 19:23:37.995: E/ANDROID_DRM_TEST(2573): Client::notify In
04-10 19:23:37.995: V/AudioPolicyManager(2573): startOutput() output 1, stream 3, session 131
04-10 19:23:37.995: V/AudioPolicyManager(2573): getDeviceForStrategy() from cache strategy 0, device 2
04-10 19:23:37.995: V/AudioPolicyManager(2573): getNewDevice() selected device 2
04-10 19:23:37.995: V/AudioPolicyManager(2573): setOutputDevice() output 1 device 2 delayMs 0
04-10 19:23:37.995: V/AudioPolicyManager(2573): setOutputDevice() setting same device 2 or null device for output 1
04-10 19:23:37.995: I/AudioFlinger(2573): start output streamType (0, 3) for 1
04-10 19:23:37.995: D/AudioHardwareYamaha(2573): AudioStreamOut::setParameters(keyValuePairs="start_output_streamtype=3")
04-10 19:23:38.010: W/SEC_Overlay(2689): overlay_setPosition(0) 0,0,200,397 => 0,0,200,397 …Run Code Online (Sandbox Code Playgroud) android surfaceview android-ndk android-mediaplayer android-videoview
我正在创建一个简单的应用程序,从网络流式传输视频,但我现在想要更改代码,以便我可以从SDCard播放视频文件
原始代码:
Uri vidFile = Uri.parse("MY SITE HERE");
VideoView videoView = (VideoView) findViewById(R.id.VideoView);
videoView.setVideoURI(vidFile);
videoView.setMediaController(new MediaController(this));
videoView.start();
Run Code Online (Sandbox Code Playgroud)
所以请帮我改变代码,以便它可以播放我的移动存储卡中的视频.
我是Android的新手,想要一个接一个地播放视频,以便它看起来像连续视频.
我发现stackoverflow上的这个链接非常有用.如何播放 - 视频 - 一个接一个 - 同时 当我使用它然后虽然我能够一个接一个地播放视频, 但是从一个片段切换到另一个片段导致暂停视频一秒钟然后播放下一个一个. 因此,它看起来不像连续视频.
请帮我解决我的问题.这是我的代码.
public class VideoActivity extends Activity{
VideoView videoView, videoView1;
MediaController mc;
int count = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_video);
videoView = (VideoView) findViewById(R.id.VVSimpleVideo);
setup();
videoView.setOnCompletionListener(completionListener);
}
public void setup() {
String _path = "/mnt/sdcard/Video/"+count+".mp4";
videoView.setVideoPath(_path);
videoView.start();
count++;
}
private OnCompletionListener completionListener=new OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
mp.stop();
setup();
}
};
}
Run Code Online (Sandbox Code Playgroud)
现在我尝试通过两个VideoView类实例来玩. 试图通过第一个玩家播放第一个视频,第二个播放器播放第二个视频,第一个播放器播放第三个视频,第二个播放器播放第四个视频,依此类推.
但我仍然无法顺利播放视频,同样存在问题.
这是我的双重播放器代码.
public class VideoActivity extends Activity{ …Run Code Online (Sandbox Code Playgroud) 我正在开发一个应用程序,我需要从远程服务器播放视频作为直播.
这是由我成功完成的.我管理了我应用中的所有内容.
但是当加载视频时,我需要在VideoView上显示进度对话框.
我尝试使用OnPreparedListener作为" 如何在播放视频之前显示进度条 "
@Override
public void onPrepared(MediaPlayer mp) {
progressbar.setVisibility(View.GONE);
mp.start();
}
Run Code Online (Sandbox Code Playgroud)
但进度条5-7秒后视频播放消失了.我在Google上搜索了很多但没有找到任何解决方案.
任何人都可以帮助我.
提前致谢.
java android video-streaming live-streaming android-videoview
我有一个使用Recycler View of android的卡片列表.我正在显示一些文字及其下方的视频视图.
该列表滚动顺利,播放视频流畅,直到我使用setMediaControll()启用控件.
当我向上/向下滚动列表时启用此视频媒体控件后,即使视频视图随列表视图滚动移动一起自由移动,控件也会保持在相同位置.
这些控件应与列表视图一起移动,并保持静止.可能是什么导致了这个?这是预期的平台行为吗?
更新代码:
布局:
<FrameLayout
android:layout_centerHorizontal="true"
android:layout_centerInParent="true"
android:layout_gravity="center_horizontal"
android:id="@+id/frame_layout_video_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<VideoView
android:id="@+id/video_view"
android:layout_width="360sp"
android:layout_height="225sp"
android:layout_gravity="center" />
<ImageView
android:id="@+id/image_button_play"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|center_horizontal"
android:contentDescription="play_pause_button"
app:srcCompat="@drawable/ic_play_circle_filled_white_24px" />
<ProgressBar
android:id="@+id/progressbar_video"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|center_horizontal"
android:visibility="gone" />
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)
在视图持有人:
MyViewHolder(View itemLayoutView) {
super(itemLayoutView);
..........
myVideoView = itemLayoutView.findViewById(R.id.video_view);
..........
}
Run Code Online (Sandbox Code Playgroud)
开始视频播放的代码:
..........
Uri uri = Uri.parse(url);
holder.myVideoView.setVideoURI(uri);
MediaController fsm = new MediaController(mContext,finalistFragment , url, holder.myVideoView);
fsm.setAnchorView(holder.myVideoView);
holder.myVideoView.setMediaController(fsm);
..........
Run Code Online (Sandbox Code Playgroud)
对于列表,我正在使用RecyclerView.
我正在构建一个应用程序,用户点击按钮以全屏显示视频.最初,视频附加到ViewPager内的视图.为了能够全屏显示,我将其与父项分离,并将其重新连接到根视图.这种方法很好,除非在播放时将视频切换为全屏.当我分离播放VideoView时,它只是停止,我需要重新启动它.这是不可接受的,因为视频在恢复之前开始缓冲.这里是完成分离的代码部分:
final ViewGroup parent = (ViewGroup) findViewById(R.id.parent);
final ViewGroup root = (ViewGroup) findViewById(R.id.root);
Button b = (Button) findViewById(R.id.button);
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
parent.removeView(mVideoView);
LayoutParams lp = new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
root.addView(mVideoView, lp);
}
});
Run Code Online (Sandbox Code Playgroud)
根据设备,我有一个不同的日志错误.可能是因为实际的视频播放器是由制造商提供的,而不是Android SDK.以下是Nexus 7的错误日志:
10-30 20:26:18.618: D/NvOsDebugPrintf(124): NvMMDecTVMRDestroyParser Begin
10-30 20:26:18.618: D/NvOsDebugPrintf(124): --------- Closing TVMR Frame Delivery Thread -------------
10-30 20:26:18.678: D/NvOsDebugPrintf(124): ------- NvAvpClose -------
10-30 20:26:18.678: D/NvOsDebugPrintf(124): NvMMDecTVMRDestroyParser Done
10-30 20:26:18.678: D/NvOsDebugPrintf(124): NvMMLiteTVMRDecPrivateClose Done
Run Code Online (Sandbox Code Playgroud)
我无法在不停止的情况下分离视频.我尝试使用SurfaceView或TextureView但没有成功.
我也尝试过寻找第三方视频播放器.我发现了一个商业原因(http://www.vitamio.org/),我出于商业原因无法真正使用它.我找到了一个开源的,去年没有更新过(https://code.google.com/p/dolphin-player/).
我目前只在平板电脑上定位Android 4.2或更高版本. …
android ×10
android-ndk ×1
controls ×1
ffmpeg ×1
java ×1
media-player ×1
sockets ×1
surfaceview ×1
vitamio ×1