7/23 Ajax .NET save content automatically and redirect to same page without new tabs

本文分享了作者在改进表单过程中使用GUID从数据库中自动填充数据的经验,并讨论了图片资源的开放访问设置。此外,还介绍了如何正确处理隐藏字段以避免用户操作障碍,以及如何调整链接以在同一标签页中打开页面。最后,文章通过一个实例展示了如何利用Ajax实现表单内容的自动保存。

这两天改Form,比较有意思的是从DB里automatic fill-up,我凭借GUID等Key fields把信息很容易从staffbanner Table中取出来。

接着就是Email Footer有个图片,这个图片如果镶嵌在project 下的img folder里,要求收件人pump out输入credential,我看了一下因为src是本地的相关地址,所以就建议改为open access的地方。在测试的过程中,需要不断的打开supervisor approval的page,就需要看代码,看读什么field,然后去DB找那一栏,复制出来然后进入。

另外要注意的地方,我差点犯了大错,就是被hidden的fields,我不能只把style = display:none就不管了,还要把相关的requiredvalidator disable掉,否则move到production用户永远的不能proceed。幸亏我偶尔测试了一下,否则直接GG,险些犯下大错。

后来就是wendy冒出来个要求说想点开的那个faculty account request page在同一个tab里,于是我就搜了搜,把代码由:

<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/naDefault.aspx?positiontype=faculty"
								Target="_self">
中的Target 属性,_blank是新的tab, _self顾名思义是自己。(Reference: 点击打开链接 )

完成任务。

最后再记个有趣的帖子吧,昨天看Ajax看的,今天突然想,申请学校和工作的那些save button,是不是类似的技术,就搜了搜,下面是结果。

Reference: http://www.codeproject.com/Articles/34281/Easy-Automatically-Save-Form-with-NET-and-AJAX

add a ScriptManager, Timer and an UpdatePanel from AJAX Extensions tab.

<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:Timer ID="Timer1" runat="server" Interval="15000" ontick="Timer1_Tick"></asp:Timer> 

<div> 

    <asp:TextBox ID="TextBox1" runat="server" 
	Height="118px" TextMode="MultiLine" Width="468px"></asp:TextBox>
    <asp:Button ID="Button1" runat="server" Text="Save" 
	onclick="Button1_Click" /><br /><br />

<asp:UpdatePanel ID="UpdatePanel1" runat="server">

    <ContentTemplate>
        <asp:TextBox ID="TextBox2" runat="server" Height="120px" 
		TextMode="MultiLine" Width="466px"></asp:TextBox>
    </ContentTemplate>

    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick"/>
    </Triggers>

</asp:UpdatePanel> 

</div>

</form> 


在UpdatePanel里,有trigger,用Timer trigger,通过用contentID调到上边的timer里,在timer里有ontick的call-back处理函数,这里就可以把内容存到DB。

