【问题标题】:Play video from a memory stream inside a xamarin iOS app从 xamarin iOS 应用程序内的内存流中播放视频
【发布时间】:2014-04-09 08:24:50
【问题描述】:

我正在 xamarin 中构建一个用户将用于播放电影的应用程序。我需要该应用程序从内存流中播放电影,而不是直接从 url 或文件中播放。 是否有播放器控件或库可用于从 mmemory 流中播放电影?

【问题讨论】:

    标签: xamarin.ios xamarin


    【解决方案1】:

    通常最好使用MPMoviePlayerViewController (doc here) 在 iOS 上播放视频。遗憾的是,它需要NSUrl 才能播放视频。

    要使用它,您必须将流保存到一个临时文件中。

    如:

    string path = Path.GetTempFilename();
    using (var yourStream = GetYourStream())
    using (var fileStream = File.Create(path))
    {
        await yourStream.CopyToAsync(fileStream);
    }
    
    var controller = new MPMoviePlayerViewController(NSUrl.FromFilename(path));
    //show the controller
    

    不是很理想,但应该可以。

    【讨论】:

    • 我是 xamarin 新手并尝试您的方法,但 GetYourStream() 方法应该返回什么? f.e.我想访问像“http://....../stream.m3u”这样的网址,我想这就是我必须返回那里的内容?
    • 如果你有一个有效的 url,就使用它。 MPMoviePlayerControllerNSUrl 可以获取您的网址并播放电影。问这个问题的人有一个MemoryStream,那是他们的问题。
    • 是的,我后来发现了,但我遇到的问题是我必须以某种方式缓冲,然后播放的 LiveStream。 F.e.下载 1024kb 并开始播放该流,因为它是一个连续流。当我在浏览器中启动该 m3u 链接时,它会开始下载,直到我停止它。你有一个想法我怎么能做到这一点?
    【解决方案2】:

    由于没有可以使用的 API,您可以做的是在 url 上流式传输媒体文件的内存中表示。

    使用 HttpListener 类创建一个嵌入到应用程序中的 HTTP 服务器,让它监听端口 9000,然后让电影播放器​​使用这样的 NSUrl:

    new NSUrl ("http://127.0.0.1:9000/myfile.mov")
    

    【讨论】:

    • 您认为这有多安全?我的意思是,是否有人可以使用类似 fiddler 的工具来拦截来自 url 的响应并复制它
    • 米格尔,你能给我举个例子吗?我们正在尝试实现这一点,但播放器没有加载视频。
    猜你喜欢
    • 2015-07-01
    • 2012-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多