移動端播放視頻文件
阿新 • • 發佈:2017-05-18
cnblogs [0 ttext get logs href hand unity 移動
移動端
在移動端,unity並不提供MovieTexture,AVPro QuickTime也用不了,其最基本的顯示方案使用通過PlayFullScreenMovie()函數進行全屏播放,根據其官網解釋,主要有以下方面:
(1)視頻流直接從設備存儲器中獲得,所以文件只能是單獨提供,視頻文件放置在StreamingAssets 文件夾中
(2) 視頻播放過陳中,Unity將會停止;播放結束後unity自動恢復;播放過程中屏幕中的顏色會變為播放器的背景顏色,播放之後恢復。
(3)在IOS中,內部實際上是調用MPMoviePlayerController的方法
(4)能夠支持的格式: .mov, .mp4, .mpv, and .3gp ,H.264,MPEG-4 Part 2 video
Handheld.PlayFullScreenMovie ("StarWars.mp4", Color.black, FullScreenMovieControlMode.CancelOnInput);
話不投機,兩句多,還是果斷第三方插件,Mobile movie texture for android 就是很不錯的東西,利用開源視頻編解碼庫Theora進行視頻解碼,然後通過Unity Texture實現顯示。下圖為多視頻顯示效果:
應用中的一些問題:
(1)因為視頻編解碼庫是使用Theora ,所以只能支持OGG、OGV格式的視頻和音頻,如果要使用其他格式則需要轉換一下,可以Theora Converter .NET工具進行轉換。(2)視頻seek功能不是很精確,雖然能用
(3)多視頻播放問題,如果想要多少視頻同時播放,需要理解內部代碼的實現,修改後可以湊合著使用。多視頻播放的另外一個問題是效率問題,如果是N個視頻,可能就會有N個後臺線程在進行解碼操作,相應的也會有N個渲染管道進行渲染,我在RK3188上進行三個不同視頻的播放,就會有卡頓。多視頻播放中間理解的關鍵代碼在下面,Texture2D.CreateExternalTexture 函數從視頻中獲得貼圖資源,SetTextures()進行繪制,如果使用多個視頻,需要多個材質(也就是多個渲染管道)。
private void AllocateTexures() { m_ChannelTextures[0] = Texture2D.CreateExternalTexture(m_yStride, m_yHeight, TextureFormat.BGRA32, false, false, GetNativeYHandle(m_nativeContext)); m_ChannelTextures[1] = Texture2D.CreateExternalTexture(m_uvStride, m_uvHeight, TextureFormat.RGBA32, false, false, GetNativeCrHandle(m_nativeContext)); m_ChannelTextures[2] = Texture2D.CreateExternalTexture(m_uvStride, m_uvHeight, TextureFormat.RGBA32, false, false, GetNativeCbHandle(m_nativeContext)); if (m_movieMaterials != null) { for (int i = 0; i < m_movieMaterials.Length; ++i) { var mat = m_movieMaterials[i]; if (mat != null) { SetTextures(mat); } } } } public void SetTextures(Material material) { material.SetTexture("_YTex", m_ChannelTextures[0]); material.SetTexture("_CrTex", m_ChannelTextures[1]); material.SetTexture("_CbTex", m_ChannelTextures[2]); material.SetTextureScale("_YTex", m_uvYScale); material.SetTextureOffset("_YTex", m_uvYOffset); material.SetTextureScale("_CbTex", m_uvCrCbScale); material.SetTextureOffset("_CbTex", m_uvCrCbOffset); }
http://www.cnblogs.com/zsb517/p/4060814.html
移動端播放視頻文件