香港6合总彩透码主论坛
 找回密码
 注册帐号

扫一扫,访问微社区

薛飞 基于VLC的Unity视频播放器(二)

12
回复
2742
查看
打印 上一主题 下一主题
[ 复制链接 ]
排名
417
昨日变化

21

主题

216

帖子

4132

积分

Rank: 9Rank: 9Rank: 9

UID
686
好友
18
蛮牛币
5355
威望
0
注册时间
2013-7-4
在线时间
1785 小时
最后登录
2019-8-20

专栏作家

QQ

马?#29486;?#20876;,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐?#29275;?a href="member.php?mod=register" title="注册帐号">注册帐号

x
本帖最后由 AWNUXCVBN 于 2019-3-29 11:53 编辑

示例是播放湖南卫视的rtmp视频流 ,需要等待?#35813;?#25165;会开始播放

[C#] ?#35838;?#26412;查看 复制代码
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
回复

使用道具 举报

6蛮牛粉丝
1094/1500
排名
10818
昨日变化

3

主题

820

帖子

1094

积分

Rank: 6Rank: 6Rank: 6

UID
310426
好友
0
蛮牛币
1467
威望
0
注册时间
2019-1-2
在线时间
175 小时
最后登录
2019-8-20
沙发
2019-4-2 09:02:42 只看该作者
基于VLC的Unity视频播放器(二)
回复 支持 反对

使用道具 举报

6蛮牛粉丝
1389/1500
排名
2077
昨日变化

3

主题

88

帖子

1389

积分

Rank: 6Rank: 6Rank: 6

UID
124790
好友
0
蛮牛币
3182
威望
0
注册时间
2015-10-8
在线时间
632 小时
最后登录
2019-8-19
板凳
2019-4-8 11:11:59 只看该作者
已下载,为何,我这里播放图像是泛红的呀??

QQ图片20190408111102.png (591.34 KB, 下载次数: 79)

QQ图片20190408111102.png
回复 支持 反对

使用道具 举报

排名
417
昨日变化

21

主题

216

帖子

4132

积分

Rank: 9Rank: 9Rank: 9

UID
686
好友
18
蛮牛币
5355
威望
0
注册时间
2013-7-4
在线时间
1785 小时
最后登录
2019-8-20

专栏作家

QQ
地板
楼主 2019-4-8 12:24:43 只看该作者
q598341543 发表于 2019-4-8 11:11
已下载,为何,我这里播放图像是泛红的呀??

试试这个图片格式TextureFormat.ARGB32
回复 支持 反对

使用道具 举报

排名
417
昨日变化

21

主题

216

帖子

4132

积分

Rank: 9Rank: 9Rank: 9

UID
686
好友
18
蛮牛币
5355
威望
0
注册时间
2013-7-4
在线时间
1785 小时
最后登录
2019-8-20

专栏作家

QQ
5#
楼主 2019-4-8 12:24:50 只看该作者
q598341543 发表于 2019-4-8 11:11
已下载,为何,我这里播放图像是泛红的呀??

试试这个图片格式
回复 支持 反对

使用道具 举报

6蛮牛粉丝
1389/1500
排名
2077
昨日变化

3

主题

88

帖子

1389

积分

Rank: 6Rank: 6Rank: 6

UID
124790
好友
0
蛮牛币
3182
威望
0
注册时间
2015-10-8
在线时间
632 小时
最后登录
2019-8-19
6#
2019-4-8 14:01:34 只看该作者
AWNUXCVBN 发表于 2019-4-8 12:24
试试这个图片格式TextureFormat.ARGB32

多谢! 已解决
回复 支持 反对

使用道具 举报

6蛮牛粉丝
1118/1500
排名
2236
昨日变化

1

主题

177

帖子

1118

积分

Rank: 6Rank: 6Rank: 6

UID
232255
好友
1
蛮牛币
1659
威望
0
注册时间
2017-7-15
在线时间
312 小时
最后登录
2019-8-20
7#
2019-4-17 10:26:32 只看该作者
例是播放湖南卫视的rtmp视频流 ,需要等待?#35813;?#25165;会开始播放
回复 支持 反对

使用道具 举报

4四处流浪
341/500
排名
12305
昨日变化

3

主题

102

帖子

341

积分

Rank: 4

UID
148779
好友
0
蛮牛币
198
威望
0
注册时间
2016-5-16
在线时间
160 小时
最后登录
2019-5-30
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.
回复 支持 反对

使用道具 举报

排名
39862
昨日变化

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四处流浪
339/500
排名
8487
昨日变化

2

主题

41

帖子

339

积分

Rank: 4

UID
243845
好友
0
蛮牛币
498
威望
0
注册时间
2017-9-16
在线时间
154 小时
最后登录
2019-8-19
11#
2019-4-26 12:04:48 只看该作者
那我想播放别的视频流替换地址的话为什么播放不?#22235;兀?/td>
回复 支持 反对

使用道具 举报

排名
1621
昨日变化

0

主题

773

帖子

2338

积分

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

UID
148286
好友
0
蛮牛币
3952
威望
0
注册时间
2016-5-11
在线时间
765 小时
最后登录
2019-8-20
12#
2019-6-3 17:22:34 只看该作者
回复

使用道具 举报

排名
1621
昨日变化

0

主题

773

帖子

2338

积分

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

UID
148286
好友
0
蛮牛币
3952
威望
0
注册时间
2016-5-11
在线时间
765 小时
最后登录
2019-8-20
13#
2019-6-4 20:27:07 只看该作者
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

香港6合总彩透码主论坛
彩票技巧规律和口诀 双色球复式投注金额及兑奖表 北京pk拾计划是真的吗 福彩3d长期投注技巧 时时彩定位胆大小规律 全民彩票计划软件 pc蛋蛋投注计划软件 女篮亚洲杯2019分组 七星彩走势图100期 福建时时事件