首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >unity3d接入腾讯云播放器TXVodPlayer点播场景能获取视频帧数据吗?

unity3d接入腾讯云播放器TXVodPlayer点播场景能获取视频帧数据吗?

提问于 2023-09-19 17:33:54
回答 1关注 0查看 158

腾讯云播放器sdk提供直播场景与点播场景实现。

其他直播场景可以通过onRenderVideoFrame()获取视频帧数据,从而unity3d可通过getData获取视频帧数据完成渲染。

代码语言:javascript
复制
public void onRenderVideoFrame(V2TXLivePlayer player, V2TXLiveDef.V2TXLiveVideoFrame v2TXLiveVideoFrame) {
    synchronized(MainActivity.M2) {
        try {
            ByteArrayCallbackResult r = (ByteArrayCallbackResult)MainActivity.M2.get(name);
            if (r != null) {
                r.value = v2TXLiveVideoFrame.data;
                r.height = v2TXLiveVideoFrame.height;
                r.width = v2TXLiveVideoFrame.width;
                r.rotation = v2TXLiveVideoFrame.rotation;
            }
        } catch (Exception var6) {
            Log.e("video sdk ", "error " + var6.toString());
        }

    }
}

点播场景中没有对应的获取视频帧数据的方法,请问如何获取视频帧数据渲染到unity。下面是点播播放器回调通知。

