标签: mediastreamsource

WebRTC - 如何区分通过同一连接发送的两个 MediaStreamTracks?

我想使用 WebRTC 将两个视频流从 Peer1 发送到 Peer2:让我们以前置和后置摄像头为例。

从概念上讲,Peer2 如何知道哪个流来自哪个相机?

MediaStream 文档提到 allMediaStreamMediaStreamTrack字段都是只读的,因此我无法直接向它们附加任何信息。我不能像{"stream1 id": "camera", "stream2 id": "screenshare"}通过信令通道那样发送字典,因为 Peer2 将为每个流和轨道生成自己的 id。

javascript mediastreamsource webrtc

7
推荐指数
1
解决办法
780
查看次数

使用MediaStreamSource的WP7 Shoutcast

我正在尝试通过MediaStreamSource将Shoutcast流式传输到我的MediaElement.这是一些基础知识的代码.使用ReadData方法,我可以下载原始音频数据(MP3样本),我的问题是如何将流设置为MediaStreamSource.这样它就不起作用(它编译并且MediaFailed事件没有错误,但我听不到任何声音).也许我应该在我的自定义ShoutcastMediaStreamSource中实现所有这些?固定流没有问题,只是非固定.有人可以给我一些建议吗?

在WP7上,没有可能设置"useUnsafeHeaderParsing",因此我无法使用shoutcast元数据获取http标头 - 仅使用原始数据.在ShoutcastMediaStreamSource中,我实现了一些ManagedMediaHelpers的代码.

谢谢

    private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://radiozetmp3-02.eurozet.pl:8400/;"); 
        request.Method = "GET";
        request.Headers["Icy-MetaData"] = "1";
        request.UserAgent = "WinampMPEG/5.09";
        request.AllowReadStreamBuffering = false;

        request.BeginGetResponse(new AsyncCallback(RequestComplete), request);
        allDone.WaitOne();

        ShoutcastMediaStreamSource smss = new ShoutcastMediaStreamSource(stream);
        player.SetSource(smss); // MediaElement
        player.Play();
    }

    public void RequestComplete(IAsyncResult r)
    {
        HttpWebRequest request = (HttpWebRequest)r.AsyncState;
        HttpWebResponse response = request.EndGetResponse(r) as HttpWebResponse;
        stream = response.GetResponseStream();

        IAsyncResult res = stream.BeginRead(buffer, 0, buffer.Length, callback, null);

        allDone.Set();
    }

    public void ReadData(IAsyncResult r)
    {
        int bytes = stream.EndRead(r);

        if …
Run Code Online (Sandbox Code Playgroud)

shoutcast windows-phone-7 mediastreamsource

6
推荐指数
1
解决办法
3013
查看次数

如何从videofile创建MediaStream?

大多数Mediastream示例都是webCam-stream的解释.但我需要从本地视频文件(.webm或mp4)创建MediaStream.请告诉我.

javascript video streaming mediastreamsource webrtc

6
推荐指数
1
解决办法
6500
查看次数

BackgroundAudioPlayer无法开始播放

Windows Phone 8应用程序.我们正在使用AudioStreamingAgent/Mp3MediaStreamSource来播放可以在本地缓存或从Web加载的MP3文件.

下载文件时,我们仍然使用AudioStreamingAgent/Mp3MediaStreamSource来确保我们能够在播放当前时预先缓存下一个文件.是的,我们可以使用WP8内置播放器来缓存文件,但在这种情况下我们将无法预先缓存下一个文件.

问题:在几个曲目之后,BackgroundAudioPlayer不再开始播放了.

  1. 执行AudioStreamingAgent.OnBeginStreaming
  2. 执行创建MediaStreamSource的Сode
  3. AudioStreamer.SetSource方法使用新的MediaStreamSource实例执行
  4. PlayStateChanged在后台进程中使用PlayState.TrackReady触发,在这种情况下调用player.Play().

毕竟,我看到曲目显示在UVC中,但它处于"Paused"状态.在UVC中按"播放"会在后台调用OnUserAction调用player.Play().没有什么变化.

"卡住状态"的图片

有问题再现的样本,VS 2012(样本基于背景音频流媒体样本)

使用示例代码重现的步骤:

  1. 安装应用程序
  2. 按"预加载曲目"按钮.它将mp3文件从XAP复制到IsolatedStorage.
  3. 按"Track 1"按钮.在曲目开始播放后,按"Track 2"按钮.然后,在曲目2开始播放后,按"Track 3"按钮.
  4. 继续执行步骤3,直到按下"Track*"按钮轨道未开始播放.
  5. 最后的轨道选择将被示出为在两个UVC和上面的页上的进度条的有源轨道(参见图片)
  6. 在大多数情况下按其他轨道按钮没有任何区别.

在WP8和WP8.1开发人员预览版中,在设备和仿真器上都会重现该问题.

更新:内存不足是不是这样.使用示例代码重现问题并查看backgroundlog.xml文件显示该示例仅使用20 Mb中的6 Mb允许此图片上的最后一列是"内存使用情况|允许的最大内存使用量"

c# audio-streaming mediastreamsource background-audio windows-phone-8

6
推荐指数
1
解决办法
538
查看次数

在webrtc中创建和传输自定义媒体流

我想使用canvas元素作为webrtc通信的视频部分的mediastreamsource,任何方向都会有所帮助,搜索网络,找不到讨论这个主题的资源

*长篇背景故事*

问题是,我无法直接从相机发送视频,这是我在显示之前处理视频(一些图像处理内容,超出此问题的范围)的要求的一部分.

以前,在另一个对等的浏览器上<video>,我没有使用标签直接显示视频,而是对隐藏的画布元素进行了一些处理,然后将细节复制到另一个画布(我使用了settimeout来保持绘图,这给了它illusion of live video).

现在,客户希望在传输视频之前完成处理,因此我使用webrtc直接传递音频流(之前音频和视频都是通过webrtc发送的).对于视频流,我有两个解决方案:

脚步:

  1. 在本地对等体上处理视频,在隐藏的画布上绘制.简单的部分.

  2. 使用超时重复捕获图像数据并传输
    a)使用websockets( yes, goes through server),这带来了可怕的延迟和浏览器的最终崩溃.
    b)使用RTCDataChannel,具有更好的性能,但有时无故失败.我还有其他几个问题(例如使用额外带宽,因为发送jpeg而不是webp).

