我在我的项目中使用 Wowza 流媒体引擎。我通过基本身份验证成功启动了 wowza。我需要使用我的数据库对 wowza 进行身份验证,因为我正在创建一个 java 项目。将 jar 添加到 Wowza 引擎 lib 文件夹后,它将处理身份验证过程。
这是jar的源代码:
public class WowzaTesting {
boolean authStatus = false;
public boolean authenticationTest(String username, String password) {
System.out.println("Authentication Process started");
// authentication code here
// if authentication is done authStatus=true; else authStatus=false;
if (authStatus) {
return true;
} else {
return false;
}
}
}
我已经添加到 conf 文件中:
<Module>
<Name>TestWowza</Name>
<Description>Java code for testing wowza</Description>
<Class>com.test.wowza.WowzaTesting</Class>
</Module>
然后重新启动 wowza 服务器引擎。
我有一些疑问:
目前我正在使用此命令进行直播”
ffmpeg -i "rtsp://localhost:port/livetest" -vcodec copy -acodec copy -f rtsp "rtsp://username:password@localhost:port/live/livetest
最佳答案
Wowza API 具有 AuthenticateUsernamePasswordProviderBase 类,您需要扩展该类以集成数据库身份验证。
目前在 Wowza 中 RTSP 身份验证的工作方式是指定要在应用程序配置中使用的身份验证方法(在文件的 Root/Application/RTP/Authentication/PublishMethod 部分)。这些发布方法在身份验证配置中定义。要使用自定义身份验证模块拦截它,您需要将 Java 类作为属性添加到此 Authentication.xml 文件中。在 Wowza 的第 3 版中,Authentication.xml 文件位于 conf/目录中,可以轻松编辑,但在第 4 版中,它已捆绑到 com.wowza.wms.conf 包中(您可以从包并将其复制到您的 conf/文件夹,它将覆盖包中的那个)。因此,Wowza 将使用您的类中定义的方法而不是内置方法。
当 Wowza 收到传入的 RTSP 连接时,它应该从连接中查询用户名/密码,并将它们传递给您的 Java 类以处理身份验证。
集成数据库进行身份验证的示例代码如下:
package com.wowza.wms.example.authenticate;
import com.wowza.wms.authentication.*;
import com.wowza.wms.logging.WMSLoggerFactory;
import java.sql.*;
public class AuthenticateUsernamePasswordProviderExample extends AuthenticateUsernamePasswordProviderBase
{
public String getPassword(String username)
{
// return password for given username
String pwd = null;
WMSLoggerFactory.getLogger(null).info("Authenticate getPassword username: " + username);
Connection conn = null;
try
{
conn = DriverManager.getConnection("jdbc:mysql://localhost/wowza?user=root&password=mypassword");
Statement stmt = null;
ResultSet rs = null;
try
{
stmt = conn.createStatement();
rs = stmt.executeQuery("SELECT pwd FROM users where username = '"+username+"'");
while (rs.next())
{
pwd = rs.getString("pwd");
}
}
catch (SQLException sqlEx)
{
WMSLoggerFactory.getLogger(null).error("sqlexecuteException: " + sqlEx.toString());
}
finally
{
if (rs != null)
{
try
{
rs.close();
}
catch (SQLException sqlEx)
{
rs = null;
}
}
if (stmt != null)
{
try
{
stmt.close();
}
catch (SQLException sqlEx)
{
stmt = null;
}
}
}
conn.close();
}
catch (SQLException ex)
{
// handle any errors
System.out.println("SQLException: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());
}
return pwd;
}
public boolean userExists(String username)
{
// return true is user exists
return false;
}
}