我很长时间以来一直面临这些问题,而且我对HLS的android支持感到非常失望,因为它的行为太随机了.
要求:
1)播放多个.m3u8视频流
2)应该在不同的设备和api级别上工作.
我所讨论的和各自的问题:
方法 - 1) 具有原生MediaPlayer的TextureView:
播放的视频数量取决于设备,对于某些设备,它只播放一个视频(My Device - samsung galaxy grand quattro - api level 16),对于某些设备,它可以播放所有四个视频流.
取决于api级别,一些.m3u8网址正在使用软糖而不是kitkat.
方法 - 2) ExoPlayer:
方法 - 3) Vitamio:
成功播放每个.m3u8网址
没有多视频视频的支持
方法 - 4) grafika:
我正在寻找的解决方案:
1)应该播放多个视频流,就像上述任何一种方法一样,我的设备可以播放单个视频,但似乎Milestone Mobile能够在我的设备中播放8个视频流(How?:O).
2)如果本机MediaPlayer无法播放某些.m3u8网址,那么如何调试确切的问题就像aac编解码器,解码器,段,.ts文件等有什么问题?
3)如果本机MediaPlayer无法播放流媒体,那么我该如何制作支持大多数流媒体网址的自定义MediaPlayer?
4)是否有可能与Vitamio一起播放多个视频?
5)符合我要求的任何其他HLS客户的参考?
就个人而言,我想选择Method-1,那么有什么我可以做的吗?
我正在尝试使用视频作为元素来实现列表视图.我正在使用此项目在纹理视图上显示视频.它使用下面的MediaPlayer.在同时加载两个视频时失败(大部分时间).
我得到的错误是:
TextureVideoView error. File or network related operation errors.
MediaPlayer: error (1, -2147479551)
Run Code Online (Sandbox Code Playgroud)
当从磁盘加载文件时也会发生这种情况
在错误处理部分,我尝试重置URL.然后我大多得到
E/BufferQueueProducer: [unnamed-30578-12] disconnect(P): connected to another API (cur=0 req=3)
Run Code Online (Sandbox Code Playgroud)
错误.我不清楚的是,从网络设置一些任意视频会有效,但重试相同的网址会失败.
所以在OnErrorListener中:
textureView.setVideo(item.getUriMp4(),MediaFensterPlayerController.DEFAULT_VIDEO_START);
Run Code Online (Sandbox Code Playgroud)
会失败但是:
textureView.setVideo("http://different.video" ... )
Run Code Online (Sandbox Code Playgroud)
会很有效.
这对于特定文件也不是问题,因为滚动不同的视频文件将失败.有时那些失败的人会在下次工作.
我也试过MediaCodec和MediaExtractor组合而不是MediaPlayer方法,但我遇到,看起来像,设备特定的平台错误
任何提示?有什么建议?
谢谢
W上.
我正在开发多人视频应用程序,因此我创建了9个视图3*3.
当我初始化所有(3*3)视频,然后正常工作几秒钟,一段时间后视频进入黑屏,不显示单个视频,我不明白这个问题是面向设备或Android不支持超过1视频活动,任何人都知道如何解决这个问题,否则如果视频变成黑色,那么如何识别视频会变成黑屏,如果我们发现这个,那么我将刷新视图并再次启动视频,我不知道它是否正确方式与否.
请任何人知道如何解决这个问题,然后请分享信息!
我使用下面的代码在一个活动中显示多个视频
videoPlayer.setVideoPath("path");
videoPlayer.start();
videoPlayer.requestFocus();
videoPlayer.setKeepScreenOn(true);
Run Code Online (Sandbox Code Playgroud)
设置准备听众
videoPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
}
Run Code Online (Sandbox Code Playgroud)
设置完成监听器
videoPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
//play next
}
});
Run Code Online (Sandbox Code Playgroud)
处理错误监听器
videoPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mediaPlayer, int i, int i1) {
// play next
return true;
}
});
Run Code Online (Sandbox Code Playgroud)
当视频播放之前,我设置一些属性
mediaplyer对象
mediaPlayer.setDisplay(null);
mediaPlayer.reset();
mediaPlayer.setDisplay(videoPlayer.getHolder());
Run Code Online (Sandbox Code Playgroud)
我分享我的项目的基本代码,请告诉我,如果我缺少任何东西或Android不支持同一活动中的多个视频.
示例代码:
如何在一个活动中播放这两个视频
public class Two_videos extends Activity
{
VideoView video1, video2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.two_video);
VideoView video1= (VideoView) findViewById(R.id.video1);
video1.setVideoPath("/mnt/sdcard/Movies/com.bnb.giggle/IMG_20130415184609.mp4");
video1.start();
VideoView video2= (VideoView) findViewById(R.id.video2);
video2.setVideoPath("/mnt/sdcard/Movies/com.bnb.giggle/IMG_20130415184608.mp4");
video2.start();
}
}
Run Code Online (Sandbox Code Playgroud)
不能同时播放两个视频.