zoukankan      html  css  js  c++  java
  • H.265编码视频播放器EasyPlayerProWIN版播放HLS协议视频流显示时间与实际不符如何修复?

    经过多年的技术积累与实践打造,TSINGSEE青犀视频团队研发的EasyPlayer播放器项目系列无论是在对接设备型号种类,还是在对接编码的兼容性上,都具备较高的可用性,从集成进第三方平台到支持H265编码视频播放,我们一直在积极开发和拓展EasyPlayer更多的功能。

    目前,EasyPlayer播放器项目发展出包括有: EasyPlayer-RTSP、EasyPlayer-RTMP、EasyPlayerPro 和EasyPlayer.js 等播放器。目前支持Windows、Android、iOS三个平台,EasyPlayer.js还支持Linux平台。

    近期我们发现EasyPlayerPro-WIN版本在两个播放器同时播放的情况下,有一点问题。使用EasyPlayerPro-WIN播放视频,在当前的播放窗口不关闭的情况下,在地址栏重新输入另一个录像文件的地址,播放器显示的文件时长依然是之前那个文件的时长,文件时长没有更新。如下图:

    上图中是播放下面截图中的两个流:

    可以看到其实这两个流总时长是不一样的,但是播放器右下角获取的时长还是第一次的时长。

    解决问题:
    看代码发现,在Timer1定时器里面有获取总时长和获取当前播放时长的方式,代码如下:

    if(mPlayer != IntPtr.Zero)
                {
                    Int64 param = 0;
                    if (totalTime <= 0)
                    {
                        Int64 ltotal = 0;
                        EasyPlayerPro_Getparam(mPlayer, EASY_PARAM_ID.EASY_PARAM_MEDIA_DURATION, ref param);
                        ltotal = param;
                        if (ltotal > 1)
                        {
                            totalTime = (int)(Int64)ltotal / 1000;
                            
                            skinTrackBar1.Maximum = (int)totalTime;
                        }
                    }
    
                    EasyPlayerPro_Getparam(mPlayer, EASY_PARAM_ID.EASY_PARAM_MEDIA_POSITION, ref param);
                    alreadyTime = (int)(Int64)param / 1000;
    
                    if (totalTime > 0)
                    {
                        if (totalTime - alreadyTime <= 1)
                        {
                            timer1.Enabled = false;
                            timer2.Enabled = false;
                            lblTime.Text = "时长:00分:00秒/00分:00秒";
                            skinTrackBar1.Value = 0;
                            EasyPlayerPro_Close(mPlayer);
                            mPlayer = IntPtr.Zero;
                        }
                        else
                        {
                            lblTime.Text = string.Format("时长:{0:00}分:{1:00}秒/{2:00}分:{3:00}秒", alreadyTime / 60, (alreadyTime) % 60, totalTime / 60, (totalTime) % 60);
                        }
                    }
                    else
                    {
                        lblTime.Text = string.Format("时长:{0:00}分:{1:00}秒/../..", alreadyTime / 60, (alreadyTime) % 60);
                    }
                }
    

    再给第二个流的时候,没有重新获取ltotal值,可以在停止视频播放的时候,把这个参数清零,即可解决问题。

    //停止播放
            private void button2_Click(object sender, EventArgs e)
            {
                EasyPlayerPro_Close(mPlayer);
                //totalTime = 0;
                bPlaying = false;
            }
  • 相关阅读:
    函数参数
    字符编码
    本周内容
    int,float,str,list,dict,元组
    python 基础变量
    Python学习(小笔记一)
    🌐 网络管理
    📓 LVM相关
    📹 进程管理(二)
    🎬进程管理
  • 原文地址:https://www.cnblogs.com/TSINGSEE/p/13924384.html
Copyright © 2011-2022 走看看