我在创建一个包含音频和视频音频和视频的流时遇到问题 . 我正在为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流媒体相关推荐

  1. Java 视频直播JavaCV(ffmpeg h264)+RTSP实现低延时1秒推流

    上一篇文章介绍了通用协议onvif获取到rtsp地址Java onvif协议通用协议获取rtsp地址 当然也有很多其他的方式获取rtsp地址 首先还是引入包: <!--javacv-->& ...

  2. 视频系统 流媒体 rtsp hls h264 h265 aac 高并发 低延时 系统 设计 录像 视频合成 转发 点播 快进 快退 单步播放 分布式集群

    系统改名为:,升级包改使用jpg图像封装,从2.124版本开始,1.*的升级包停止使用 系统工具            下载地址(2019-04-19) :https://pan.baidu.com/ ...

  3. 解决H5播放视频黑屏只有声音没有图像的问题,Java调用ffmpeg转码成h264的mp4格式

    前端用的是HTML5的<video>标签播放的视频.由于其并不能支持所有视频类型的播放,所以我们需要把视频转码为其支持的编码如h264.否则会出现黑屏只有声音没有图像的问题. 网上的方法大 ...

  4. java red5 点播_树莓派实用RED5搭建流媒体服务器实现点播功能

    1,搭建流媒体服务器一直是自己想玩的一个东西,在高中玩workerman框架时有人就做过nginx通过rtmp模块搭建流媒体服务器,nginx的特性就是高并发,轻量级,一般大型企业都会采用这个服务器, ...

  5. java+c#+json+时间_C#与Json时间的转换

    private static Int64 dt = new DateTime(1970, 1 , 1).Ticks; /// /// 传入一个DateTime,将其转换为子1970年1月1日起的Int ...

  6. java 网线串口开发_C++标准语言不断被开发,C++却走向了下坡路!

    C 和 C++ 的没落,不仅是因为 CPU 时钟周期的关系,而且因为关系到了开发者的时间 全球大约有400万C和C++程序员,很可能是最大的社区了,约占20%的市场份额,不亚于Java,甚至还要更多一 ...

  7. java 反查域名_C段查询雏形之在Java中反查一个IP上的所有域名(旁站查询)

    这里使用了两个接口来反查IP,分别是"站长工具"和"爱站"的接口,两者各有千秋,结合起来查询就较为准确了. 注:我目前只写了个初始版本,还不太完善,但是可以基本 ...

  8. java 代码运行速度慢_C代码的运行速度总是比Java快,对吧? 错误!

    java 代码运行速度慢 因此,我们都知道,Java解释缓慢且C的编译和优化运行速度非常快. 您可能知道,情况截然不同. TL; DR Java适用于星座图,它的速度更快,在JIT上可以执行内联,因为 ...

  9. c 和java互相验签_C椭圆曲线签名 用java验签

    C椭圆曲线签名 用java验签,java应该用什么类,new X509EncodedKeySpec( hex2Bytes(publicKey) ) 一直报错 签名: 294236F3FEA929A45 ...

最新文章

  1. python3.1.1_python 3.1.1 with--enable shared:将不会构建任何扩展
  2. 新生的 XInclude
  3. PHP读取TXT中文乱码的解决方法
  4. Bailian4118 开餐馆【DP】
  5. 霍夫曼算法_霍夫曼编码算法
  6. java的知识点运用_javaAPI的相关知识点的运用!
  7. Jenkins-SCM
  8. upnp是不是虚拟服务器,360路由器虚拟服务器设置(360路由器开启upnp功能)
  9. ERC20接口下USDT代币的深入解析
  10. 关于Context的理解(转)
  11. WordCloud词云图去除停用词的正确方法
  12. SQL查记录总数-总数统计的方法
  13. 工信部:小米、京东等虚拟运营商被投诉
  14. oracle数据库创建表空间的语句
  15. Vue中的插件小练习
  16. linux rmvb转mp4,linux系统下实现播放rmvb文件
  17. 【现代机器人学】学习笔记六:闭链运动学
  18. linux下源码编译升级ssh版本,ssh打补丁过程
  19. 哈工大 信息安全概论 万字复习笔记
  20. PyCharm 这40个使用技巧真棒

热门文章

  1. redis复制_Redis复制
  2. 抽象类和接口设计_如何设计类和接口
  3. spring体系结构_了解Spring Web应用程序体系结构:经典方法
  4. 什么是序列化? 您需要通过示例解释的有关Java序列化的所有知识
  5. maven项目 ant_将旧项目从Ant迁移到Maven的4个简单步骤
  6. 邪恶的Java技巧使JVM忘记检查异常
  7. 使用SpringWebFlux的反应式Web应用程序
  8. Spring Boot Admin –用于管理Spring Boot应用程序的Admin UI
  9. Redis Client Lettuce 5 GA发布
  10. 在JPA和JDBC中使用存储过程。 嗯,只要使用jOOQ