Go根据流地址判断流媒体协议类型

举报
liuzhen007 发表于 2021/05/26 14:35:21 2021/05/26
【摘要】 目录   问题 解决 问题 如何根据一个流媒体地址URL判断对应的流媒体协议,比如RTMP、RTSP协议等。 解决 这里提供一个方法,可以直接拿来用。 func getProtocol(url string) (string, error) { // golang的判断语句没有括号,一开始挺不适应的 if url != "" { // 获取冒号索引...

目录

 

问题

解决


问题

如何根据一个流媒体地址URL判断对应的流媒体协议,比如RTMP、RTSP协议等。

解决

这里提供一个方法,可以直接拿来用。


  
  1. func getProtocol(url string) (string, error) {
  2. // golang的判断语句没有括号,一开始挺不适应的
  3. if url != "" {
  4. // 获取冒号索引位置
  5. index := strings.Index(url, ":")
  6. // 找到了说明URL正确,否则报错
  7. if index > 0 {
  8. // 这里需要注意两点:
  9. // 1. golang字符串的索引原则是左闭右开
  10. // 2. 协议类型最好进行格式化处理再输出返回,比如这里是“最大化”(大写格式)
  11. return strings.ToUpper(url[0:index]), nil
  12. } else {
  13. // 注意提前定义ErrorInvalidURL类型
  14. return "", ErrorInvalidURL
  15. }
  16. }
  17. return "", ErrorNullURL
  18. }

getProtocol() 方法会输出流媒体协议的大写字符串标识,最后给出完整的代码:


  
  1. package main
  2. import(
  3. "fmt"
  4. "strings"
  5. )
  6. var (
  7. ErrorNullURL = fmt.Errorf("url is null")
  8. ErrorInvalidURL = fmt.Errorf("url is not valid")
  9. )
  10. func getProtocol(url string) (string, error) {
  11. if url != "" {
  12. index := strings.Index(url, ":")
  13. if index > 0 {
  14. return strings.ToUpper(url[0:index]), nil
  15. } else {
  16. return "", ErrorInvalidURL
  17. }
  18. }
  19. return "", ErrorNullURL
  20. }
  21. func main() {
  22. url1 := "rtmp://172.0.0.1:1935/test/live"
  23. url2 := "rtsp://172.0.0.1:1554/live"
  24. if pro, err := getProtocol(url1); err == nil {
  25. fmt.Println("url1 protocol: ", pro)
  26. }
  27. if pro, err := getProtocol(url2); err == nil {
  28. fmt.Println("url2 protocol: ", pro)
  29. }
  30. }

运行结果如下:

url1 protocol:  RTMP
url2 protocol:  RTSP

截图:

文章来源: liuzhen.blog.csdn.net,作者:Data-Mining,版权归原作者所有,如需转载,请联系作者。

原文链接:liuzhen.blog.csdn.net/article/details/110346868

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。