代码语言:javascript
复制
                ITXVodPlayListener itxListeer = new ITXVodPlayListener() {
                    @Override
                    public void onPlayEvent(TXVodPlayer player, int event, Bundle param) {

                        if (mVodPlayer == null) {
                            return;
                        }

                        if (event + "" == TXVodConstants.EVT_KEY_FRAME_CONTENT_LIST) {
                            Log.d(TAG, "-------------------------------------------------------针数据------------------------");

                        }

                        if (event != TXLiveConstants.PLAY_EVT_PLAY_PROGRESS) {
                            Log.d(TAG, "-------------------------------------------------------不是播放事件------------------------");

                            String playEventLog = "receive event: " + event + ", " + param.getString(TXLiveConstants.EVT_DESCRIPTION);
                            Log.d(TAG, playEventLog);
                        }


                        if (event == TXLiveConstants.PLAY_EVT_VOD_LOADING_END) {
                            Log.d(TAG, "-------------------------------------------------------缓冲完成------------------------");

                            mIsStopped = true;
                        }

                        if (event == TXLiveConstants.PLAY_EVT_VOD_PLAY_PREPARED) {
                            Log.d(TAG, "-------------------------------------------------------准备播放------------------------");

                            List<TXBitrateItem> bitrateItems = mVodPlayer.getSupportedBitrates();
                            int bitrateItemSize = bitrateItems != null ? bitrateItems.size() : 0;
                            if (bitrateItemSize > 0) {
                                Collections.sort(bitrateItems); //masterPlaylist多清晰度,按照码率排序,从低到高
                            }
                        }

                        if (event == TXLiveConstants.PLAY_EVT_PLAY_BEGIN) {
                            Log.d(TAG, "-------------------------------------------------------开始播放------------------------");

                            //stopLoadingAnimation();
                            Log.d("AutoMonitor", "PlayFirstRender,cost=" + (System.currentTimeMillis() - mStartPlayTS));


                        } else if (event == TXLiveConstants.PLAY_EVT_PLAY_PROGRESS) {
                            Log.d(TAG, "-------------------------播放进程------------------------");


                            int progress = param.getInt(TXLiveConstants.EVT_PLAY_PROGRESS_MS);
                            int duration = param.getInt(TXLiveConstants.EVT_PLAY_DURATION_MS);
                            int playable = param.getInt(TXLiveConstants.EVT_PLAYABLE_DURATION_MS);

                            return;
                        } else if (event == TXLiveConstants.PLAY_ERR_NET_DISCONNECT || event == TXLiveConstants.PLAY_EVT_PLAY_END || event == TXLiveConstants.PLAY_ERR_FILE_NOT_FOUND) {
                            Log.d(TAG, "-------------------------------------------------------网络断开,播放结束,播放文件未找到------------------------");

                            stopPlayVod();
                            mVideoPlay = false;
                            mVideoPause = false;

                        } else if (event == TXLiveConstants.PLAY_EVT_PLAY_LOADING) {
                            Log.d(TAG, "-------------------------------------------------------视频数据缓冲中……------------------------");

                            // startLoadingAnimation();
                        } else if (event == TXLiveConstants.PLAY_EVT_RCV_FIRST_I_FRAME) {
                            Log.d(TAG, "------------------------------------------------------ 网络接收到首个可渲染的视频数据包(IDR)------------------------");

                            //  stopLoadingAnimation();
//            findViewById(R.id.playerHeaderView).setVisibility(View.GONE);
//            if (mPhoneListener.isInBackground()) {
//                mVodPlayer.pause();
//            }
                        } else if (event == TXLiveConstants.PLAY_EVT_CHANGE_RESOLUTION) {
                            Log.d(TAG, "-------------------------------------------------------改变分辨率------------------------");

                        } else if (event == TXLiveConstants.PLAY_ERR_HLS_KEY) {//HLS 解密 key 获取失败
                            Log.d(TAG, "-------------------------------------------------------解密 key 获取失败------------------------");

                            stopPlayVod();
                        } else if (event == TXLiveConstants.PLAY_WARNING_RECONNECT) {
                            Log.d(TAG, "-------------------------------------------------------警告重连------------------------");

                            //startLoadingAnimation();
                        } else if (event == TXLiveConstants.PLAY_EVT_CHANGE_ROTATION) {
                            Log.d(TAG, "-------------------------------------------------------改变方向------------------------");

                            return;
                        }

                        if (event < 0) {
                            Log.d(TAG, "-------------------------------------------------------没有事件------------------------");

                            // Toast.makeText(getApplicationContext(), param.getString(TXLiveConstants.EVT_DESCRIPTION), Toast.LENGTH_SHORT).show();
                        }
                    }
                    @Override
                    public void onNetStatus(TXVodPlayer txVodPlayer, Bundle bundle) {
                        //获取当前CPU使用率
                        CharSequence cpuUsage = bundle.getCharSequence(TXLiveConstants.NET_STATUS_CPU_USAGE);
                        //获取视频宽度
                        int videoWidth = bundle.getInt(TXLiveConstants.NET_STATUS_VIDEO_WIDTH);
                        //获取视频高度
                        int videoHeight = bundle.getInt(TXLiveConstants.NET_STATUS_VIDEO_HEIGHT);
                        //获取实时速率,  单位:kbps
                        int speed = bundle.getInt(TXLiveConstants.NET_STATUS_NET_SPEED);
                        //获取当前流媒体的视频帧率
                        int fps = bundle.getInt(TXLiveConstants.NET_STATUS_VIDEO_FPS);
                        //获取当前流媒体的视频码率,单位 bps
                        int videoBitRate = bundle.getInt(TXLiveConstants.NET_STATUS_VIDEO_BITRATE);
                        //获取当前流媒体的音频码率,单位 bps
                        int audioBitRate = bundle.getInt(TXLiveConstants.NET_STATUS_AUDIO_BITRATE);
                        //获取缓冲区(jitterbuffer)大小,缓冲区当前长度为0,说明离卡顿就不远了
                        int jitterbuffer = bundle.getInt(TXLiveConstants.NET_STATUS_VIDEO_CACHE);
                        //获取连接的服务器的IP地址
                        String ip = bundle.getString(TXLiveConstants.NET_STATUS_SERVER_IP);

                    }
                };

回答

和开发者交流更多问题细节吧,去 写回答
相关文章

相似问题

相关问答用户
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档