博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用网络传输系统的声音
阅读量:2342 次
发布时间:2019-05-10

本文共 1853 字,大约阅读时间需要 6 分钟。

原链接:

为什么要做这件事呢,因为我的电脑耳机插孔不太好使��。插上耳机后声音经常的是左边有声音右边没有这样子。在玩游戏的时候这样太不爽了。 而且像VNC这种远程软件是没有声音的,用起来也很不舒服。所以我很需要一个能够远程传输声音的软件。现在有了代码在上,虽然还有一些问题,但是基本上能用了,而且还是跨平台的。

下面说一下具体的实现方法。

基本的流程就是从声卡获取到声音信息然后写入到http流里面。这样通过浏览器就可以听到系统的声音了。程序用C#写的,我很喜欢这种语言。声音的获取和转码处理方面用的是一个叫做的库。把http流传给cscore里面对应的API就可以了。但是由于HttpResponse的流是只写的,而cscore里面转码需要的输出流是可读可写的,所以这里要修改cscore的源代码才行。

贴上比较关键的代码吧

在C# web api里面如何处理流

using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Net;using System.Net.Http;using System.Net.Http.Headers;using System.Text;using System.Threading.Tasks;using System.Web.Http;namespace RemoteAudio.Controllers{    public class AudioController : ApiController    {        [Route("audio")]        [HttpGet]        public HttpResponseMessage Get() {            var response = Request.CreateResponse();            response.Content = new PushStreamContent((Action
)(AudioServer.getInstance().WriteToStream), new MediaTypeHeaderValue("audio/mpeg")); response.Headers.Add("Cache-Control", "no-cache"); return response; } //[Route("web")] //[HttpGet] //public HttpResponseMessage Get() //{
// var response = Request.CreateResponse(); // return response; //} }}

关键在于以上代码中的PushStreamContent方法。在传进去的回调函数中第一个参数就是HttpResponse的流,把这个流传给修改后的cscore api就可以了。

using (var encoder = MediaFoundationEncoder.CreateMP3Encoder(capture.WaveFormat, httpStream, 48000)){                    capture.DataAvailable += (s, e) =>                    {                        encoder.Write(e.Data, e.Offset, e.ByteCount);                    }; }

用起来也是很简单的。

现有的问题

  1. 会有大约三秒的延时。用来听歌之类的是没问题,但是用来玩游戏,绝对不能忍。个人感觉是编码函数里面做了buffer。以后要进行改进。还有就是浏览器按下暂停键后是用浏览器的缓存继续播放,这个和服务器正在传输的流之间的时间差就会增加。这个声音同步应该在浏览器中用js实现呢还是应该在服务器通过一些手段实现呢?还没想好。
  2. 没有回收httpResponse stream。这个也是要改进的地方,不然会内存泄露。

转载地址:http://lfdvb.baihongyu.com/

你可能感兴趣的文章
用sed批量替换文件中的字符
查看>>
九型性格心理测试 (From Ulla Zang荣格的个人性格测验题目)
查看>>
[MT] 3.32升级备忘
查看>>
MT 3.33发布: 安全漏洞修正
查看>>
给Blog加上雅虎通PingMe服务:和网站用户即时聊天
查看>>
顶级域名注册分布统计:2006年09月 .com .de .net .uk .cn
查看>>
雅虎通可以批量添加MSN用户了
查看>>
豆瓣“我上”:一个blog就是一本有趣的书
查看>>
速度比较:GMail/MSN/Yahoo!Mail
查看>>
搜索引擎来路关键词的挖掘:百度统计的高级分析报告导出获取来源关键词
查看>>
C/C++题目--拷贝构造函数概念
查看>>
C/C++题目--深复制与浅复制
查看>>
数据结构教程--李春葆版(总结)之线性表-顺序存储结构练习题
查看>>
centos7单用户模式修改root密码
查看>>
linux文件类型
查看>>
alias,which命令
查看>>
数组名和指针的区别
查看>>
栈和堆的具体区别
查看>>
如何判断一个点在矩形内
查看>>
析构函数何时被调用
查看>>