香港6合总彩透码主论坛
 找回密碼
 注冊帳號

掃一掃,訪問微社區

薛飛 基于VLC的Unity視頻播放器(二)

22
回復
3492
查看
打印 上一主題 下一主題
[ 復制鏈接 ]
排名
417
昨日變化

21

主題

233

帖子

4296

積分

Rank: 9Rank: 9Rank: 9

UID
686
好友
18
蠻牛幣
5491
威望
0
注冊時間
2013-7-4
在線時間
1934 小時
最后登錄
2020-1-15

專欄作家

QQ

馬上注冊,結交更多好友,享用更多功能,讓你輕松玩轉社區。

您需要 登錄 才可以下載或查看,沒有帳號?注冊帳號

x
本帖最后由 AWNUXCVBN 于 2019-3-29 11:53 編輯

示例是播放湖南衛視的rtmp視頻流 ,需要等待幾秒才會開始播放

[C#] 純文本查看 復制代碼
using Net.Media;
using System;
using System.IO;
using System.Runtime.InteropServices;
using UnityEngine;

public class Test : MonoBehaviour
{
    //視頻寬
    public int width = 1024;
    //視頻高
    public int height = 768;
    public Texture2D texture;
    public Material mat;
    IntPtr libvlc_instance_t;
    IntPtr libvlc_media_player_t;
    IntPtr handle;

    private VideoLockCB _videoLockCB;
    private VideoUnlockCB _videoUnlockCB;
    private VideoDisplayCB _videoDisplayCB;

    private int _pixelBytes = 4;
    private int _pitch;
    private IntPtr _buff = IntPtr.Zero;
    bool ready = false;

    string snapShotpath;
    // Use this for initialization
    void Start()
    {
        Loom.Initialize();
        snapShotpath = "file:///" + Application.streamingAssetsPath;

        _videoLockCB += VideoLockCallBack;

        _videoUnlockCB += VideoUnlockCallBack;

        _videoDisplayCB += VideoDiplayCallBack;


        handle = new IntPtr(1);

        libvlc_instance_t = MediaPlayer.Create_Media_Instance();

        libvlc_media_player_t = MediaPlayer.Create_MediaPlayer(libvlc_instance_t, handle);
        //湖南衛視直播地址
        string videoPath = "rtmp://58.200.131.2:1935/livetv/hunantv";
        //本地視頻地址
        //string videoPath = "file:///" + Application.streamingAssetsPath + "/test.mp4";
        bool state = MediaPlayer.SetLocation(libvlc_instance_t, libvlc_media_player_t, videoPath);
        Debug.Log("state:" + state);
        width = MediaPlayer.GetMediaWidth(libvlc_media_player_t);
        Debug.Log("width: " + width);
        height = MediaPlayer.GetMediaHeight(libvlc_media_player_t);
        Debug.Log("height: " + height);
        //網絡地址不曉得怎么拿到視頻寬高
        if(width==0&&height==0)
        {
            width = 1024;
            height = 576;
        }
        _pitch = width * _pixelBytes;
        _buff = Marshal.AllocHGlobal(_pitch * height);
        texture = new Texture2D(width, height, TextureFormat.RGBA32, false);
        mat.mainTexture = texture;

        MediaPlayer.SetCallbacks(libvlc_media_player_t, _videoLockCB, _videoUnlockCB, _videoDisplayCB, IntPtr.Zero);
        MediaPlayer.SetFormart(libvlc_media_player_t, "ARGB", width, height, _pitch);

        ready = MediaPlayer.MediaPlayer_Play(libvlc_media_player_t);
        Debug.Log("ready:" + ready);

        Debug.Log(MediaPlayer.MediaPlayer_IsPlaying(libvlc_media_player_t));
    }


    // Update is called once per frame
    void Update()
    {

    }

    private void FixedUpdate()
    {

    }

    private void OnGUI()
    {
        if (GUI.Button(new Rect(0, 0, 100, 100), "Take"))
        {
            Debug.Log("snapShotpath:" + snapShotpath);
            Debug.Log("@snapShotpath:" + @snapShotpath);
            //vlc截圖未解決 用Unity保存幀圖,畫面是上下反轉左右反轉的
            //Debug.Log(MediaPlayer.TakeSnapShot(libvlc_media_player_t, snapShotpath, "testa.jpg", width, height));
            byte[] bs = texture.EncodeToJPG();
            File.WriteAllBytes(Application.streamingAssetsPath + "/test.jpg", bs);
        }

    }

    private IntPtr VideoLockCallBack(IntPtr opaque, IntPtr planes)
    {
        Lock(); 
        Marshal.WriteIntPtr(planes, 0, _buff);
        Loom.QueueOnMainThread(() =>
        {
            texture.LoadRawTextureData(_buff, _buff.ToInt32());
            texture.Apply();
        });
        return IntPtr.Zero;
    }

    private void VideoDiplayCallBack(IntPtr opaque, IntPtr picture)
    { 
        
    }

    private void VideoUnlockCallBack(IntPtr opaque, IntPtr picture, IntPtr planes)
    { 
        Unlock();
    }
     
    bool obj = false;
    private void Lock()
    {
        obj = true;
    }
    private void Unlock()
    {
        obj = false;
    }
    private bool Islock()
    {
        return obj;
    }

    private void OnDestroy()
    {

    }

    private void OnApplicationFocus(bool focus)
    {

    }

    private void OnApplicationQuit()
    {
        try
        {
            if (MediaPlayer.MediaPlayer_IsPlaying(libvlc_media_player_t))
            {
                MediaPlayer.MediaPlayer_Stop(libvlc_media_player_t);
            }

            MediaPlayer.Release_MediaPlayer(libvlc_media_player_t);

            MediaPlayer.Release_Media_Instance(libvlc_instance_t); 
        }
        catch (Exception e)
        {
            Debug.Log(e.Message);
        }
    }
}


工程地址https://gitee.com/awnuxcvbn/UnityVLC
回復

使用道具 舉報

7日久生情
1710/5000
排名
10820
昨日變化

3

主題

1356

帖子

1710

積分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
310426
好友
0
蠻牛幣
2635
威望
0
注冊時間
2019-1-2
在線時間
255 小時
最后登錄
2020-2-17
沙發
2019-4-2 09:02:42 只看該作者
基于VLC的Unity視頻播放器(二)
回復 支持 反對

使用道具 舉報

6蠻牛粉絲
1482/1500
排名
2077
昨日變化

3

主題

89

帖子

1482

積分

Rank: 6Rank: 6Rank: 6

UID
124790
好友
0
蠻牛幣
3581
威望
0
注冊時間
2015-10-8
在線時間
724 小時
最后登錄
2020-2-15
板凳
2019-4-8 11:11:59 只看該作者
已下載,為何,我這里播放圖像是泛紅的呀??

QQ圖片20190408111102.png (591.34 KB, 下載次數: 98)

QQ圖片20190408111102.png
回復 支持 反對

使用道具 舉報

排名
417
昨日變化

21

主題

233

帖子

4296

積分

Rank: 9Rank: 9Rank: 9

UID
686
好友
18
蠻牛幣
5491
威望
0
注冊時間
2013-7-4
在線時間
1934 小時
最后登錄
2020-1-15

專欄作家

QQ
地板
樓主 2019-4-8 12:24:43 只看該作者
q598341543 發表于 2019-4-8 11:11
已下載,為何,我這里播放圖像是泛紅的呀??

試試這個圖片格式TextureFormat.ARGB32
回復 支持 反對

使用道具 舉報

排名
417
昨日變化

21

主題

233

帖子

4296

積分

Rank: 9Rank: 9Rank: 9

UID
686
好友
18
蠻牛幣
5491
威望
0
注冊時間
2013-7-4
在線時間
1934 小時
最后登錄
2020-1-15

專欄作家

QQ
5#
樓主 2019-4-8 12:24:50 只看該作者
q598341543 發表于 2019-4-8 11:11
已下載,為何,我這里播放圖像是泛紅的呀??

試試這個圖片格式
回復 支持 反對

使用道具 舉報

6蠻牛粉絲
1482/1500
排名
2077
昨日變化

3

主題

89

帖子

1482

積分

Rank: 6Rank: 6Rank: 6

UID
124790
好友
0
蠻牛幣
3581
威望
0
注冊時間
2015-10-8
在線時間
724 小時
最后登錄
2020-2-15
6#
2019-4-8 14:01:34 只看該作者
AWNUXCVBN 發表于 2019-4-8 12:24
試試這個圖片格式TextureFormat.ARGB32

多謝! 已解決
回復 支持 反對

使用道具 舉報

6蠻牛粉絲
1204/1500
排名
2236
昨日變化

1

主題

205

帖子

1204

積分

Rank: 6Rank: 6Rank: 6

UID
232255
好友
2
蠻牛幣
1937
威望
0
注冊時間
2017-7-15
在線時間
370 小時
最后登錄
2020-1-22
7#
2019-4-17 10:26:32 只看該作者
例是播放湖南衛視的rtmp視頻流 ,需要等待幾秒才會開始播放
回復 支持 反對

使用道具 舉報

4四處流浪
343/500
排名
12307
昨日變化

3

主題

102

帖子

343

積分

Rank: 4

UID
148779
好友
0
蠻牛幣
190
威望
0
注冊時間
2016-5-16
在線時間
162 小時
最后登錄
2019-12-17
8#
2019-4-19 10:53:54 只看該作者
留名。留名。留名。留名。留名。
回復 支持 反對

使用道具 舉報

0

主題

1

帖子

4

積分

Rank: 1

UID
320069
好友
0
蠻牛幣
15
威望
0
注冊時間
2019-4-19
在線時間
3 小時
最后登錄
2019-5-2
9#
2019-4-19 14:32:45 只看該作者
你好,請問打包exe后運行報錯怎么解決呢
libvlccore.dll caused an Access Violation (0xc0000005)
  in module libvlccore.dll at 0033:10abe798.
回復 支持 反對

使用道具 舉報

排名
39864
昨日變化

0

主題

7

帖子

25

積分

Rank: 1

UID
142395
好友
0
蠻牛幣
34
威望
0
注冊時間
2016-3-20
在線時間
12 小時
最后登錄
2019-6-6
10#
2019-4-23 14:42:03 只看該作者
基于VLC的Unity視頻播放器
回復 支持 反對

使用道具 舉報

4四處流浪
380/500
排名
8489
昨日變化

2

主題

49

帖子

380

積分

Rank: 4

UID
243845
好友
0
蠻牛幣
777
威望
0
注冊時間
2017-9-16
在線時間
187 小時
最后登錄
2020-1-22
11#
2019-4-26 12:04:48 只看該作者
那我想播放別的視頻流替換地址的話為什么播放不了呢?
回復 支持 反對

使用道具 舉報

7日久生情
2415/5000
排名
1621
昨日變化

0

主題

776

帖子

2415

積分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
148286
好友
0
蠻牛幣
4270
威望
0
注冊時間
2016-5-11
在線時間
838 小時
最后登錄
2020-1-20
12#
2019-6-3 17:22:34 只看該作者
回復

使用道具 舉報

7日久生情
2415/5000
排名
1621
昨日變化

0

主題

776

帖子

2415

積分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
148286
好友
0
蠻牛幣
4270
威望
0
注冊時間
2016-5-11
在線時間
838 小時
最后登錄
2020-1-20
13#
2019-6-4 20:27:07 只看該作者
回復

使用道具 舉報

排名
25425
昨日變化

0

主題

7

帖子

35

積分

Rank: 1

UID
214753
好友
0
蠻牛幣
68
威望
0
注冊時間
2017-3-27
在線時間
12 小時
最后登錄
2019-12-3
14#
2019-8-22 14:41:50 只看該作者
樓主,關于長時間播放,視屏卡住,怎么解決
回復 支持 反對

使用道具 舉報

排名
417
昨日變化

21

主題

233

帖子

4296

積分

Rank: 9Rank: 9Rank: 9

UID
686
好友
18
蠻牛幣
5491
威望
0
注冊時間
2013-7-4
在線時間
1934 小時
最后登錄
2020-1-15

專欄作家

QQ
15#
樓主 2019-8-25 20:48:39 只看該作者
deep表哥 發表于 2019-8-22 14:41
樓主,關于長時間播放,視屏卡住,怎么解決

這個不清楚,我沒做過長時間播放的測試
回復 支持 反對

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 注冊帳號

本版積分規則

香港6合总彩透码主论坛
广东快乐10分 76722七仙女心水论坛 快速时时彩 皮皮湖南麻将安卓版 易发棋牌游戏官方网站 宁夏11选5 安徽麻将怎么算点数 3d组选558 006期最准的特码 浙江十一选五