问题标签 [mediastreamsource]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
154 浏览

c# - Silverlight HttpWebRequest BinaryReader 秒读操作总是需要很长时间(12秒)

我正在创建一个 Silverlight 应用程序,该应用程序利用 H.264 MediaStreamSource 实现从服务器流式传输实时视频。我有一个我编写的 Multipart 流媒体,它逐帧读取样本。

当我连接到在我的本地计算机上运行的服务器时,需要 12 秒才能从 ReadHeaders() 函数中的响应流中读取第二个字节。所以基本上它会立即连接到主机,成功读取一个字节,随后的 ReadByte() 块(如果您查看调用堆栈的位置,它位于另一个线程中:System.Windows.dll!MS.Internal.InternalNetworkStream.ReadOperation (对象状态))。每次我对此进行测试时,它始终需要 12 秒。一旦这段时间过去了,所有后续读取都会立即进行,并且应用程序运行良好。如果我在一个简单的 .NET 控制台应用程序中使用相同的代码,则没有 12 秒的延迟。

知道是什么原因造成的吗?

ReadHeaders() 函数:

编辑:这是两个线程的调用堆栈。

工作线程 工作线程 GenIIIWebClient.CVRESTLib.HttpMultipartStreamer.ReadHeaders 正常 [处于睡眠、等待或加入]
mscorlib.dll!System.Threading.WaitHandle.InternalWaitOne(System.Runtime.InteropServices.SafeHandle waitableSafeHandle, long millisecondsTimeout, bool hasThreadAffinity, bool exitContext) + 0x21 字节
mscorlib.dll!System.Threading.WaitHandle.WaitOne(long timeout, bool exitContext) + 0x21 字节
mscorlib.dll!System.Threading.WaitHandle.WaitOne(int millisecondsTimeout, bool exitContext) + 0x1f 字节
mscorlib.dll !System.Threading.WaitHandle.WaitOne() + 0x10 字节
System.Windows.dll!MS.Internal.InternalNetworkStream.EndRead(System.IAsyncResult asyncResult) + 0x40 字节
System.Windows.dll!MS.Internal.InternalNetworkStream.Read(byte[] buffer, int offset, int count) + 0x38 bytes
mscorlib.dll!System.IO.Stream.ReadByte() + 0x28 bytes
mscorlib.dll!System.IO.BinaryReader.ReadByte() + 0x1d bytes
GenIIIWebClient!GenIIIWebClient.CVRESTLib.HttpMultipartStreamer.ReadHeaders(System.IO.BinaryReader reader) Line 201 + 0x19 字节
GenIIIWebClient!GenIIIWebClient.CVRESTLib.HttpMultipartStreamer.OnGetResponse(System.IAsyncResult res) 第 126 行 + 0xf 字节
System.Windows.dll!System.Net.Browser.ClientHttpWebRequest.InvokeGetResponseCallback.AnonymousMethod__18(object state2) + 0x11 bytes
mscorlib.dll!System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(object state) + 0x3e bytes
mscorlib.dll!System.Threading。 ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback 回调, 对象状态, bool preserveSyncCtx) + 0x97 字节
mscorlib.dll!System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() + 0x5a 字节
mscorlib .dll!System.Threading.ThreadPoolWorkQueue.Dispatch() + 0x1b3 字节
mscorlib.dll!System.Threading._ThreadPoolWaitCallback.PerformWaitCallback() + 0x5 字节
[本地到托管转换]
[Appdomain 转换]
[本地到托管转换]

未标记 5096 5 Worker Thread Worker Thread [处于睡眠、等待或加入] 正常 [处于睡眠、等待或加入]
mscorlib.dll!System.Threading.WaitHandle.InternalWaitOne(System.Runtime.InteropServices.SafeHandle waitableSafeHandle, long millisecondsTimeout, bool hasThreadAffinity, bool exitContext) + 0x21 bytes
mscorlib.dll!System.Threading.WaitHandle.WaitOne(long timeout, bool exitContext) + 0x21 bytes
mscorlib.dll!System.Threading.WaitHandle.WaitOne(int millisecondsTimeout, bool exitContext) + 0x1f 字节
mscorlib.dll!System.Threading.WaitHandle.WaitOne() + 0x10 字节
System.Windows.dll!MS.Internal.InternalNetworkStream.ReadOperation(object state) + 0x8a bytes
mscorlib.dll!System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(object state) + 0x3e bytes
mscorlib.dll!System.Threading.ExecutionContext.Run( System.Threading.ExecutionContext executionContext、System.Threading.ContextCallback 回调、对象状态、bool preserveSyncCtx) + 0x97 字节
mscorlib.dll!System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() + 0x5a 字节
mscorlib.dll!System .Threading.ThreadPoolWorkQueue.Dispatch() + 0x1b3 字节
mscorlib.dll!System.Threading._ThreadPoolWaitCallback.PerformWaitCallback() + 0x5 字节
[本地到托管转换]
[Appdomain 转换]
[本地到托管转换]

0 投票
0 回答
319 浏览

android - 在android中为音乐选择音频流

我的问题是我必须在 android MediaPlayer mySound 中的语音通话流上播放音乐文件当我运行音乐流的代码时,它工作正常

但是当我更改流时,音频不会播放。

0 投票
0 回答
694 浏览

c#-4.0 - 如何在 Windows Phone 中使用 MediaStreamSource 播放 H264 文件

Afaik 使用 MediaStreamSource 我可以在 windows phone 中播放 h264 文件,但我没有找到任何关于它的信息。我看到并真正帮助我开始的唯一示例是:http: //msdn.microsoft.com/en-us/library/hh180779 (v= vs.95).aspx 但我不走运......请帮帮我,我需要尽快实施!

