c# java 哪个好 流媒体_C#Net7mma H264 / PCMU流媒体
我在创建一个包含音频和视频音频和视频的流时遇到问题 . 我正在为rtsp服务器使用net7mma库 . 我正在播放视频给wowza . 我得到了H264 / AVC视频流和PCMU 44,1k采样率视频流 . 这就是我这样做的方式:首先我创建媒体:
RFC6184Media newMedia = new RFC6184Media(704, 480, camName);
然后,当视频帧出现时,我做:
var newFrame = new RFC6184Media.RFC6184Frame(96);
newFrame.Packetize(buff);
media.AddFrame(newFrame);
对于这个步骤一切正常,视频看起来不错 . 问题是当我想添加音频时 . 从我的设备我收到 raw PCMU 8k 采样率所以我需要使用NAudio库重新采样到44100:
var provider = new RawSourceWaveStream(new MemoryStream(buff), new WaveFormat(8000, 1));
provider.ToSampleProvider();
var outFormat = new WaveFormat(44100, provider.WaveFormat.Channels);
var resampler = new WaveFormatConversionStream(outFormat, provider);
MemoryStream memStr = new MemoryStream();
WaveFileWriter.CreateWaveFile("pcm", resampler);
var audioBytes = File.ReadAllBytes("pcm");
var newFrame = PacketizeBufer(audioBytes);
media.AddFrame(newFrame);
我的打包方法如下:
private RtpFrame PacketizeBufer(byte[] messageBuffer)
{
var newFrame = new RtpFrame(96);
int countOfArray = messageBuffer.Length / 1500;
if (messageBuffer.Length % 1500 > 0)
countOfArray++;
RtpPacket packet;
for (int i = 0; i < countOfArray; i++)
{
byte[] tempToSend = messageBuffer.Skip(i * 1500).Take(1500).ToArray();
if (i == countOfArray - 1)
{
packet = new RtpPacket(2, false, false, true, 0, 0, 0, i, 0, tempToSend);
newFrame.Add(packet);
break;
}
packet = new RtpPacket(2, false, false, false, 0, 0, 0, i, 0, tempToSend);
newFrame.Add(packet);
}
return newFrame;
}
SDP看起来像这样:
v=0
o=ASTI-Media-Server 15943110217466738919 -2503633856242812693 IN IP4 [ip_addr]
s=ASTI-Streaming-Session-stream-name
a=sendonly
a=type:broadcast
a=rtpmap:0 PCMU/44100
a=fmtp:0 packetization-mode=1;profile-level-id=64001F;sprop-parameter-sets=Z0LAHtkDxWhAAAADAEAAAAwDxYuS,aMuMsg==
a=fmtp:96 packetization-mode=1;profile-level-id=64001F;sprop-parameter-sets=Z0LAHtkDxWhAAAADAEAAAAwDxYuS,aMuMsg==
m=video 0 RTP/AVP 96
a=rtpmap:96 H264/90000
a=control:/live/b8f38900-b1ba-4dda-b00c-2ccd6f847c61/video
m=audio 0 RTP/AVP 0
a=control:/live/b8f38900-b1ba-4dda-b00c-2ccd6f847c61/audio
Session=> 2359fd8e-f449-4db7-a19e-48ca78cc3422
关于这一点的奇怪之处在于,当我将视频和音频保存到一个文件时,它将无法正常工作 . 当我单独保存视频和音频(视频为h264,音频为wav)视频gest音频时 .
c# java 哪个好 流媒体_C#Net7mma H264 / PCMU流媒体相关推荐
- Java 视频直播JavaCV(ffmpeg h264)+RTSP实现低延时1秒推流
上一篇文章介绍了通用协议onvif获取到rtsp地址Java onvif协议通用协议获取rtsp地址 当然也有很多其他的方式获取rtsp地址 首先还是引入包: <!--javacv-->& ...
- 视频系统 流媒体 rtsp hls h264 h265 aac 高并发 低延时 系统 设计 录像 视频合成 转发 点播 快进 快退 单步播放 分布式集群
系统改名为:,升级包改使用jpg图像封装,从2.124版本开始,1.*的升级包停止使用 系统工具 下载地址(2019-04-19) :https://pan.baidu.com/ ...
- 解决H5播放视频黑屏只有声音没有图像的问题,Java调用ffmpeg转码成h264的mp4格式
前端用的是HTML5的<video>标签播放的视频.由于其并不能支持所有视频类型的播放,所以我们需要把视频转码为其支持的编码如h264.否则会出现黑屏只有声音没有图像的问题. 网上的方法大 ...
- java red5 点播_树莓派实用RED5搭建流媒体服务器实现点播功能
1,搭建流媒体服务器一直是自己想玩的一个东西,在高中玩workerman框架时有人就做过nginx通过rtmp模块搭建流媒体服务器,nginx的特性就是高并发,轻量级,一般大型企业都会采用这个服务器, ...
- java+c#+json+时间_C#与Json时间的转换
private static Int64 dt = new DateTime(1970, 1 , 1).Ticks; /// /// 传入一个DateTime,将其转换为子1970年1月1日起的Int ...
- java 网线串口开发_C++标准语言不断被开发,C++却走向了下坡路!
C 和 C++ 的没落,不仅是因为 CPU 时钟周期的关系,而且因为关系到了开发者的时间 全球大约有400万C和C++程序员,很可能是最大的社区了,约占20%的市场份额,不亚于Java,甚至还要更多一 ...
- java 反查域名_C段查询雏形之在Java中反查一个IP上的所有域名(旁站查询)
这里使用了两个接口来反查IP,分别是"站长工具"和"爱站"的接口,两者各有千秋,结合起来查询就较为准确了. 注:我目前只写了个初始版本,还不太完善,但是可以基本 ...
- java 代码运行速度慢_C代码的运行速度总是比Java快,对吧? 错误!
java 代码运行速度慢 因此,我们都知道,Java解释缓慢且C的编译和优化运行速度非常快. 您可能知道,情况截然不同. TL; DR Java适用于星座图,它的速度更快,在JIT上可以执行内联,因为 ...
- c 和java互相验签_C椭圆曲线签名 用java验签
C椭圆曲线签名 用java验签,java应该用什么类,new X509EncodedKeySpec( hex2Bytes(publicKey) ) 一直报错 签名: 294236F3FEA929A45 ...
最新文章
- python3.1.1_python 3.1.1 with--enable shared:将不会构建任何扩展
- 新生的 XInclude
- PHP读取TXT中文乱码的解决方法
- Bailian4118 开餐馆【DP】
- 霍夫曼算法_霍夫曼编码算法
- java的知识点运用_javaAPI的相关知识点的运用!
- Jenkins-SCM
- upnp是不是虚拟服务器,360路由器虚拟服务器设置(360路由器开启upnp功能)
- ERC20接口下USDT代币的深入解析
- 关于Context的理解(转)
- WordCloud词云图去除停用词的正确方法
- SQL查记录总数-总数统计的方法
- 工信部:小米、京东等虚拟运营商被投诉
- oracle数据库创建表空间的语句
- Vue中的插件小练习
- linux rmvb转mp4,linux系统下实现播放rmvb文件
- 【现代机器人学】学习笔记六:闭链运动学
- linux下源码编译升级ssh版本,ssh打补丁过程
- 哈工大 信息安全概论 万字复习笔记
- PyCharm 这40个使用技巧真棒
热门文章
- redis复制_Redis复制
- 抽象类和接口设计_如何设计类和接口
- spring体系结构_了解Spring Web应用程序体系结构:经典方法
- 什么是序列化? 您需要通过示例解释的有关Java序列化的所有知识
- maven项目 ant_将旧项目从Ant迁移到Maven的4个简单步骤
- 邪恶的Java技巧使JVM忘记检查异常
- 使用SpringWebFlux的反应式Web应用程序
- Spring Boot Admin –用于管理Spring Boot应用程序的Admin UI
- Redis Client Lettuce 5 GA发布
- 在JPA和JDBC中使用存储过程。 嗯,只要使用jOOQ