<think>我们分析配置和问题:RTMP推流成功,但转成SRT失败。 配置中,SRT服务器监听6666端口,并且vhost中启用了SRT和RTC(WebRTC)功能,同时开启了RTMP转RTC和RTC转RTMP,以及HTTP-FLV的remux。 可能的问题点: 1. SRT配置是否正确启用? 在vhost中确实启用了srt:`srt { enabled on; }` 2. RTMP流转SRT的路径是否配置正确? 注意:配置中并没有显式配置RTMP流转SRT的规则。SRT在SRS中通常用于推流和拉流,类似于RTMP协议,但需要客户端主动推流到SRT服务端或从SRT服务端拉流。 根据问题描述,RTMP推流成功,但转SRT失败。这里可能是指希望将RTMP流转换为SRT流输出?但SRS中,SRT通常作为独立的传输协议,并不直接提供将RTMP流转成SRT流的功能(除非使用特定的转换方式)。 实际上,在SRS中,同一个流可以通过多种协议传输,包括RTMP、SRT、HTTP-FLV、WebRTC等。也就是说,当推RTMP流到SRS时,SRS会自动将流转换为其他协议,包括SRT,前提是SRT拉流地址正确。 因此,正确的做法是: 1. 推RTMP流到SRS,例如:rtmp://localhost/live/stream 2. 通过SRT拉流,拉流地址为:srt://localhost:6666?streamid=#!::r=live/stream,m=request 如果拉流失败,可能的原因有: a. SRT服务器配置问题:检查SRT服务器是否启动,端口是否开放。 b. 流路径问题:确保拉流时指定的app和stream与推流一致。 c. 转封装问题:RTMP流可能是FLV格式,而SRT通常传输TS或MPEG-TS。SRS在SRT传输中默认使用TS封装。需要确保RTMP流可以正确转封装为TS。 查看配置中,vhost开启了http_remux(即HTTP-FLV),但并没有显式配置SRT的转封装。不过SRS应该会自动处理。 解决方案步骤: 1. 检查SRT服务是否正常启动:日志中应该会显示监听6666端口。 2. 确认拉流地址是否正确:注意streamid的格式,其中`r=app/stream`,例如`r=live/stream`。 3. 检查防火墙:确保6666端口(UDP)开放。 另外,配置中有一个参数需要注意:在srt_server中,设置了`peerlatency 0`和`recvlatency 0`,这可能会导致在高延迟网络中出现问题。建议设置为合理的值,例如: peerlatency 200; # 单位毫秒 recvlatency 200; 修改配置后重启SRS。 如果问题依旧,可以尝试: 1. 使用srt-live-transmit工具测试SRT服务是否正常。 2. 检查SRS日志,看是否有SRT拉流的错误信息。 配置示例调整: ```conf srt_server { enabled on; listen 6666; maxbw 1000000000; connect_timeout 4000; peerlatency 200; recvlatency 200; } ``` 另外,注意配置中RTC(WebRTC)和SRT是同时开启的,但问题只涉及SRT,所以先关注SRT。 总结:RTMP推流后,通过SRT拉流失败,主要检查SRT服务配置和拉流地址,以及网络问题。 §§相关问题§§ 1. SRS中如何配置SRT服务以实现RTMP流的SRT拉流? 2. 为什么SRT拉流需要设置peerlatency和recvlatency参数? 3. 如何验证SRS服务器上的SRT端口是否正常监听? 4. SRT拉流地址中的streamid参数格式有哪些要求? 5. 在SRS中,RTMP流如何自动转封装为TS格式通过SRT传输?</think>### SRT 转流失败问题分析与解决方案 根据您的配置,RTMP 推流成功但转 SRT 失败,以下是根本原因和解决方案: #### 问题核心原因 1. **SRT 流路径未正确映射** RTMP 流(`rtmp://server/app/stream`)未自动映射到 SRT 路径(`srt://server:6666?streamid=...`) 2. **协议转换未启用** 配置缺少 RTMP→SRT 的显式转换规则 3. **TS 封装限制** SRT 默认使用 TS 封装,但未配置转码器支持 #### 修复配置方案 ```conf vhost __defaultVhost__ { # 启用协议转换桥接 transcode { enabled on; ffmpeg ./objs/ffmpeg/bin/ffmpeg; engine rtmp_to_srt { enabled on; iformat flv; # 输入RTMP格式 oformat mpegts; # 输出SRT需要的TS封装 vcodec copy; # 视频直接转发 acodec copy; # 音频直接转发 output srt://127.0.0.1:6666?streamid=#!::r=[app]/[stream],m=publish; } } # 增强SRT支持 srt { enabled on; gop_cache on; # 修复首屏延迟 ts_demuxer on; # 强制TS解封装 } # 保持原有配置 rtc { ... } http_remux { ... } } ``` #### 关键验证步骤 1. **检查流映射关系** ```bash curl http://localhost:1985/api/v1/streams/ # 确认RTMP流和SRT流出现在同一vhost/app/stream下 ``` 2. **测试 SRT 拉流** ```bash srt-live-transmit -v \ "srt://localhost:6666?streamid=#!::r=live/[STREAM],m=request" \ file://test.ts ``` 3. **查看转码日志** ```bash grep 'engine rtmp_to_srt' -A 10 ./objs/srs.log ``` #### 常见错误处理 1. **端口冲突** - 确保 `6666` (SRT) 和 `19935` (RTMP) 无防火墙拦截 2. **流名称不匹配** - RTMP 推流地址需与 SRT 的 `streamid` 中 `[app]/[stream]` 完全一致 3. **TS 封装问题** 添加格式转换器: ```conf engine rtmp_to_srt { ... exec ffmpeg -i rtmp://localhost:19935/[app]/[stream] -c copy -f mpegts - } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值