有一段时间,我尝试实现使用 mediaElement.SetSource() 时要调用的 MediaStreamSource 覆盖方法。我做错了什么?

`公共类VideoMediaStreamSource:MediaStreamSource {私有MediaStreamDescription _videoDesc; 私有 MediaStreamType _mediaType;

在这里,是我现在尝试做的代码,即在 MediaElement 中调用 OpenMediaAsync。“slamtv60.h264”文件在我的解决方案中。

`private void PlayMediaStreamSource() { MediaElement media = new MediaElement(); VideoMediaStreamSource videoMedia = new VideoMediaStreamSource(); media.Source = new Uri("/slamtv60.h264", UriKind.RelativeOrAbsolute); media.SetSource(videoMedia); 媒体.自动播放 = 真;

请帮我...

0 投票
0 回答
489 浏览

c# - 来自 Mp4 容器的 MediaStreamSource 原始 AAC 帧大小

我需要一次将一个原始 AAC 音频帧发送到我的解码器。我能够从 MP4 文件容器中解析原始 AAC 比特流,但我找不到任何解决方案或确定音频帧大小的方法。

我已经使用 C# 使用 Codeplex 的BMFF 库来解析 AAC 双流。

0 投票
2 回答
3155 浏览

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

我想使用 canvas 元素作为 webrtc 通信的视频部分的媒体流源,任何方向都会有帮助,在网上搜索,没有找到太多讨论这个话题的资源

*长背景故事*

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

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

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

脚步:

  1. 在本地对等点处理视频,在隐藏的画布上绘制。容易的部分。

  2. 使用 timeout 重复捕获图像数据并传输
    a) using websockets( yes, goes through server),这带来了可怕的延迟并最终导致浏览器崩溃。
    b) using RTCDataChannel,它的性能要好得多,但有时会无缘无故地失败。我还遇到了其他几个问题(例如,由于发送 jpeg 而不是 webp,所以使用了额外的带宽)。

另一个主要问题是因为我使用了超时:当我切换标签时,另一边的帧速率下降。

那么,有什么方法可以将隐藏的画布用作媒体流源,而不是我手动进行呢?

0 投票
1 回答
6594 浏览

javascript - MediaSource:未捕获的 InvalidStateError:无法在“SourceBuffer”上执行“appendBuffer”:此 SourceBuffer 已被删除

我正在尝试使用第一个演示 MediaSource 进行尝试,但我无法播放视频。我使用的来源是一个 webm 视频“big-buck-bunny_trailer.webm”。我不断收到“Uncaught InvalidStateError: Failed to perform 'endOfStream' on 'MediaSource': The 'updating' attribute is true on a or more this MediaSource's SourceBuffers.”。我也处理了 sourcebuffer 更新标志,但它似乎仍然不起作用。

0 投票
0 回答
690 浏览

google-chrome-extension - RecordRTC:您如何在 Chrome 中捕获音频媒体流?

所以我一直在尝试使用 RecordRTC 来录制来自标签的音频。RecordRTC 需要将 Mediastream 作为参数传递,这需要捕获来自页面的流。在此处链接了一些代码,该代码试图捕获该流但无法使其正常工作。还将链接我的 github 存储库:https ://github.com/laotsunami/soundbyte

请帮忙!

0 投票
0 回答
181 浏览

windows-phone-8.1 - 带有 MediaStreamSource 的 WindowsPhone MediaTranscoder

我正在尝试使用 WindowsPhone 8.1 SDK 中的 MediaTranscoder 类创建带有图像的视频。如果我成功了,我会用它来创建一个包含更多图像的视频。

在下面的代码中,我在图片库中找到了一个图像并从中创建了一个 MediaStreamSample。这很好用!

然后我创建一个持续时间为 1(秒)的 MediaStreamSource 并将其与我之前创建的示例相关联。这也很好用!

不起作用的是 MediaTranscoder 实例。

当我调用上述方法时,我得到一个“引用未设置为实例”异常。(空引用异常)

我不知道为什么会发生这种情况......请帮助我。

0 投票
0 回答
89 浏览

silverlight - Silverlight MediaElement 需要许多 H.264 帧来渲染一个图像

我正在开发一个 Silverlight 应用程序,该应用程序实现了一个自定义 MediaStreamSource,它为 MediaElement 提供了基本的 H.264 NAL 单元。我的流从一个关键帧开始,但我注意到渲染一张图像平均需要大约 20 帧。我在 H.264 编码器上将 GOP 大小设置为 8。该视频来自安全摄像头,正在直播应用程序中观看。

主要问题是,这会在现实生活中发生事件和实际渲染图像之间产生相当大的延迟。预计会有一个小的延迟,但从接收第一帧到渲染第一张图像大约需要 3 秒。第一个关键帧理论上不应该包含足够的信息来解码图像吗?为了测试,我有一个示例 Silverlight 应用程序,它从文件加载捕获的 H.264 流并在内部缓冲整个文件,这样一旦 MediaStreamSource 打开,它会立即消耗约 20 帧并渲染图像几乎没有延迟。

是否有任何 Microsoft / Silverlight / H.264 专家愿意详细说明为什么会发生这种情况?

0 投票
1 回答
1538 浏览

javascript - 修改 mediaStreamTrack.enabled 时如何接收通知/事件?

getUserMedia用来访问网络摄像头。我有一个功能可以打开和关闭视频,执行以下操作:

当值改变时如何接收事件enabled?我尝试使用Object.observe,但它不起作用。