使用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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Android 8.0 华为手机 桌面应用图标显示圆形适配方案
下一篇:微信报错 {"errcode":40029,"errmsg":"invalid code, hints: [ req_id: CJaBfz4ce-QYCtNa ]"}

发表评论

最新留言

不错!
[***.144.177.141]2024年04月28日 18时54分50秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章