使用JiaoZiVideoPlayer播放视频方向横过来出现的问题
发布日期:2021-06-28 19:09:21
浏览次数:3
分类:技术文章
本文共 9877 字,大约阅读时间需要 32 分钟。
在开发中使用的是 饺子播放器(JiaoZiVideoPlayer) ,原来的节操播放器,不得不说确实很多坑在里面,因为项目中使用的是rtmmp格式的播放流,饺子播放器对此支持的不是太好,又因为项目中使用到全局小窗口播放视频,导致每次切换到小窗口的时候都会造成卡顿,黑屏的现象。
以后等有时间,还是会把JiaoZiVideoPlayer 饺子播放器给换掉,用阿里云免费的播放器,或者使用 基于饺子播放器改了又改,改了不认tm的GSYVideoPlayer 这个播放器,确实饺子播放器坑太多了。
下面说正事:
关于JiaoZiVideoPlayer 播放器在播放普通mp4视频的时候会出现本竖着的视频横着播放了,一开始以为视频源就是这样的,没想到好几个都是这样的,在网上搜了下:
写一个类继承JzvdStd,然后重写onInfo方法,
public class JZplayer extends JzvdStd { public JZplayer(Context context) { super(context); } public JZplayer(Context context, AttributeSet attrs) { super(context, attrs); } @Override public void init(Context context) { super.init(context); backButton.setVisibility(GONE); } @Override public void onInfo(int what, int extra) { super.onInfo(what, extra); if(what==IMediaPlayer.MEDIA_INFO_VIDEO_ROTATION_CHANGED){ //这里返回了视频的旋转角度,根据角度旋转视频到正确角度 JZMediaManager.textureView.setRotation(extra); } }}
不过我用的是饺子播放器demo里面的JZMediaIjkplayer
这个播放器,故我投机的在这个播放器里的OnInfo方法中进行了判断,没想到也可以用。主要是下面这句:
@Override public boolean onInfo(final IMediaPlayer iMediaPlayer, final int what, final int extra) { JZMediaManager.instance().mainThreadHandler.post(new Runnable() { @Override public void run() { if (JzvdMgr.getCurrentJzvd() != null) { if (what == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START) { JzvdMgr.getCurrentJzvd().onPrepared(); } else { if (what == IMediaPlayer.MEDIA_INFO_VIDEO_ROTATION_CHANGED) { // 这里返回了视频的旋转角度,根据角度旋转视频到正确角度 JZMediaManager.textureView.setRotation(extra); } else { JzvdMgr.getCurrentJzvd().onInfo(what, extra); } } } } }); return false; }
整个JZMediaIjkplayer类是下面这样的
package com.wuaisport.android.util;import android.media.AudioManager;import android.media.MediaPlayer;import android.util.Log;import android.view.Surface;import java.io.IOException;import cn.jzvd.JZMediaInterface;import cn.jzvd.JZMediaManager;import cn.jzvd.JzvdMgr;import tv.danmaku.ijk.media.player.IMediaPlayer;import tv.danmaku.ijk.media.player.IjkMediaPlayer;import tv.danmaku.ijk.media.player.IjkTimedText;/** * Created by Nathen on 2017/11/18. */public class JZMediaIjkplayer extends JZMediaInterface implements IMediaPlayer.OnPreparedListener, IMediaPlayer.OnVideoSizeChangedListener, IMediaPlayer.OnCompletionListener, IMediaPlayer.OnErrorListener, IMediaPlayer.OnInfoListener, IMediaPlayer.OnBufferingUpdateListener, IMediaPlayer.OnSeekCompleteListener, IMediaPlayer.OnTimedTextListener { IjkMediaPlayer ijkMediaPlayer; @Override public void start() { if (null != ijkMediaPlayer) { ijkMediaPlayer.start(); } } @Override public void prepare() { ijkMediaPlayer = new IjkMediaPlayer();// ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec", 0);// ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "opensles", 0);// ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "overlay-format", IjkMediaPlayer.SDL_FCC_RV32);// ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "framedrop", 1);// ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "start-on-prepared", 0);// ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "http-detect-range-support", 0);// ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_CODEC, "skip_loop_filter", 48);// ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "max-buffer-size", 1024 * 1024); ijkMediaPlayer.setOnPreparedListener(JZMediaIjkplayer.this); ijkMediaPlayer.setOnVideoSizeChangedListener(JZMediaIjkplayer.this); ijkMediaPlayer.setOnCompletionListener(JZMediaIjkplayer.this); ijkMediaPlayer.setOnErrorListener(JZMediaIjkplayer.this); ijkMediaPlayer.setOnInfoListener(JZMediaIjkplayer.this); ijkMediaPlayer.setOnBufferingUpdateListener(JZMediaIjkplayer.this); ijkMediaPlayer.setOnSeekCompleteListener(JZMediaIjkplayer.this); ijkMediaPlayer.setOnTimedTextListener(JZMediaIjkplayer.this); try { if (null != jzDataSource) { Log.e("ijkMediaPlayer", "prepare: " + jzDataSource + " ss " + jzDataSource.getCurrentUrl().toString()); ijkMediaPlayer.setDataSource(jzDataSource.getCurrentUrl().toString()); ijkMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); ijkMediaPlayer.setScreenOnWhilePlaying(true); ijkMediaPlayer.prepareAsync(); } } catch (IOException e) { e.printStackTrace(); } } @Override public void pause() { ijkMediaPlayer.pause(); } @Override public boolean isPlaying() { return ijkMediaPlayer.isPlaying(); } @Override public void seekTo(long time) { ijkMediaPlayer.seekTo(time); } @Override public void release() { if (ijkMediaPlayer != null) ijkMediaPlayer.release(); } @Override public long getCurrentPosition() { if (null != ijkMediaPlayer) { return ijkMediaPlayer.getCurrentPosition(); } else { return 0; } } @Override public long getDuration() { if (null != ijkMediaPlayer) { return ijkMediaPlayer.getDuration(); } else { return 0; } } @Override public void setSurface(Surface surface) { ijkMediaPlayer.setSurface(surface); } @Override public void setVolume(float leftVolume, float rightVolume) { ijkMediaPlayer.setVolume(leftVolume, rightVolume); } @Override public void onPrepared(IMediaPlayer iMediaPlayer) { ijkMediaPlayer.start(); if (jzDataSource.getCurrentUrl().toString().toLowerCase().contains("mp3")) { JZMediaManager.instance().mainThreadHandler.post(new Runnable() { @Override public void run() { if (JzvdMgr.getCurrentJzvd() != null) { JzvdMgr.getCurrentJzvd().onPrepared(); } } }); } } @Override public void onVideoSizeChanged(IMediaPlayer iMediaPlayer, int i, int i1, int i2, int i3) { JZMediaManager.instance().currentVideoWidth = iMediaPlayer.getVideoWidth(); JZMediaManager.instance().currentVideoHeight = iMediaPlayer.getVideoHeight(); JZMediaManager.instance().mainThreadHandler.post(new Runnable() { @Override public void run() { if (JzvdMgr.getCurrentJzvd() != null) { JzvdMgr.getCurrentJzvd().onVideoSizeChanged(); } } }); } @Override public void onCompletion(IMediaPlayer iMediaPlayer) { JZMediaManager.instance().mainThreadHandler.post(new Runnable() { @Override public void run() { if (JzvdMgr.getCurrentJzvd() != null) { JzvdMgr.getCurrentJzvd().onAutoCompletion(); } } }); } @Override public boolean onError(IMediaPlayer iMediaPlayer, final int what, final int extra) { JZMediaManager.instance().mainThreadHandler.post(new Runnable() { @Override public void run() { if (JzvdMgr.getCurrentJzvd() != null) { JzvdMgr.getCurrentJzvd().onError(what, extra); } } }); return true; } @Override public boolean onInfo(final IMediaPlayer iMediaPlayer, final int what, final int extra) { JZMediaManager.instance().mainThreadHandler.post(new Runnable() { @Override public void run() { if (JzvdMgr.getCurrentJzvd() != null) { if (what == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START) { JzvdMgr.getCurrentJzvd().onPrepared(); } else { if (what == IMediaPlayer.MEDIA_INFO_VIDEO_ROTATION_CHANGED) { // 这里返回了视频的旋转角度,根据角度旋转视频到正确角度 JZMediaManager.textureView.setRotation(extra); } else { JzvdMgr.getCurrentJzvd().onInfo(what, extra); } } } } }); return false; } @Override public void onBufferingUpdate(IMediaPlayer iMediaPlayer, final int percent) { JZMediaManager.instance().mainThreadHandler.post(new Runnable() { @Override public void run() { if (JzvdMgr.getCurrentJzvd() != null) { JzvdMgr.getCurrentJzvd().setBufferProgress(percent); } } }); } @Override public void onSeekComplete(IMediaPlayer iMediaPlayer) { JZMediaManager.instance().mainThreadHandler.post(new Runnable() { @Override public void run() { if (JzvdMgr.getCurrentJzvd() != null) { JzvdMgr.getCurrentJzvd().onSeekComplete(); } } }); } @Override public void onTimedText(IMediaPlayer iMediaPlayer, IjkTimedText ijkTimedText) { }}
这样就可以把横着播放的视频正常播放了。
关注「蛇崽网盘教程资源」公众号 ,在微信后台回复「领取资源」,获取IT资源200G干货大全。
更多资源请访问:
关注「蛇崽网盘教程资源」公众号 ,在微信后台回复「领取资源」,获取IT资源200G干货大全。
在微信后台回复「130个小程序」,即可免费领取享有导入就能跑的微信小程序
转载地址:https://blog.csdn.net/xudailong_blog/article/details/89226949 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年04月28日 18时54分50秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
CTFSHOW WEB入门 命令执行做题笔记(持续更新)
2019-04-29
应急响应流程
2019-04-29
Vulhub Flask SSTI漏洞复现
2019-04-29
CTFSHOW 文件包含
2019-04-29
Apache HTTPD 换行解析漏洞
2019-04-29
Vulhub Apache HTTPD 多后缀解析漏洞
2019-04-29
CTFshow 反序列化
2019-04-29
CTFSHOW SSRF
2019-04-29
[BJDCTF2020]Mark loves cat
2019-04-29
[网鼎杯 2020 朱雀组]phpweb
2019-04-29
[BJDCTF2020]Cookie is so stable
2019-04-29
[SUCTF 2019]Pythonginx
2019-04-29
[极客大挑战 2019]RCE ME
2019-04-29
HackTheBox-------ScriptKiddie
2019-04-29
Shell学习
2019-04-29
[Zer0pts2020]Can you guess it?
2019-04-29
Jenkins资料整理
2019-04-29
ArrayList源码常用方法注意点
2019-04-29
MySQL资料整理
2019-04-29
Redis常用文章整理
2019-04-29