5分pk10

 找回密码
 注册帐号

扫一扫,访问微社区

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

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

21

主题

213

帖子

4045分pk104

积分

Rank: 9Rank: 9Rank: 9

UID
686
好友
18
蛮牛币
5358
威望
0
注册时间
2013-7-4
在线时间
1701 小时
最后登录
2015分pk109-5-18

专栏作家

QQ

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

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

示例是播放湖南卫视的rtmp视频流 ,需要等待几秒才会开始播放

[5分pk10C#] 纯文本查看 复制代码
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
回复

使用道具 举报

5熟悉之中
679/1005分pk100
排名
10816
昨日变化
1

3

主题

465

帖子

679

积分

Rank: 5Rank: 5

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

使用道具 举报

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

3

主题

87

帖子

1329

积分

Rank: 6Rank: 6Rank: 6

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

.png (591.34 KB, 下载次数: 34)

.png
回复 支持 反对

使用道具 举报

排名
417
昨日变化
1

21

主题

213

帖子

4044

积分

Rank: 9Rank: 9Rank: 9

UID
686
好友
18
蛮牛币
5358
威望
0
注册时间
2013-7-5分pk104
在线时间
1701 小时
最后登录
2019-5-18

专栏作家

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

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

使用道具 举报

排名
417
昨日变化
1

21

主题

213

帖子

4044

积分

Rank: 9Rank: 9Rank: 9

UID
686
好友
18
蛮牛币
5358
威望
0
注册时间
2013-7-4
在线时间
1701 小时
最后登录
2019-5-18

专栏作家

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

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

使用道具 举报

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

3

主题

87

帖子

1329

积分

Rank: 6Rank: 6Rank: 6

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

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

使用道具 举报

6蛮牛粉5分pk10丝
1056/1505分pk100
排名
2236
昨日变化
1

1

主题

154

帖子

1056

积分

Rank: 6Rank: 6Rank: 6

UID
232255
好友
1
蛮牛币
1441
威望
0
注册时间
2015分pk107-7-15
在线时间
273 小时
最后登录
2019-5-18
7#
2019-4-17 10:26:32 只看该作者
例是播放湖南卫视的rtmp视频流 ,需要等待几秒才会开始播放
回复 支持 反对

使用道具 举报

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

3

主题

102

帖子

341

积分

Rank: 4

UID
148779
好友
0
蛮牛币
197
威望
0
注册时间
2016-5-16
在线时间
160 小时
最后登5分pk10录
2015分pk109-4-19
8#
2019-4-19 15分pk100:53:54 只看该作者
留名。留名。留名5分pk10。留名。留名。
回复 支持 反对

使用道具 举报

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分pk105)
  in module libvlccore.dll at 0033:10abe798.
回复 支持 反对

使用道具 举报

排名
39857
昨日变化
1

0

主题

7

帖子

24

积分

Rank: 1

UID
142395
好友
0
蛮牛币
33
威望
0
注册时间
2016-3-20
在线时间
12 小时
最后登录
2019-4-29
10#
2019-4-23 14:42:03 只5分pk10看该作者
基于VLC的Unity视频播放器
回复 支持 反对

使用道具 举报

4四处流浪
306/500
排名
8485
昨日变化
1

2

主题

40

帖子

306

积分

Rank: 4

UID
243845
好友
0
蛮牛币
437
威望
0
注册时间
2017-9-16
在线时间
122 小时
最后登录
2019-5-16
11#
2019-4-26 12:04:48 只5分pk10看该作者
那我想播放别的视频流替换地址的话为什么播放不了呢?
回复 支持 反对

使用道具 举报

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

本版积分规则