另一个主要问题是,因为我正在使用超时:当我切换标签时,帧速率在另一侧下降.

那么,有什么方法可以将隐藏的画布用作mediastreamsource而不是我手动操作吗?

javascript mediastreamsource webrtc rtcdatachannel

6
推荐指数
1
解决办法
1721
查看次数

使用MediaStreamSource解码音频

我有一个UWP项目,我想使用Windows.Media.Audio API来播放文件.我想要流式传输文件,而不是使用FileInputNode,因此我可以精确地确定各种时序属性.

我找到了MediaStreamSource API并制作了以下代码,试图解码16位PCM 2通道.wav文件

 public async Task<Windows.Storage.Streams.Buffer> GetBuffer()
    {
        // check if the sample requested byte offset is within the file size 

        if (byteOffset + BufferSize <= mssStream.Size)
        {
            inputStream = mssStream.GetInputStreamAt(byteOffset);

            // create the MediaStreamSample and assign to the request object.  
            // You could also create the MediaStreamSample using createFromBuffer(...) 

            MediaStreamSample sample = await MediaStreamSample.CreateFromStreamAsync(inputStream, BufferSize, timeOffset);
            sample.Duration = sampleDuration;
            sample.KeyFrame = true;
            // increment the time and byte offset 

            byteOffset += BufferSize;
            timeOffset = timeOffset.Add(sampleDuration);


            return sample.Buffer; …
Run Code Online (Sandbox Code Playgroud)

audio mediastreamsource win-universal-app

5
推荐指数
1
解决办法
531
查看次数

在MediaSource HTML5中播放MediaRecorder块 - 冻结视频

我有这个简单的代码来获取视频流的块并在MediaSource中播放它们.我看到视频,但有时会停止.它可能会工作几秒钟或几分钟.但最后它在某个时刻停止了.chrome:// media-internals /显示没有错误.

这有什么不对?

    navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;
var mediaSource = new MediaSource();
var constraints = {
    "audio": true,
    "video": {
        "mandatory": {
            "minWidth": 320, "maxWidth": 320,
            "minHeight": 240, "maxHeight": 240
        }, "optional": []
    }
};
window.mediaSource = mediaSource;
var sourceBuffer;
var video = document.querySelector('#video');
window.video = video;
video.src = window.URL.createObjectURL(mediaSource);
mediaSource.addEventListener('sourceopen', function (e) {
    console.log("sourceopen");
    sourceBuffer = mediaSource.addSourceBuffer('video/webm; codecs="vorbis,vp8"');
    window.sourceBuffer = sourceBuffer;
}, false);
mediaSource.addEventListener('error', function (e) {
    console.log("error", e)
}, false);
var stack …
Run Code Online (Sandbox Code Playgroud)

javascript html5-video mediastreamsource webrtc

5
推荐指数
1
解决办法
2057
查看次数

如何从 mediaDevices.getUserMedia 流获取采样率

Firefox 对音频媒体流的音频重采样能力有限。如果输入媒体流的采样率与 AudioCotext 的采样率不同,则会抱怨:

DOMException: AudioContext.createMediaStreamSource: Connecting AudioNodes from AudioContexts with different sample-rate is currently not supported.
Run Code Online (Sandbox Code Playgroud)

例如,如果我们得到这样的音频流:

navigator.mediaDevices.getUserMedia(constraints).then(stream => {
  let context = new (window.AudioContext || window.webkitAudioContext)({sampleRate : 48000});  
  let audioInput = this.context.createMediaStreamSource(stream);
});
Run Code Online (Sandbox Code Playgroud)

Firefox 会抱怨采样率不匹配 - 如果音频子系统中的音频上下文和硬件设备设置之间的采样率不同。

我找不到从流中的音轨获取采样率的方法。我试过了 :

let tracks = stream.getAudioTracks();
let settings = tracks[0].getSettings();
let constraints = tracks[0].getConstraints();
Run Code Online (Sandbox Code Playgroud)

但这些对象中没有一个包含流的sampleRate。

是否有另一种方法来查询音轨/流的采样率?

firefox mediastreamsource web-audio-api

5
推荐指数
1
解决办法
759
查看次数

Web RTC 流的音频电平表

我想为视频元素中播放的音频创建一个分贝计。视频元素正在播放 WebRTC 流。

\n\n

目前,WebRTC 流无法传递到 Web 音频分析器中。(尽管这可能很快就会改变 \xe2\x80\xa6\xc2\xa0)(请参阅Web Audio API 分析器节点 getByteFrequencyData 返回空白数组

\n\n

目前是否有另一种方法可以从远程媒体流获取分贝信息?

\n

google-chrome mediastreamsource webrtc web-audio-api

3
推荐指数
1
解决办法
9480
查看次数